1

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

我正在测试一些图表(由 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>

这是chart2的相同按钮:

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

4

1 回答 1

3

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

假设您有 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();

等等

可以肯定的是,在您要测试的页面上按 F12 键。然后进入控制台,输入:

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

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

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

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

于 2018-04-17T13:31:44.680 回答