我的列表中大约有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>
答案 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)
没有看到要对其进行测试的页面,很难确切地知道问题所在,但是如果就像我看到的其他页面一样,您将需要:
我的建议是将所有这些都放在称为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();
}