【发布时间】:2021-12-21 22:38:12
【问题描述】:
我有这个代码:
<ul class="sidebar-menu left">
<li index="1">Apple</li>
<li index="2">Orange</li>
<li index="3">Banana</li>
</ul>
如何将此列表(所有 li)添加到 List
【问题讨论】:
我有这个代码:
<ul class="sidebar-menu left">
<li index="1">Apple</li>
<li index="2">Orange</li>
<li index="3">Banana</li>
</ul>
如何将此列表(所有 li)添加到 List
【问题讨论】:
要打印所有标题部分文本,您需要为visibilityOfAllElementsLocatedBy() 引入WebDriverWait,您可以使用Java8 stream() 和map(),您可以使用以下任一@ 987654325@:
使用 cssSelector 和 getText():
System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("ul.sidebar-menu.left li"))).stream().map(element->element.getText()).collect(Collectors.toList()));
使用 xpath 和 getAttribute("innerHTML"):
System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//ul[@class='sidebar-menu left']//li"))).stream().map(element->element.getAttribute("innerHTML")).collect(Collectors.toList()));
【讨论】:
你可以使用findElements方法。
ArrayList<String> fruitNames = new ArrayList<String>();
List<WebElement> fruits = driver
.findElements(By.xpath("//ul[contains(@class,'sidebar-menu left')]//child::li[@index]"));
for (WebElement element : fruits) {
fruitNames.add(element.getText());
}
【讨论】:
如果这个类是唯一的
sidebar-menu left
那么你可以构建这个
css选择器
ul.sidebar-menu.left li
xpath
//ul[contains(@class,'sidebar-menu left')]//child::li[@index]
child 只是规范,你也可以删除它
//ul[contains(@class,'sidebar-menu left')]//li[@index]
它们应该代表 HTMLDOM 中的多个节点,在本例中为 3。
要添加到网络元素列表,只需使用findElements(复数)
List<WebElement> elems = driver.findElements(By.xpath("//ul[contains(@class,'sidebar-menu left')]//child::li[@index]"));
如果您想检索网络元素文本,
for (WebElement e : elems){
e.getText();
}
【讨论】:
将findElements 与xpath 一起使用
xpath = "//ul[@class ='sidebar-menu left']//li"
【讨论】: