代码之家  ›  专栏  ›  技术社区  ›  SeekanDestroy

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

  •  1
  • SeekanDestroy  · 技术社区  · 6 年前

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

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

    所有按钮的类别和/或ID都相同。
    例如,这是图表1的最大化/最小化按钮:

    <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”></跨度(>)</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 回复  |  直到 5 年前
        1
  •  3
  •   Anand    6 年前

    这个 2 来自,DOM wise,第二个 //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();
    

    要绝对确定,在您要测试的页面上,在chrome中点击F12。然后转到控制台,并键入:

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

    它可能会返回6个元素。当您打开每个元素并将鼠标悬停在其上时,Chrome将高亮显示找到的元素。现在,如果您想找到第五个元素Chrome,请在控制台中键入:

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

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