我需要在下拉框中选择一个项目。此下拉框用作 ul 和 li 项目。
下拉菜单被识别为span元素,并且单击下拉按钮时显示的列表被识别为 ul 和 li 项目。
当使用以下代码选择项目时,错误消息显示点击时无法看到这个问题。
li 元素 innerHTML 属性正确返回状态文本,但getText()
方法返回空。
oStatusLi.isDisplayed()
也始终返回false。
WebElement statusUl = driver.findElement(By.xpath("//*[@id='ddlCreateStatus-" + strProjId + "_listbox']"));
statusUl.click();
Thread.sleep(3000);
List<WebElement> oStatusLis = statusUl.findElements(By.tagName("li"));
for(WebElement oStatusLi: oStatusLis){
if(oStatusLi.getAttribute("innerHTML")=="Paused")
{
oStatusLi.click();
break;
}
}
感谢是否有任何团体可以帮助我在java代码上选择列表项。
答案 0 :(得分:0)
首先:将WebElement存储在内存中是不好的做法,因为它可能导致StaleElementExceptions。它现在可能会起作用,但是在未来的道路上,你最终会因为此而发生奇怪的失败。
其次,您可以使用单个选择器处理元素的选择,而不是加载所有&lt; li>元素进入内存并迭代它们。
//Store the selectors rather than the elements themselves to prevent receiving a StaleElementException
String comboSelector = "//*[@id='ddlCreateStatus-" + strProjId + "_listbox']";
String selectionSelector = comboSelector + "//li[contains(.,'Paused')]";
//Click your combo box. I would suggest using a WebDriverWait or FluentWait rather than a hard-coded Thread.sleep here
driver.findElement(By.xpath(comboSelector)).click();
Thread.sleep(3000);
//Find the element to verify it is in the DOM
driver.findElement(By.xpath(selectionSelector));
//Execute JavaScript function scrollIntoView on the element to verify that it is visible before clicking on it.
JavaScriptExecutor jsExec = (JavaScriptExecutor)driver;
jsExec.executeScript("arguments[0].scrollIntoView();", driver.findElement(By.xpath(selectionSelector)));
driver.findElement(By.xpath(selectionSelector)).click();
您可能最终还是必须执行JavaScript函数,同时单击该元素,具体取决于scrollIntoView是否有效。