2012-01-03 66 views
7

(我已经看了许多其他类似的帖子在SO和不幸没能解决这个问题,所以这里去...)硒的webdriver点击()失败,IE9

我使用硒WebDriver(C#实现,版本2.15)驱动一个相当简单的网页。该页面包含一个表单,其中包含两个用于输入用户名和密码的<输入>和一个用于提交表单的<输入>。我可以成功输入用户名和密码的值,但提交按钮上的Click()调用似乎不起作用。

每其他建议,我曾尝试以下技巧,没有一个已经工作:

  • 更改窗口焦点currentWindowHandle
  • 点击元素的父,那么元素
  • 添加长时间隐含等待
  • 添加一个长时间的显式等待(睡眠20秒)
  • 点击一大堆时间元素
  • 使用提交(),而不是点击()
  • 发送键“\ n”来元素(硒报告为错误)

请注意,我已经验证了<输入>按钮确实成功找到了,所以这似乎不成问题。

此外,请注意,我已验证该按钮的确在Selenium-land之外工作。也就是说,我可以浏览到该网站,输入登录凭据,然后单击提交按钮(并且它工作正常!)。

此外,请注意,这个问题是在IE浏览器。 Chrome和FF7不会出现这种情况。

这样说,有没有人有任何其他的想法?

回答

5

您的网站是否公开可供测试?你的IE zoom level是100%吗?这是一个需要对本地的点击事件从文档here

浏览器缩放级别必须设置为100%,使本机鼠标 事件可以设置为正确的坐标工作。

如果这不起作用,那么它似乎是一个webdriver中的错误。你应该打开一个问题here

说了这些之后,您可能可以同时将Java脚本路由作为临时解决方案。类似的,

driver.navigate().to("javascript:document.getElementById('yoursubmitbutton').click()"); 
+0

如何设置IE缩放级别? – 2012-01-04 18:15:38

+0

是的,这确实是缩放级别。谢谢!虽然我确实需要一种以编程方式检测和/或设置缩放级别的方法。我不能让我的测试一直失败...... – 2012-01-05 14:42:55

2

它看起来像它可能是一个问题其中发生鼠标点击。我尝试使用Selenium中的Actions机制来强制点击鼠标点击一个偏移量。它成功点击元素:

new Actions(GuiOps.driver).MoveToElement(e).MoveByOffset(5,5).ClickAndHold().Release().Perform(); 
1

我有这个问题。我不记得在那里我找到了解决的职位,但我发现,以下为我工作:

上的按钮:

var navButton = driver.FindElement(By.Id("NavButton")); 
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].fireEvent('onclick');", navButton); 

屡试不爽。

我在将点击事件发送到表格行时也遇到问题。有时.Click()实际上会将事件发送到上面的行(我们有一个非常复杂的表结构,其中有一个隐藏的单选按钮,它也不能用Selenium单击)。上述hack不适用于可通过FindElement访问的单元格。

最后,唯一有效的工作是选择该行内的图像并发送点击。

var img = driver.FindElement(By.Id("fim{4C3DE9FA-45B0-40E0-BD95-9EE0374EA38A}")); 
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].fireEvent('onclick');", img); 

希望有所帮助。

-1

还有一个可能的解决方法可以像重复一下,如:

Btn.click(); 
Btn.click(); 

由于第1点击刚刚设定对焦和:第二个执行真正的点击。它为我工作。

+2

这个问题在于,如果您使用多个浏览器进行测试,第一次点击将执行一个操作,然后第二次点击将引发异常因为它找不到元素。 – boolean 2012-05-01 19:02:34

1

我在这里看到了多种解决方案,但我想我会分享什么对我有用,以防其他人在那里需要不同的方法。我使用不同的方法

例如

btn.Sendkeys(Keys.Enter); 
0

使用FindElement(By.CSSSelector("'CSSPath'"))也有类似的问题,我的解决方案是为点击一样简单;如果你有任何CSS应用到按钮,其更多的一致性,或者写其他多条语句,以找到具有WebDriverWait方法的替代方法(如ID,标签等)的方法

0

您可能需要将启用本地事件当你在IE上运行它,并且如果你想在FF和Chrome中运行相同的代码,那么你需要在这些浏览器中启用本地事件以“真实”。

当你设置你想要运行的浏览器时,你可以这样做。

0

try代码 -

driver.FindElement(By.Id("btn")).sendkeys("\n"); 
0

尝试这个..
WebElement hiddenWebElement = d.findElement(By.xpath(xpath的));
((JavascriptExecutor)d).executeScript(“arguments [0] .click()”,hiddenWebElement);

0

以下为我工作:

@FindBy(id = "submit_action") 
WebElement submitButton_; 
... 
public void clickSubmit() { 

    if (driver_ instanceof InternetExplorerDriver) { 
     ((JavascriptExecutor) driver_).executeScript("arguments[0].fireEvent('onclick');", submitButton_); 
    } 
    else { 
     submitButton_.click(); 
    } 
} 

由于fireEvent只支持IE因此替代。