Selenium Java |在类中嵌套xpath时无法找到/单击按钮

时间:2015-12-29 07:37:55

标签: java selenium xpath

问题: 我无法弄清楚如何点击我需要的特定按钮以及如何确保按钮没有突出显示。

1)在主页面上,每个页面都有一个按钮。他们都有自己的关闭/报告按钮。

2)我需要选择仅非突出显示的页面,然后单击“关闭”按钮。

我可以用它来点击按钮,但我不知道它是否突出显示。

By.xpath("//button[@type='button'])[8].click();

我尝试过这样的事情,但是没有用:

By.xpath("//li[@class='media'] and //button[@type='button']").click();

以下是每个页面的样子。有些是突出显示的,有些是在班级名称中。

<li class="media highlighted">
<div class="media-options">
  <button type="button" class="close" title="Close page">Delete this page</button>
  <button type="button" class="report" title="Report page">Report this page</button>
</div>

<li class="media">
<div class="media-options">
  <button type="button" class="close" title="Close page">Delete this page</button>
  <button type="button" class="report" title="Report page">Report this page</button>
</div>

2 个答案:

答案 0 :(得分:1)

删除此按钮: -

driver.findElement(By.xpath("//li[@class='media highlighted']//button[@class='close']"));

报告此按钮: -

driver.findElement(By.xpath("//li[@class='media highlighted']//button[@class='report']"));

答案 1 :(得分:0)

您可以从css类属性中了解元素是否突出显示。

String liClassAttribute = driver.findElements("//li[@class='media'][1]").getAttribute("class");

这里我已经解释了如何获取第一个li项的class属性。

但是根据您的问题,您需要点击未突出显示的项目。因此,获取所有列表项的列表,获取li的每个项的class属性,如果未突出显示,则可以根据您的要求进行操作。

伪代码:

List<WebElement> liElementList = driver.findElement("//li[@class='media']);
for(WebElement elem : liElementList) {
    String liClassAttr = liElementList[0].getAttribute("class");
    if ( !liClass.contains("highlighted")){
         // you found the non-highlighted list item
         // act on it or ignore it based on your business logic.
    }
 }