【问题标题】:Extract text from multiple xpath and assert text - Selenium/Java从多个 xpath 中提取文本并断言文本 - Selenium/Java
【发布时间】:2018-12-15 05:39:15
【问题描述】:

我需要在元素中查找文本并断言它是否与我所需的结果匹配。

问题是,页面中可以有 n 个从 1 到 100 的元素。所以我无法获取所有这些元素的 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;

【问题讨论】:

    标签: java selenium selenium-webdriver


    【解决方案1】:

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

    【讨论】:

    • 我应该在[1] 的位置添加一个通配符吗?我该如何断言?
    【解决方案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 作为文本。

    【讨论】:

    • 但是我需要检查文本“high”的所有元素,如果没有找到“high”则测试失败
    • 所以你应该返回一个网络元素列表。
    • 谢谢。但它会引发一堆错误。 return list 的类型不兼容。无法解析 contains 的方法。并且变量已经在element 的范围内定义
    • 更新了整个代码,这个错误是因为我们没有使用getText无法解析包含的方法
    • 只是澄清一下,如果 xpath 没有文本,这怎么会失败?
    【解决方案3】:

    执行此操作的更有效方法是将“高”检查添加到定位器。这样你就不必遍历所有元素来只找到你想要的元素。您的定位器可以更快地为您完成所有工作。代码也少了很多。

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

    您可以通过多种方式验证是否找到了所需的元素。一种方法是使用 TestNG Assert like

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多