Selenium Web驱动程序 - 无法定位元素

时间:2016-06-24 03:45:34

标签: java xpath selenium-webdriver

我是Selenium-WebDriver的新手。尝试找到一个元素并单击它。

但不断低于错误:

  

无法找到元素

Firepath提供了以下xpath:

"xpath = html/body/header/div/ul/li[2]/a/span[1]"

相关的HTML代码是:

<ul class="nav navbar-nav navbar-right top-nav ">
<li class="identity has-icon">
<a href=".......">
</li>
<li class="settings has-icon">
<a href=".......">
<span class="icon icon-cogs" aria-hidden="true" role="presentation"/>
**<span class="nav-title">Settings</span>**
</a>
</li>

我试图通过以下方式找到元素:

1. driver.findElement(By.xpath("//div[@id='right-nav']//a[contains(text(),'Settings')]")).click();

2.  driver.findElement(By.xpath("//div[@id='nav-title']//a[contains(text(),'Settings')]")).click();

3. driver.findElement(By.xpath("//div[contains(@class, 'nav-title')]")).click();

有人可以帮我找到解决方案吗?

6 个答案:

答案 0 :(得分:1)

你几乎就在那里,在最后一个xpath中你使用了div,而不是尝试使用span。

"//span[contains(@class, 'nav-title')]"

答案 1 :(得分:0)

它不需要var r = cnn.Query("select 'apple' fruit from dual").FirstOrDefault(); var f = r.Fruit; // f is set to null, but I want it to be "apple" var F = r.FRUIT; // F is set to "apple", but I don't want to reference using all caps. ,而且你的所有语句在xpath中都包含contains两次,这是不正确的。

请使用以下声明

//

答案 2 :(得分:0)

您需要点击&#34; a(链接)&#34;直接标记,因为内部标记仅作为css(页面看起来使用bootstrap)。尝试以下代码,它应该工作

driver.findElement(By.xpath("//a[contains(@href,'PUT href texts here')]")).click()

如果这不起作用,请在评论中提及浏览器和selenium版本。

答案 3 :(得分:0)

您需要点击带有文字&#34;设置&#34;的span元素。所以下面的xpath将搜索一个span元素,其中包含Settings作为任何锚标记内的文本。

.//a/descendant::*[contains(text(),'Settings')]

答案 4 :(得分:0)

尝试以下任何一项。你会得到元素

//span[@class='icon icon-cogs']
//span[@class='icon icon-cogs'][@role='presentation']
//span[@class='icon icon-cogs'][@role='presentation']/span

希望它能帮到你

答案 5 :(得分:0)

这个简单的CSS选择器可能有效。没有更多的页面HTML,很难说它是否足够独特。它正在寻找带有SPAN类的nav-title标记。

driver.findElement(By.cssSelector("span.nav-title")).click();