如何有效地查找和过滤元素列表。 这是HTML
<span class="tab-strip-text" unselectable="on">Admin</span>
<span class="tab-strip-text" unselectable="on">User</span>
<span class="tab-strip-text" unselectable="on">Reports</span>
<span class="tab-strip-text" unselectable="on">Logs</span>
目前我正在使用以下方法查找并过滤并根据文本
点击我想要的元素public static void clickTab(String tabText){
List<WebElement> tabs = driver.findElements(By.className("tab-strip-text"));
for(WebElement tab : tabs){
if(tab.getText().equals(tabText)){
tab.click();
break;
}
}
}
是否有更好的方法来查找和迭代列表(基于元素的text()点击?)
THX
答案 0 :(得分:2)
将XPath与您在定位器中使用的文本一起使用。
//*[@class='tab-strip-text' and text()='Reports']
然后你有:
WebElement reportTab = driver.findElement(By.xpath("//*[@class='tab-strip-text' and text()='Reports']"));
reportTab.click();
注意如果您的网站支持多语言,我建议您不要在定位器中使用文字。在这种情况下,最好的方法是为每个元素的源添加有意义的类名。
答案 1 :(得分:1)
试试这个xpath
//span[contains(text(),'Reports')]
String value="text you are looking for";
public void method(String value){
driver.findElements(By.xpath( //span[contains(text(),'"+value+"')])).click();
}
答案 2 :(得分:0)
我很久以前就知道这篇文章,但是我想有人会寻找解决方案的:)
tabs.forEach(tab -> {
if(tab.getText().equals(tabText)){
tab.click();
}
}
答案 3 :(得分:0)
我正在使用流过滤器()。这将帮助您根据给定的文本点击元素。
filter 返回一个流,该流由该流中与给定谓词匹配的元素组成。
List<WebElement> categories = driver.findElements(By.className("tab-strip-text"));
categories.stream().filter(ele->ele.getText().equalsIgnoreCase("Admin")).forEach(ele -> ele.click());