selenium:在获得dom元素列表后查找子标记

fcwjkofz  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(452)

首先,我是一个javascript开发人员,负责处理selenium,我觉得qe现在经历的痛苦,lol,所以我对java的知识是基本的。我有下面的dom结构,我需要能够找到“linkname1”并单击它。我也将不得不做同样的其他链接在不同的测试。

<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...
}

获得标签列表的最佳方法是什么,以便能够基于文本值单击它们?

kiz8lqtg

kiz8lqtg1#

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

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']")
0qx6xfy6

0qx6xfy62#

click() 在链接名为1的第一个链接上 <div class="some-container"> 你需要诱导webdriverwait elementToBeClickable() 您可以使用以下定位器策略: xpath :

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='some-container']//a[text()='Link Name 1']"))).click();

要创建文本为link name 1的链接列表,需要为 visibilityOfAllElementsLocatedBy() 您可以使用以下定位器策略: xpath :

List<WebElement> list = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[starts-with(@class, 'some') and contains(@class, 'container')]//a[text()='Link Name 1']"))).click();

相关问题