WebDriver过滤元素列表

时间:2013-12-04 02:58:42

标签: java selenium webdriver selenium-webdriver

如何有效地查找和过滤元素列表。 这是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

4 个答案:

答案 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());