Selenium WebDriver Click()因IE9而失败

时间:2012-01-03 21:33:00

标签: selenium

(我在SO上看了很多其他类似的帖子,遗憾的是无法解决这个问题,所以这里......)

我正在使用Selenium WebDriver(C#实现,版本2.15)来驱动一个相当简单的网页。该页面包含一个带有两个<输入>用于用户名和密码,一个<输入>提交表格。我可以成功输入用户名和密码的值,但是提交按钮上的Click()调用似乎没有效果。

根据其他建议,我尝试了以下技巧,其中没有一项有效:

  • 将窗口焦点更改为currentWindowHandle
  • 单击元素的父元素,然后单击元素
  • 添加长隐式等待
  • 添加长时间显式等待(睡20秒)
  • 点击元素上的很多次
  • 使用Submit()代替Click()
  • 将密钥“\ n”发送给元素(Selenium将此报告为错误)

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

另外,请注意我已经确认按钮确实在Selenium-land之外工作。也就是说,我可以浏览到该站点,输入登录凭据,然后单击“提交”按钮(它可以工作!)。

另外,请注意此问题出在IE上。使用Chrome和FF7时,我不会这样做。

所以说,有没有人有任何其他想法?

10 个答案:

答案 0 :(得分:5)

您的网站是否可以公开测试?你的IE zoom level是100%吗?本机点击事件要求使用文档here

  

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

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

话虽如此,你可能会同时将Java脚本路由作为临时解决方案。像,

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

答案 1 :(得分:2)

看起来鼠标点击 可能会出现问题。我尝试使用Selenium中的Actions机制强制鼠标单击一点偏移量。它成功点击了元素:

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

答案 2 :(得分:1)

我有这个问题。我不记得我找到解决方案的帖子,但我发现以下内容对我有用:

按一下按钮:

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

每次都有效。

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

最后唯一有用的是选择该行中的图像并将点击发送到该行。

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

希望有所帮助。

答案 3 :(得分:1)

我在这里看到了多个解决方案,但我想我会分享对我有用的东西,以防其他人需要不同的方法。我遇到了类似的问题,对我而言,解决方案就像使用其他方法点击一样简单

例如

btn.Sendkeys(Keys.Enter); 

答案 4 :(得分:0)

使用FindElement(By.CSSSelector("'CSSPath'"));如果您有任何CSS应用于该按钮,它更一致或者写其他多个语句以使用WebDriverWait方法

等ID,标签等替代方法查找元素

答案 5 :(得分:0)

当您在IE上运行时,可能需要将启用本机事件设置为“true”,如果要在FF和Chrome中运行相同的代码,则需要在这些中启用“原始事件”为“true”浏览器也是。

您可以在设置要运行的浏览器时执行此操作。

答案 6 :(得分:0)

尝试代码 -

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

答案 7 :(得分:0)

试试这个..
WebElement hiddenWebElement = d.findElement(By.xpath(xpath));
((JavascriptExecutor)d).executeScript("参数[0]。点击()",hiddenWebElement);

答案 8 :(得分: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();
    }
}

因为只有IE支持fireEvent,所以替代。

答案 9 :(得分:-1)

另一种可能的解决方法可能是重复点击:

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

因为第一次点击只是设置了焦点而第二次点击就是真正的点击。它对我有用。