(我在SO上看了很多其他类似的帖子,遗憾的是无法解决这个问题,所以这里......)
我正在使用Selenium WebDriver(C#实现,版本2.15)来驱动一个相当简单的网页。该页面包含一个带有两个<输入>用于用户名和密码,一个<输入>提交表格。我可以成功输入用户名和密码的值,但是提交按钮上的Click()调用似乎没有效果。
根据其他建议,我尝试了以下技巧,其中没有一项有效:
请注意,我已经验证了<输入>确实成功找到了按钮,所以这似乎不是问题。
另外,请注意我已经确认按钮确实在Selenium-land之外工作。也就是说,我可以浏览到该站点,输入登录凭据,然后单击“提交”按钮(它可以工作!)。
另外,请注意此问题出在IE上。使用Chrome和FF7时,我不会这样做。
所以说,有没有人有任何其他想法?
答案 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
方法
答案 5 :(得分:0)
当您在IE上运行时,可能需要将启用本机事件设置为“true”,如果要在FF和Chrome中运行相同的代码,则需要在这些中启用“原始事件”为“true”浏览器也是。
您可以在设置要运行的浏览器时执行此操作。
答案 6 :(得分:0)
尝试代码 -
driver.FindElement(By.Id("btn")).sendkeys("\n");
答案 7 :(得分:0)
答案 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();
因为第一次点击只是设置了焦点而第二次点击就是真正的点击。它对我有用。