51

我最近刚刚将我的 selenium IDE 代码导出到 selenium web 驱动程序。我发现很多在 IDE 中运行的命令要么无法运行,要么 selenium web 驱动程序声称根本不支持。到目前为止,我一直在一次解决这些问题,这并不理想......

目前我正在努力找出为什么单击按钮不适用于 Web 驱动程序,而它以前在 selenium IDE 中工作。我的浏览器是 FF 13,我的操作系统是 Ubuntu。

代码片段

WebElement loginButton = driver.findElement(By.name("submit"));
loginButton.click();

我以前试过

driver.findElement(By.name("submit")).click();

但是上面的行也失败了。该元素正在被选中,但是它并没有像我想要的那样让我们登录。我发现其他页面也有类似问题,但他们的问题似乎是 Internet Explorer 而不是 Firefox。我什至不想考虑 IE 会给我带来的问题。

谢谢,

PS 关于从 selenium IDE 迁移到 Selenium Webdriver 而不会丢失我编写的所有测试的更好方法的提示也可以解决这个问题。

4

9 回答 9

101

如果您确定该元素存在,您可以尝试这个来模拟点击 - 如果.Click()不工作

driver.findElement(By.name("submit")).sendKeys(Keys.RETURN);

或者

driver.findElement(By.name("submit")).sendKeys(Keys.ENTER);
于 2012-07-27T13:14:21.257 回答
10

需要注意的主要事情是按钮是否已启用。您仍然可以单击它们,并且没有任何东西会掉下来,并且元素在那里,但它还没有准备好被单击,所以什么都不做。

我一直在使用 webdriver,它花了我大部分时间来解决这个问题!

以下方法似乎可靠地工作(在我的环境中一键!)

    private void TryClick(By selector)
    {
        var wait = WaitUpTo(TimeSpan.FromSeconds(10));
        var element = wait.Until(ExpectedConditions.ElementIsVisible((selector)));

        //really important bit!
        WaitUpTo(TimeSpan.FromSeconds(5))
            .Until(d => element.Enabled);

        element.Click();
    }

你用它像

TryClick(By.XPath("//button[contains(.//*,'Some Text')]"));
于 2014-01-27T17:29:56.737 回答
5

WebElement.click()如果页面被放大或缩小,则发现单击不起作用

我的页面缩小到 85%。

如果您使用 ( ctrl++ctrl+ -) 将浏览器中的页面缩放重置为 100%,点击将开始工作。

chrome 版本 86.0.4240.111 发现问题

于 2020-10-28T11:40:40.277 回答
3

请参考这里https://code.google.com/p/selenium/issues/detail?id=6756 在症结

请打开系统显示设置并确保字体大小设置为 100% 效果惊人

于 2013-12-24T09:10:18.107 回答
2

您的代码的任何一个版本都没有问题。不管是什么原因造成的,都不是。

你有三次检查你的定位器吗?您的元素肯定有 name=submit 而不是 id=submit?

于 2012-07-27T06:14:04.993 回答
2

感谢大家的所有答案!我找到了解决方案,结果发现我的问题中没有提供足够的代码。

毕竟问题在于 click() 函数,而是与我的项目使用的 cas 身份验证有关。在 Selenium IDE 中,我的登录测试对以下位置执行了“打开”命令,

/cas/login?service=https%1F%8FAPPNAME%2FMOREURL%2Fj_spring_cas_security

那行得通。我将测试导出到 Selenium webdriver,它自然地保留了该位置。Selenium Webdriver 中的命令是,

driver.get(baseUrl + "/cas/login?service=https%1A%2F%8FAPPNAME%2FMOREURL%2Fj_spring_cas_security");

由于我尚未理解上述失败的原因。当我把它改成

driver.get(baseUrl + "MOREURL/");

点击命令突然开始工作......如果我能弄清楚为什么会这样,我将编辑这个答案。

注意:我隐藏了上面使用的 URL 以保护我公司的产品。

于 2012-07-27T15:52:01.503 回答
2

我使用的是 firefox,出于某种原因,尽管从过去 2 个月开始它正在工作,但它并没有使用 click 命令。我的感觉是使用 sendKeys 并且这个页面解决了这个问题。现在我正在使用 sendKeys(Keys.Enter)

于 2013-09-03T14:01:44.600 回答
1

这是chromedriver长期存在的问题(2020 年仍然存在)。

在 Chrome 中,我将缩放比例从 90% 更改为 100%,从而解决了问题。参考

我发现 TheLifeOfSteve 的回答更可靠。

于 2020-04-29T14:40:54.553 回答
0

我正在使用 EasyRepro,当我调试我的代码时,它点击了可见和启用的元素,而不是按预期导航。但最后我明白了问题的根本原因。

我的 Chrome 缩小了 90%

一旦我重置缩放级别,它就会单击正确的元素并成功导航到下一页。

于 2020-05-21T19:47:03.410 回答