当我尝试单击超链接时获取Webdriver ElementNotVisibleException

时间:2011-05-25 11:45:52

标签: hyperlink selenium click webdriver

我正在尝试使用webdriver点击链接,但它会抛出一个ElementNotVisibleException,说“元素当前不可见,因此可能无法与之交互”

我的WebDriver代码:

addProgram.click();

addProgram指的是一个锚元素。这是通过注释@FindBy(how = How.LINK_TEXT,使用=“添加程序”)来填充的。换句话说,它类似于driver.findElement(By.linkText(“Add Program”))。

我的HTML是:

<div class="form_btn">
<a href="/program/addProgram">   
<span>Addrogram</span
</a>
</div>

当我从上面的div中删除css声明时它开始工作。潜水有悬停风格,可能是导致问题的那种。

CSS:

.form_btn { 
    float:left; 
background:url(/bg_button_right.gif) no-repeat scroll top     
    right; 
color: #fff; 
display: block; 
height:22px; 
font: bold 10px arial; 
margin-right: 0px; 
margin-top:2px; 
padding-right: 4px; /* sliding doors padding */ 
text-decoration: none; 
}

.form_btn span { 
background:url(/assets/images/provider/bg_button_left.gif) no-repeat; 
display: block; 
float:left; 
line-height:18px; 
padding: 2px 5px 5px 10px; 
font-size:11px; 
}

.form_btn a{ 
color:#fff;
}

.form_btn a:hover{ 
color:#fff; 
text-decoration:none; 
cursor:hand;
}

我已经在网上试图找到一个解决方案,但没有一个有效。非常感谢任何建议/帮助。

谢谢, 克里斯。

4 个答案:

答案 0 :(得分:2)

(更新)此问题已得到解决,自Selenium 2.4.0以来应该可以使用

听起来你遇到了和我一样的错误:

http://code.google.com/p/selenium/issues/detail?id=1445

解决方法是在链接中获取元素并单击。

重写代码:

driver.findElement(By.linkText("Add Program")).findElementBy(By.tagName("span"))

答案 1 :(得分:1)

我在ror项目中使用capybara时通过将“Capybara.ignore_elements = true”添加到features / support / env.rb来解决此错误

答案 2 :(得分:0)

使用@ Zernel的解决方案,以下解决了使用capybara的ror项目。

Capybara.ignore_hidden_elements = true添加到文件config/environments/test.rb

答案 3 :(得分:0)

使用文本并不总是很好的方法。

试试这个:

driver.findElement(By.cssSelector("div.form_btn > a[href*='addProgram'] > span")).click();

始终使用CSS,它的性能优于XPath。