我正在尝试从extjs组合框中选择一个选项
在下面的代码中,listElements
仅提供可见选项(显示在屏幕中)而不是所有选项。
此处仅限于选择屏幕中可用的选项之一
我想选择列表底部的值
我没有找到任何选项来向下拖动列表以选择所需的选项。
List<WebElement> listElements = TestUtil.getWebDriver().findElements((By.className("x-boundlist-item")));
for(WebElement ele : listElements){
if(ele.getText().equals(TestUtil.getValue(DateTimeConstants.TIMEZONE_INPUT_VALUE))){
ele.click();
break;
}
}
请找到html:
这是组合框html:
<input id="currentTimezone-inputEl" class="x-form-field x-form-text x-form-focus x-field-form-focus x-field-default-form-focus" type="text" style="width: 100%; -moz-user-select: text;" name="dateTimeData.selectedTimezone" value="-- Please Select --" autocomplete="off" aria-invalid="false" data-errorqtip="">
选项如下所示:
<div id="ext-gen1024" class="x-reset">
<div id="ext-gen1074" class="x-reset">
<div id="ext-gen1076" class="x-css-shadow" role="presentation" style="z-index: 19000; left: -9999px; top: -9995px; width: 355px; height: 296px; box-shadow: 0px 0px 4px rgb(136, 136, 136); display: none;"></div>
<div id="ext-gen1079" class="x-css-shadow" role="presentation" style="z-index: 19000; left: 20px; top: 321px; width: 355px; height: 296px; box-shadow: 0px 0px 4px rgb(136, 136, 136); display: none;"></div>
<div id="boundlist-1022" class="x-boundlist x-boundlist-floating x-layer x-boundlist-default" tabindex="-1" style="left: 20px; top: 317px; width: 355px; z-index: 19001; height: 300px; display: none;">
<div id="boundlist-1022-listEl" class="x-boundlist-list-ct" style="overflow: auto; height: 299px;">
<ul>
<li class="x-boundlist-item" role="option">Africa/Abidjan</li>
<li class="x-boundlist-item" role="option">Africa/Accra</li>
<li class="x-boundlist-item" role="option">Africa/Addis_Ababa</li>
<li class="x-boundlist-item" role="option">Africa/Algiers</li>
<li class="x-boundlist-item" role="option">Africa/Asmara</li>
<li class="x-boundlist-item x-boundlist-selected" role="option">America/St_Lucia</li>
</div>
</div>
</div>
答案 0 :(得分:2)
是的,我可以重现这个问题。原因是Selenium不会点击不可见元素,每个不可见元素的文本也都是空的。
此处大多数组合列表元素都是不可见的,因此ele.getText()
不会为您提供任何内容。因此,您将无法将文本与所需文本进行比较。
但是,解决方法是,在不使用ele.getText()
来获取文本的情况下,您可以尝试使用元素的textContent
属性来获取文本。此外,Selenium不会点击不可见元素,因此您需要使用Actions
click()
而不是普通click()
。以下是如何做到这一点。
List<WebElement> listElements = TestUtil.getWebDriver().findElements((By.cssSelector(".x-boundlist:not([style*='display: none'])")));
for(WebElement ele : listElements){
if(ele.getAttribute("textContent").equals(TestUtil.getValue(DateTimeConstants.TIMEZONE_INPUT_VALUE))) {
// print out ele.getAttribute("textContent") if you want
// ele.click(); ElementNotVisible exception may be thrown
new Actions(TestUtil.getWebDriver()).click(ele).perform();
break;
}
}
}
答案 1 :(得分:0)
要解决此问题,我们可以按以下方式使用xpath。未选择国家/地区的原因是它不可见,对于不可见元素,selenium无法执行该操作。 我们必须首先通过单击输入框使国家/地区列表可见。列表可见后,我们可以选择列表中的任何国家/地区。
// Code to make the country list visible
WebElement element = driver.findElement(By.xpath("//div[contains(@id, 'boundlist')]"));
element.click();
//To click on some country in the drop down
driver.findElement(By.xpath("//div[contains(@id, 'boundlist')]//ul//li[text() = 'Africa/Abidjan']")).click();
//To make a reusable method
public void selectCountry(String countryName)
{
driver.findElement(By.xpath("//div[contains(@id, 'boundlist')]//ul//li[text() = '" +countryName +"']"));
}