【问题标题】:Clicking an element having same class name as others单击与其他元素具有相同类名的元素
【发布时间】:2018-10-20 00:21:21
【问题描述】:

我正在尝试定位并单击与其他元素具有相同类名的元素。我无法将该元素与其他元素区分开来单击该元素。这是该元素的 HTML 代码:

<a href="/category/men/N-fh7rea" class="accord-header">
  Men
</a>

在此代码中,类名与其他元素相同,文本“Men”也相同。所以做了一个Xpath:

//a[@class='accord-header' AND contains(text(),'Men') ]

【问题讨论】:

    标签: java selenium selenium-webdriver xpath css-selectors


    【解决方案1】:

    如果您找不到任何差异,您总是可以从您感兴趣的相同对象中数一数。例如,如果是第三个元素,则使用 findElements 将它们全部保存为一个列表,然后从中获取第三个元素。

    List<WebElement> elems = driver.findElements(By.xpath("//a[@class='accord-header' and @href='/category/men/N-fh7rea' and contains(.,'Men')]"));
    WebElement elementThatYouLookedFor = elems.get(2);
    

    如果您需要单击所有此类元素,只需使用 foreach 循环:

    List<WebElement> elems = driver.findElements(By.xpath("//a[@class='accord-header' and @href='/category/men/N-fh7rea' and contains(.,'Men')]"));
    for(WebElement we : elems){
    we.click(); //or any other operation
    }
    

    【讨论】:

      【解决方案2】:

      稍微调整一下 xpath 并使用:

      //a[@class='accord-header' and @href='/category/men/N-fh7rea']
      

      您可以更细化并使用:

      //a[@class='accord-header' and @href='/category/men/N-fh7rea' and contains(.,'Men')]
      

      你也可以使用:

      //a[@class='accord-header' and @href='/category/men/N-fh7rea'][normalize-space()='Men']
      

      【讨论】:

      • “[normalize-space()='Men']”是做什么的?
      猜你喜欢
      • 2012-02-04
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多