WebDriver 找到一个特定的 child 元素

WebDriver find a particular child element

我有一个 HTML 这样的:

<div class="classDiv">
  <header>
    <button class="btn btn-icon-only btn-icon-only pull-right ng-scope" type="button">
   <span class="btn-box">
     <span class="sr-only">Edit</span>
  <span class="icon-btn icon-edit2" aria-hidden="true"></span>
   </span>
    </button>
    <h3 class="classH3">Text1</h3>
  </header>
</div>
<div class="classDiv">
  <header>
    <button class="btn btn-icon-only btn-icon-only pull-right ng-scope" type="button">
   <span class="btn-box">
     <span class="sr-only">Edit</span>
  <span class="icon-btn icon-edit2" aria-hidden="true"></span>
   </span>
    </button>
    <h3 class="classH3">Text2</h3>
  </header>
</div>

问题是每个标签都是一样的,只是每个标签的H3文本不同div。我只想单击一个特定的编辑按钮,例如第二个编辑按钮。

所以我试图找到第二个 H3,然后我试图从那里找到第二个编辑按钮,如下所示:

WebElement hText = webDriver.findElement(By.xpath("//h3[contains(., 'Text2')]"));
WebElement editBtn = hText.findElement(By.xpath("//button[contains(., 'Edit')]"));
editBtn.click();

但它总是点击第一个编辑按钮。我想找到 parent 元素,并从 parent 找到它的 child。但在这种情况下,每个标签都是相同的,所以我不知道如何查找特定的 child。非常感谢任何帮助

如果我记错了 (//button)[1] 或 (//button)[2] 让你 select 根据他在返回的按钮列表中的位置

试试这个:

WebElement divWithH3 = webDriver.findElement(By.xpath("div[.//h3[contains(., 'Text2')]]"));
WebElement editBtn = divWithH3.findElement(By.xpath("//button[.//span[contains(text(), 'Edit')]]"));
editBtn.click();

这首先会找到包含您的 "Text2" 元素的 div 元素。从那里你正在搜索一个 button 元素,它有一个包含文本 "Edit"

span 元素