java-webdriver 单击列表元素


<div class="class0">
  <div class="class1">
    <input tabindex="4" id="pqr" autocomplete="off" type="text">
  </div>
  <ul class="class2">
    <li class="group-result">polka</li>
    <li class="active-result group-option" style="" data-array-      index="1">abcd</li>
    <li class="active-result group-option" style="" data-array-index="2">efgh</li>
    <li class="group-result">ijkl</li>
    <li class="active-result group" style="" data-array-index="3">abcd</li>
    <li class="active-result group" style="" data-array-index="4"></li>
    <li class="active-result" style="" data-array-index="5">xyz</li>
  </ul>

如果我无法在此处重现整个代码,请原谅我。在上面的 html 中,系统会提示用户在输入框中键入并生成自动建议。您在上面看到的是输入框后得到的。

我需要单击一个 li 元素,比如 xyz。一种方法是获取 ul 元素,然后获取其所有子元素。然后遍历它们并通过检查其内部文本来选择正确的文本。所以,我试过了

WebElement a1 = driver.findElement(By.className("class0"));
WebElement a2 = a1.findElement(By.className("class2"));
List <WebElement> a3 = a2.findElements(By.xpath(".//*));
System.out.println(a3.size());

正如这个问题的回复中所建议的:如何使用webdriver获取元素的所有后代?

但是 print 语句打印 0,即找不到子项

有人可以建议为什么吗?

此外,非常欢迎任何其他方法建议。

谢谢

你应该等到class0div 存在于 DOM 中,然后再查询它的子级:

WebDriverWait wdw = new WebDriverWait(webDriver, 20);
WebElement a1 = wdw.until(ExpectedConditions.presenceOfElementLocated(By.className("class0")));
WebElement a2 = a1.findElement(By.className("class2"));
List <WebElement> a3 = a2.findElements(By.xpath(".//*));
System.out.println(a3.size());

最新更新