java Selenium -过滤/循环元素以检查特定文本

mrphzbgm  于 2023-01-29  发布在  Java
关注(0)|答案(2)|浏览(104)

由于Java不是我的“最好的语言”,我想请求支持。我正在尝试验证列表中的元素是否包含特定的值。
1.我有一个至少定位5个以上元素的元素
1.我试着得到那个元素:例如List<WebElement> elementsList = getWebElementList(target, false);
1.我尝试验证特定文本是否是已使用列表的一部分。方法如下:
elementsList.contains(valueToCheck);
它不工作...
我还发现了一种使用stream()方法的方法,看起来或多或少像这样,但我在continuation方面遇到了麻烦:
elementsList.stream().filter(WebElement::getText.....
你能解释一下现在Java是如何处理列表的吗?在C#中我主要使用LINQ,但不知道Java是否有类似的功能。

sg2wtvxw

sg2wtvxw1#

一旦你得到了元素列表。你可以尝试类似的东西。这将返回真或假。

elementsList.stream().anyMatch(e -> e.getText().trim().contains("specficelementtext")
czq61nw1

czq61nw12#

不能直接对WebElement对象列表应用contains()方法。
此方法只能应用于String对象。
您也不能直接从WebElement对象列表中提取文本。
你可以做的是:
获取与给定定位器匹配的WebElement列表,迭代列表中的WebElement,提取其文本内容,并检查该文本内容是否包含所需文本,如下所示:

public static boolean waitForTextInElementList(WebDriver driver, By locator, String expectedText, int timeout) {
    try {
        List<WebElement> list;
        for (int i = 0; i < timeout; i++) {
            list = driver.findElements(locator);
            for (WebElement element : list) {
                if (element.getText().contains(expectedText)) {
                    return true;
                }
            }
            i++;
        }
    } catch (Exception e) {
        ConsoleLogger.error("Could not find the expected text " + expectedText + " on specified element list" + e.getMessage());
    }
    return false;
}

相关问题