从多个xpath提取文本并断言文本-Selenium / Java

时间:2018-07-06 15:11:35

标签: java selenium selenium-webdriver

我需要在一个元素中找到文本,然后断言它是否与所需的结果匹配。

问题是,页面中1到100之间可以有n个元素。因此,我无法获取所有这些元素的xpath,然后在其中声明文本。

xpath看起来像这样:(从第一个元素开始)

(//DIV[@class='issues-list-item clearfix'])[1]
(//DIV[@class='issues-list-item clearfix'])[2]
(//DIV[@class='issues-list-item clearfix'])[3]
(//DIV[@class='issues-list-item clearfix'])[4]
....
(//DIV[@class='issues-list-item clearfix'])[100]

如何遍历这些xpath并为我的文本断言?

我在参考了几篇文章后尝试了以下方法,但这确实没有帮助。

private static WebElement element = null;
    private static List<WebElement> elements = null;

public WebElement test() throws Exception {
    elements = driver.findElements(By.xpath("(//DIV[@class='issues-list-item clearfix'])[1]"));
    for (WebElement element : elements) {

        List<WebElement> TE = element.findElements(By.xpath("(//DIV[@class='issues-list-item clearfix'])[1]"));


        if (TE.size() > 0) {

            String myText = TE.get(0).getText();
            if (myText.contains("High")) {
                return element;
            }
        }
    }

    return null;

3 个答案:

答案 0 :(得分:2)

您可以尝试以下方法:

public List<WebElement> test() throws Exception {
        List<WebElement> TE  = new ArrayList<WebElement>();
         elements = driver.findElements(By.xpath("(//DIV[@class='issues-list-item clearfix'])"));
            for (WebElement element : elements) {
                if(element.getText().contains("High")) {
                       TE.add(element);
                }
            }
            return TE;
    }

请注意,它将返回一个列表Web元素,其中包含High作为文本。

答案 1 :(得分:1)

更有效的方法是将“高”的支票添加到定位器。这样,您不必遍历所有元素即可仅查找所需元素。定位器可以为您更快地完成所有工作。代码也少很多。

public List<WebElement> test() throws Exception {
     return driver.findElements(By.xpath("(//DIV[@class='issues-list-item clearfix'][contains(.,'High')])"));
}

有多种方法可以验证是否找到了所需的元素。一种方法是像使用

这样的TestNG Assert
Assert.assertTrue(test().size() > 0, "Verify an element containing 'High' was found.");

答案 2 :(得分:0)

//DIV[@class='issues-list-item clearfix'])[1]您的查询错误。最后的[1]表示它将从之前所有与查询匹配的项目中选择第一个项目,也就是您只会与第一个进行比较。您不需要的第二个查询,是否检查大小(可选在for循环之前)