我有一个带有下拉菜单的Google搜索栏,其中的选项属于UL和li下的实际选项。我无法检索li的数据字段,而我能够检索计数。尝试过使用List元素并通过它循环,但没有运气。所有选项的下拉都不可见。 我必须使用Selenium Web驱动程序打印与li相关的标题。
以下是我的尝试:
ul class = classname> xxx - GSA 2天前
wb.findElement(By.xpath( “<>” 中))点击(); List items = html_list.findElements(By.tagName(“li”)); System.out.println(“元素的大小是”+ items.size()); for(WebElement item:items){html_list.sendKeys(Keys.DOWN); //模拟视觉运动 wb.manage()。timeouts()。implicitlyWait(1000,TimeUnit.SECONDS);的System.out.println(item.getText()); }
答案 0 :(得分:0)
假设#1:点击第1行后,您不会等待页面加载。 li 元素位于DOM中,但它们未完全加载。您可以通过在第1行和第2行之间引入延迟来测试该假设。我有用于等待页面加载的代码,但具体取决于JavaScript框架(例如jQuery,AngularJs),加载微调器实现和浏览器readystate 。我的状态逻辑看起来像这样:
/**
* Wait for browser readystate to be complete. But don't wait forever.
*
* @param webDriver
*/
public void waitForBrowserReadystateComplete(WebDriver webDriver) {
for (int a=0; a<20; a++) {
JavascriptExecutor javascriptExecutor = (JavascriptExecutor) webDriver;
if (javascriptExecutor.executeScript("return document.readyState")
.toString().equals("complete")) {
break;
}
sleepResponsibly(500);
}
}
public void sleepResponsibly(int timeMillisecond){
try{
Thread.sleep(timeMillisecond);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
throw new RuntimeException(ex);
}
}
Hypthosis#2:文本节点很复杂。当文本节点编码复杂格式时,我遇到方法getText()失败以返回文本。我通过调用以下内容来解决这个问题:
public static String getTextFromElementsTextNodes(WebDriver webDriver, WebElement element) throws IllegalArgumentException {
String text = "";
if (webDriver instanceof JavascriptExecutor) {
text = (String)((JavascriptExecutor) webDriver).executeScript(
"var nodes = arguments[0].childNodes;" +
"var text = '';" +
"for (var i = 0; i < nodes.length; i++) {" +
" if (nodes[i].nodeType == Node.TEXT_NODE) {" +
" text += nodes[i].textContent;" +
" }" +
"}" +
"return text;"
, element);
} else {
throw new IllegalArgumentException("driver is not an instance of JavascriptExecutor");
}
return text;
}
需要注意的是getTextFromElementsTextNodes()可能会返回非ASCII字符,因此我执行以下操作:
System.out.println(getTextFromElementsTextNodes(wb,item).replaceAll("[^\\x00-\\x7F]", " "));
答案 1 :(得分:0)
我终于可以检索li下的选项了。这就是我所做的并且有效 for(WebElement MyListOptions:listOfLiTags){
String myoptions=serchOptions.getAttribute("<<The actual attribute value which is storing my options>>");
System.out.println("THE List Options are" + txt3);
}