selenium 如果共享相同的类名,如何使用xpath或cssSelector获取多个ID

ss2ws0br  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(135)

尝试获取ID,但引发了以下代码的"找不到元素"异常:

System.out.println(driver.findElement(By.xpath("//a[@class='activity'][contains(.,'First Testing')]")).getAttribute("id");)

System.out.println(driver.findElement(By.xpath("//a[@class='activity'][contains(text(), 'Second Testing')]")).getAttribute("id"));

以上两行代码不起作用,抛出 * 未找到元素异常 *
请查找HTML:

<a id="id_106" class="activity"> 
<strong>teena</strong>: <label id="check_label">
<em class="Highlight" style="padding: 1px; box-shadow: rgb(229, 229, 229) 1px 1px; border-radius: 3px; background-color: rgb(0, 191, 255); color: rgb(0, 0, 0); font-style: inherit;" match="Test" loopnumber="79991">Test</em> First Testing
</label>
</a>

<a id="id_109" class="activity"> 
<strong>maria</strong>: <label id="check_label">
<em class="Highlight" style="padding: 1px; box-shadow: rgb(229, 229, 229) 1px 1px; border-radius: 3px; background-color: rgb(0, 191, 255); color: rgb(0, 0, 0); font-style: inherit;" match="amazon" loopnumber="791951">Test</em> Second Testing 
</label>
</a>

此处,由于strong标签内的内容不是常量,只有元素常量是label标签(第一次测试/第二次测试)中的文本值,类名相同
预期产出:

id_106
id_109
yacmzcpb

yacmzcpb1#

要打印文本 id_106id_109,可以使用以下locator strategies

  • 要打印***id_106***:
System.out.println(driver.findElement(By.xpath("//label[@id='check_label' and contains(.,'First Testing')]//parent::a")).getAttribute("id"));
  • 要打印***id_109***:
System.out.println(driver.findElement(By.xpath("//label[@id='check_label' and contains(.,'Second Testing')]//parent::a")).getAttribute("id"));

相关问题