我在询问之前尝试搜索,但我没有找到(或理解)我的问题的正确答案。
我正在测试一些图表(由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我想点击哪个按钮?
答案 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]")
现在看看返回的元素是否是页面上的第五个。