列出WebElement总是从下拉列表中选择第一个元素,但我想选择第四个元素

时间:2018-10-29 15:27:41

标签: java selenium-webdriver drop-down-menu

我的列表中大约有190个项目,并且还在for循环中一一跟踪。我将条件应用于特定的文本。但是,调试器进入条件,但始终从下拉列表中选择第一个元素。在我提到的下拉列表的第4个索引中显示的代码国家“美国”。

List<WebElement> options=driver.findElements(By.xpath("//*[@id='Countryitems_popup']/div[1]/ul//li/span"));
for(int i=0;i<options.size();i++)
{
    WebElement select=options.get(i);
    String innerhtml=select.getAttribute("innerHTML");

    if(innerhtml.contentEquals("America"))
        {
            select.click();
            break;
        }
}

HTML如下所述:

<div id="Countryitems_popup" class="e-scroll e-js e-wid" tabindex="" style="height: auto; display: block;">
    <div class="h-con" style="height: 150px; width: 158.891px;">
        <ul class="H-Kl" role="listbox">
            <li data-value="001" id="004" role="option" unselectable="on" class="">
                <span class=" e-ddltxt">Country 1</span>
            </li>
            <li data-value="676" id="006" role="option" unselectable="on" class="">
                <span class=" e-ddltxt">Country 2</span>
            </li>
            <li data-value="765" id="009" role="option" unselectable="on" class="">
                <span class=" e-ddltxt">Country 3</span>
            </li>
            <li data-value="0067" id="065" role="option" unselectable="on" class="">
                <span class=" e-ddltxt">America</span>
            </li>
        </ul>
    </div>
</div>

3 个答案:

答案 0 :(得分:1)

用于每个循环以提高可读性。尝试使用此代码:

List<WebElement> options= driver.findElements(By.xpath("//[@id='Countryitems_popup']/div[1]/ul//li/span"));
            for(WebElement option : options) {
                if(option.getText().trim().equals("America")) {
                    option.click();
                    break;
                }
            }  

如果xpath应该正确,这应该可以工作。

答案 1 :(得分:0)

您可以使用选择器本身来实现,而无需循环。用于查找带有文本“ America”的列表元素的xpath将为

driver.findElement(By.xpath("//[@id='Countryitems_popup']/div[1]/ul//li[conatins(text(), 'America')]")).click()

答案 2 :(得分:0)

没有看到要对其进行测试的页面,很难确切地知道问题所在,但是如果就像我看到的其他页面一样,您将需要:

  1. 单击“下拉列表”将其打开(并使选项可见)
  2. 等待期望的选项可单击(指示列表已打开且可见)
  3. 点击所需的选项

我的建议是将所有这些都放在称为selectCountry()(或类似名称)的方法中,并传递所需的国家/地区名称。

public void selectCountry(String countryName)
{
     // I'm assuming this is the container for the dropdown. Clicking it should open the dropdown
    driver.findElement(By.id("Countryitems_popup")).click();
    new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@id='Countryitems_popup']//span[.='" + countryName + "']))).click();
}