【发布时间】:2016-06-13 16:10:05
【问题描述】:
我正在尝试识别并选择页面上不唯一的元素。我正在通过为我正在使用的表创建一个行列表来解决这个问题(见下文),但仍然得到错误的元素。这是用例:
我需要选择此表中的第 3 行,因此我创建了一个带有“tr”标签的 elemnet 列表。一旦我有了清单,我就会去寻找具体的名字,在这个 caes Octopus, Complex 中。找到此名称后,我将使用我的 WebElement 对象来查找与我想要该行的数量相对应的元素。在这种情况下,圈出 105.00。但是我总是得到页面中的第一个金额,在这个例子中,突出显示的 170.00。每行的所有元素都具有相同的名称。我需要 WebDriver 只关注我找到的行而不是整个页面。
我试图在一个列表中创建一个列表。这些元素未在页面上编入索引,因此我不能只执行 get(0) 来查找我要查找的内容。我试图在与我的数量选择器匹配的行元素中找到元素。这两种技术我都碰壁了。到目前为止,我针对此问题的代码如下:
dispatchTable = driver.findElement(By.cssSelector("#dispatchBoardTable"));
List<WebElement> dispatchItems = dispatchTable.findElements(By.tagName("tr"));
System.out.println("Looking for " + Accountant.getClientName() + " in Dispatch Board");
for(WebElement we : dispatchItems){
if(we.equals(null))
continue;
//If we find the name we're looking for, get the amount for that name.
if(we.getText().contains(Accountant.getClientName())){
clientTotal = we.findElement(By.xpath("//*[starts-with(@data-bind, 'text: Amount')]")).getText();
System.out.println("Total for this client Dispatch Board is: " + clientTotal);
}
}
【问题讨论】:
-
将“看到的元素”存储在集合中,并使用
contains()检查“当前元素”是否已经看到? -
if(we.equals(null))如果我们为空,则没有任何意义,您将获得 NPE,因此它将跳过所有内容或因 NPE 而失败 -
你能添加你想要自动化的页面的 html 吗?
-
我宁愿不要。我不确定这件事的机密性,我宁愿安全行事。你具体在找什么?也许我可以在这里添加它。
标签: java selenium element rows