我需要在一个元素中找到文本,然后断言它是否与所需的结果匹配。
问题是,页面中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;
答案 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')])"));
}
有多种方法可以验证是否找到了所需的元素。一种方法是像使用
这样的TestNGAssert
Assert.assertTrue(test().size() > 0, "Verify an element containing 'High' was found.");
答案 2 :(得分:0)
//DIV[@class='issues-list-item clearfix'])[1]
您的查询错误。最后的[1]表示它将从之前所有与查询匹配的项目中选择第一个项目,也就是您只会与第一个进行比较。您不需要的第二个查询,是否检查大小(可选在for循环之前)