如果缺少标记,如何单击元素

时间:2016-06-30 12:41:41

标签: java selenium xpath

<a href="" class="ng-binding ng-scope outside-month">1</a>
<a href="" class="ng-binding ng-scope">1</a>

我想点击缺少月外标记的第二个元素。我怎样才能做到这一点?

是否有特殊的selenium功能,还是我必须编写一个特殊的xpath表达式?

3 个答案:

答案 0 :(得分:2)

对于您的场景,我想您可以设计一个同时使用not()contains()运算符的XPath表达式。

有些事情:

//a[not(contains(@class, 'outside-month'))]

我没有测试这是否有效,但如果没有,请告诉我,我可以帮助改进它。

答案 1 :(得分:1)

如果目标element上缺少月外,则应使用= class namexpath以下{ - 1}}:

String xPath = "//a[@class = 'ng-binding ng-scope']";

如果您想使用contains并且目标元素是包含class name的最后一个元素,那么您应该通过last(),如下所示: -

String xPath = "(//a[contains(@class, 'ng-binding ng-scope')])[last()]";

如果您想使用contains且目标元素不是包含class name的最后一个元素,您应该传递适当的index,如下所示: -

String xPath = "(//a[contains(@class, 'ng-binding ng-scope')])[2]";

如果您希望境外月缺失但 ng-binding ng-scope ,则应尝试以下操作: -

String xPath = "//a[contains(@class, 'ng-binding ng-scope') and not(contains(@class, 'outside-month'))]";

使用上述xPath中的任何一个并执行click,如下所示: -

WebDriverWait wait = new WebDriverWait(driver, 10);
el = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xPath)));
el.click();

注意: - 在找到element之前确保它不在任何frame内。如果它位于任何frame内,您需要switch首先frame: - driver.switchTo().frame("frame name or id")

希望它会对你有所帮助.. :)

答案 2 :(得分:0)

在月外的那个元素中,它不是一个标签或属性,它只是一个更大的类名 所以你需要的是找到一个具有ng-binding ng-scope类名的标签:

driver.findElement(By.xpath("//a[@class='ng-binding ng-scope']")).click();