Selenium:如何将 id 或 class 与特定的 div 相关联?

Selenium: How to relate an id or a class to a specific div?

我在提问之前尝试进行搜索,但没有找到(或理解)我的问题的正确答案。

我正在测试一些图表(由 Highcharts 6 提供支持)。我在同一个 url 上有 6 个不同的图表。每个都在一个 div 容器中,容器中有不同的元素(按钮等)。

所有按钮的 class and/or ID 都相同。
例如,这是图表 1 的 Maximize/Minimize 按钮:

<a class="has-tooltip btn btn-default change" role="button" title="" id="table" data-original-title="TEXT">
<span class="fa fa-lg ik-wi-icon-th"></span></a>

这是图表 2 的相同按钮:

<a class="has-tooltip btn btn-default change" role="button" title="" id="table" data-original-title="TEXT">
<span class="fa fa-lg ik-wi-icon-th"></span></a>

它们完全一样。所以我尝试使用 Katalon Recorder 弄清楚它是如何注意到我点击了不同的按钮,这就是我得到的结果:

driver.findElement(By.xpath("//a[@id='table']/span")).click(); click1
driver.findElement(By.xpath("//a[@id='table']/span")).click(); click2

driver.findElement(By.xpath("(//a[@id='table']/span)[2]")).click(); click1
driver.findElement(By.xpath("(//a[@id='table']/span)[2]")).click(); click2

这个[2]从哪里来的?
如何告诉 Selenium 我想点击哪个按钮?

2 明智地来自 DOM HTML 中的第二个 //a[@id='table']/span

假设你有 6 个图表,它们都有一个 link 和 id='table',它们下面都有一个跨度,这意味着 //a[@id='table']/span 将 return6个元素。使用 xpath,只有当您确定您的图表顺序不会改变时,您才可以点击第一个图表:

driver.findElement(By.xpath("//a[@id='table']/span")).click();

第二个:

driver.findElement(By.xpath("(//a[@id='table']/span)[2]")).click();

第三名:

driver.findElement(By.xpath("(//a[@id='table']/span)[3]")).click();

等等

为了绝对确定,在您要测试的页面上按 chrome 中的 F12。然后转到控制台,然后输入:

$x("//a[@id='table']/span")

大概会return6个元素。当您打开这些元素中的每一个并将鼠标悬停在它们上面时,Chrome 将突出显示它找到的元素。现在,如果您想要找到第五个元素 Chrome,请在控制台中输入:

$x("(//a[@id='table']/span)[5]")

现在看看元素 returned 是否是页面上的第五个。