首页 > 解决方案 > Selenium:在获取 DOM 元素列表后查找子标签

问题描述

首先,我是一名负责处理 Selenium 的 Javascript 开发人员,我现在感受到 QE 所经历的痛苦,哈哈,所以我对 Java 的了解是基本的。我有以下 DOM 结构,我需要能够找到“链接名称 1”并单击它。我也必须对不同测试中的其他链接做同样的事情。

<div class="some-container">
  <div class="blah"></div>
  <div>
    <div>
      <div class="common-class-name">
        <a>Link Name 1</a>
      </div>
    </div>
    <div>
      <div class="common-class-name">
        <a>Link Name 2</a>
      </div>
    </div>
    <div>
      <div class="common-class-name">
        <a>Link Name 3</a>
      </div>
    </div>
  </div>
</div>
<div class="some-other-container">
  <div class="blah"></div>
  <div>
    <div>
      <div class="common-class-name">
        <a>Link Name 1</a>
      </div>
    </div>
    <div>
      <div class="common-class-name">
        <a>Link Name 2</a>
      </div>
    </div>
    <div>
      <div class="common-class-name">
        <a>Link Name 3</a>
      </div>
    </div>
  </div>
</div>

这是我尝试过的事情之一,findElementsWithWait 基本上是一个实用函数,它使用 findElements 和等待。这不起作用。

List<WebElement> list = findElementsWithWait(By.className("common-class-name"));

for (WebElement element: list) {
  WebElement el = element.findElement(By.tagName("a"));
  String text = el.getText();
  // other code would check for the proper text and click...
}

获取标签列表以便能够根据文本值单击它们的最佳方法是什么?

标签: javaseleniumselenium-webdriverxpathwebdriverwait

解决方案


尝试通过链接文本搜索每个锚节点:

By.linkText("Link Name 1")

如果有多个链接具有相同的文本和唯一的祖先,然后尝试通过 XPATH 搜索

By.xpath("//div[@class='some-container']//a[.='Link Name 1']")
By.xpath("//div[@class='some-other-container']//a[.='Link Name 1']")

推荐阅读