使用selenium访问属性文本

时间:2017-03-05 17:58:09

标签: html selenium attributes href

我对硒真的很陌生,这可能很简单,但我想要做的就是存储2017年联赛排名:第25位"此属性中的文本为java中的字符串:

<a href="/league-tables/rankings">
 2017 League Table Ranking: 25th
</a>

public void findRanking() throws Exception {
  String ranking = driver.findElement(By.xpath("(//a[contains(@href, '/league-tables/rankings')])")).getAttribute(href) ;

}

这为我提供了该属性正在使用的href的链接,并且是我最接近输出类型的权利。我试过简单地使用.getText()方法获取上面元素的文本,但是什么都不返回,我哪里出错?

3 个答案:

答案 0 :(得分:0)

试试这个:

public String findRanking(){
   WebElement e = driver.findElement(By.xpath("//a[contains(@href, '/league-tables/rankings')]");
   return e.getText();
}

答案 1 :(得分:0)

由于我们现在有一个指向该页面的链接,因此我能够创建一个唯一的定位器。问题是有多个元素与定位器匹配,第一个匹配不是你想要的。由于我们在这里不需要XPath,所以我切换到CSS选择器。 CSS选择器有更好的浏览器支持,更快,我认为更容易创建。这应该现在有效。

public String findRanking() {
    return driver.findElement(By.cssSelector("p.league-table-latest-rank > a[href='/league-tables/rankings']")).getText();
}

以下是CSS选择器的一些参考。我建议你花点时间学习它们。它们非常强大,应该是By.id()之后的goto定位器。

W3C CSS Selector Reference

Sauce Labs CSS Selector Tips

XPath的原始答案

.getText()应该对该元素起作用。看起来你的XPath中有一组额外的()。此外,您应该能够使用equals而不是contains()。可能有其他链接包含可能导致问题的部分href。我会尝试以下。我添加了return并将返回类型更改为String

public String findRanking() {
    return driver.findElement(By.xpath("//a[@href='/league-tables/rankings']")).getText();
}

您可以在Chrome中测试XPath。打开页面并在开发控制台中尝试$x("//a[@href='/league-tables/rankings']").length,并确保它返回1。如果它是0那么定位器出了问题。如果它是> 1那么你将不得不进一步缩小定位器的焦点。找到具有ID或独特内容的唯一父级。

答案 2 :(得分:0)

试试这种方式。

如果您想获得text的{​​{1}},请使用以下代码。

2017 League Table Ranking: 25th

如果您想获得此文String test = driver.findElement(By.xpath("//a[contains(text(), '2017 League Table Ranking: 25th')]")).getText(); System.out.println(test); 的{​​{1}}属性,请使用以下代码。

href