【问题标题】:How to find Child Element in a Parent WebElement in Selenium webdriver如何在 Selenium webdriver 的父 WebElement 中查找子元素
【发布时间】:2017-01-05 09:56:18
【问题描述】:

我以为WebElement.findElement()只搜索了元素下面的DOM, 但它显然搜索了整个 DOM。我在 HTML 中有这样的东西:

<table>
<tbody>
  <tr>
      <td>Some Text</td>
  </tr>
  <tr class="network">
      <td><input ...></td>
  <tr>
      <td>Some More Text</td>
  </tr>
  <tr class="network">
       <td><input ...></td>
</tbody>
</table>

硒代码如下:

    List<WebElement> tableRows =
    radioTable.findElements(By.CssSelector("tbody > tr"));
    for (WebElement row : tableRows) {
    String s = row.getAttribute("class");
    if (s.equals("network")) {

    currentGroup.add(row.findElement(By.CssSelector(".network")));
    }

但是,row.findElement() 调用从 DOM 顶部搜索并 每次都找到相同的首字母。

如果WebElement.findElement() 只是在 当前元素。

【问题讨论】:

  • 它只搜索该元素的子节点。为什么你认为不是?
  • 我不确定为什么它不在当前节点下搜索,但如果您需要在行元素下搜索,请尝试使用xpath 作为row.findElement(By.CssSelector(".//*[@class = 'network']")) 这里. 将表示行为当前节点..:)
  • 谢谢,它像你建议的那样在 XPATH 中工作,但我需要在 CssSelector 中工作的等效东西。 ,是否有任何表示当前行的内容?我正在使用仅支持 CssSelector 的框架。不能使用 XPath
  • 奇怪的是我们两个名字发音相似。

标签: selenium-webdriver css-selectors


【解决方案1】:

我们可以获取行元素的索引,然后使用第 n 个子选择器,我们可以这样选择子元素。

List <WebElement> tableRows =
radioTable.findElements(By.CssSelector("tbody > tr"));
tableRows.forEach((row, index) => {
    String s = row.getAttribute("class");
    if (s.equals("network")) {
        currentGroup.add(row.findElement(By.CssSelector(`.network:nth-child(${index + 1}) .network`)));
    }
})

【讨论】:

    猜你喜欢
    • 2012-12-12
    • 1970-01-01
    • 2017-09-12
    • 2021-03-31
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多