【问题标题】:Selenium Webdriver Autocomplete drop downSelenium Webdriver 自动完成下拉菜单
【发布时间】:2016-09-21 13:33:16
【问题描述】:

我正在使用一个注册页面,我有一些基本字段,例如称呼、名字、姓氏和地址详细信息。

Salutation下拉结构如下,

<div class="k-list-scroller" unselectable="on" style="height: 200px;">
<ul id="Salutation_listbox" class="k-list k-reset" unselectable="on" tabindex="-1" aria-hidden="false" aria-live="off" data-role="staticlist" role="listbox">
<li id="0741907a-4369-4ac2-8100-3829655a7522" class="k-item k-state-selected k-state-focused" data-offset-index="0" unselectable="on" role="option" tabindex="-1">Salutation</li>
<li class="k-item" data-offset-index="1" unselectable="on" role="option" tabindex="-1" style="">Mr</li>
<li class="k-item" data-offset-index="2" unselectable="on" role="option" tabindex="-1">Mrs</li>
<li class="k-item" data-offset-index="3" unselectable="on" role="option" tabindex="-1">Miss</li>
<li class="k-item" data-offset-index="4" unselectable="on" role="option" tabindex="-1">Ms</li>
<li class="k-item" data-offset-index="5" unselectable="on" role="option" tabindex="-1">Dr</li>
<li class="k-item" data-offset-index="6" unselectable="on" role="option" tabindex="-1">Prof</li>
<li class="k-item" data-offset-index="7" unselectable="on" role="option" tabindex="-1">Rev</li>
</ul>

为了从下拉值中选择 Mr,我使用了如下代码,

String capColorDropDown = "//span[@role='listbox']";
driver.findElement(By.xpath(capColorDropDown)).click();

String itemName = "Orange";
String listId = "color_listbox";
Thread.sleep(2000);

String xpathForItem = "//ul[@id='Salutation_listbox']/li[@class='k-item' and text()='Mr']";
driver.findElement(By.xpath(xpathForItem)).click();

这段代码对我来说很好用,我可以选择 Mr 值作为称呼,但现在我必须填写地址详细信息字段,其中城市字段是自动完成的下拉菜单,其结构如下,

<div class="k-list-scroller" unselectable="on" style="height: auto;">
<ul id="AddressDetails_City_listbox" class="k-list k-reset" unselectable="on" tabindex="-1" aria-hidden="false" aria-live="polite" data-role="staticlist" role="listbox">
<li class="k-item" data-offset-index="0" unselectable="on" role="option" tabindex="-1" style="">ALPURRURULAM, NT, Australia, 4825</li>
<li class="k-item" data-offset-index="1" unselectable="on" role="option" tabindex="-1">ALPURRURULAM, null, Invalid, </li>
<li class="k-item" data-offset-index="2" unselectable="on" role="option" tabindex="-1">ALPURRURULAM, null, Invalid, </li>
</ul>

我正在尝试使用相同的代码来访问 ALPURRURULAM, NT, Australia, 4825 值,

String capColorDropDown1 = "//span[@role='listbox']";
driver.findElement(By.xpath(capColorDropDown1)).click();

String itemName1 = "Orange";
String listId1 = "color_listbox";
Thread.sleep(2000);

String xpathForItem1 = "//ul[@AddressDetails_City_listbox']/li[@class='k-item' and text()='ALPURRURULAM, NT, Australia, 4825']";
driver.findElement(By.xpath(xpathForItem)).click();

但是 selenium 正在访问 //span[@role='listbox] 并再次单击称呼下拉列表。 city 字段也和listbox 作用相同,但是如何区分和选择 city 字段值呢?

【问题讨论】:

    标签: javascript jquery selenium webdriver


    【解决方案1】:

    您应该尝试使用更具体的定位器,如下所示:-

    WebElement el = driver.findElement(By.id("AddressDetails_City_listbox"));
    el.click();
    
    //now select desired option
    new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfNestedElementLocatedBy(el, By.cssSelector("li[data-offset-index='0']"))).click();
    

    【讨论】:

    • 在执行上述评论时,我收到错误消息为 ElementNotVisibleException: element not visible
    • @user3836485 这个异常发生在哪一行??是否在异常之前打开了右侧下拉菜单??
    • 先执行这行driver.findElement(By.id("AddressDetails_City_listbox")).click();,让我知道这行是打开右下拉菜单还是抛出错误??
    • 不,它没有打开特定的下拉菜单,它会抛出 ElementNotVisibleException: element not visible
    • @user3836485 好的,那你能不能也分享这个带有span标签的下拉HTML??因为在您提供的 HTML 中,我没有看到任何 span 元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    相关资源
    最近更新 更多