【问题标题】:Find a non-unique element in a table of rows Java在行表Java中查找非唯一元素
【发布时间】: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


【解决方案1】:

像下面这样使用

  clientTotal = we.findElement(By.xpath("td[starts-with(@data-bind, 'text: Amount')]")).getText();

使用 'td' 而不是 '*' 我们可以使用任何东西。

【讨论】:

  • 这就是解决方案。我对 xpath 并不熟悉。你能解释一下为什么 //* 不会在 td 的地方工作吗? //* 会覆盖我的上下文吗?
  • 是的,在这里我们将新的 xpath 附加到之前的我们。所以我们使用 '//' 它可能看起来像 //previous xpath//present 这可能会导致错误。在上面我们没有使用'//',所以它创建了像 //previous xpath/present 这样的 xpath,它拾取所需的元素。 '*' 表示元素有任何标签,如果我们说'td' 表示元素只有 td 标签。
  • 哦,好吧,现在更有意义了。谢谢!
【解决方案2】:

使用下面的行查找 xpath dispatchTable = driver.findElement(By.xpath("")); 检查它是否正常工作。 要么 如果您使用 CSS,请检查两个相同的数据(TD 数据)CSS 选择器是否相同。

【讨论】:

  • 感谢您的回复。我试过了,但仍然有同样的行为。
猜你喜欢
  • 1970-01-01
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
  • 2023-03-16
相关资源
最近更新 更多