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

时间:2018-04-17 12:38:28

标签: java selenium testing highcharts katalon-recorder

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

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

所有按钮的类和/或ID都相同 例如,这是chart1的最大化/最小化按钮:

<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我想点击哪个按钮?

1 个答案:

答案 0 :(得分:3)

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

假设您有6个图表,并且它们都有id='table'的链接,并且它们都有一个范围,这意味着//a[@id='table']/span将返回6个元素。使用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")

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

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

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