selenium webdriver中的click命令无效

selenium webdriver中的click命令无效,selenium,selenium-ide,selenium-webdriver,Selenium,Selenium Ide,Selenium Webdriver,我最近刚刚将我的selenium IDE代码导出到selenium web驱动程序。我发现在IDE中工作的许多命令要么无法工作,要么SeleniumWeb驱动程序声称根本不支持。到目前为止,我一直在一次一个地解决这些问题,这不太理想 目前,我正在研究为什么单击按钮不能使用web驱动程序,而它以前在selenium IDE中工作过。我的浏览器是FF 13,操作系统是Ubuntu 代码片段 WebElement loginButton = driver.findElement(By.name("su

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

目前,我正在研究为什么单击按钮不能使用web驱动程序,而它以前在selenium IDE中工作过。我的浏览器是FF 13,操作系统是Ubuntu

代码片段

WebElement loginButton = driver.findElement(By.name("submit"));
loginButton.click();
我以前试过

driver.findElement(By.name("submit")).click();
然而,上面这一行也失败了。元素正在被选中,但是它不会像我希望的那样让我们登录。我发现其他页面也有类似的问题,但他们的问题似乎是Internet Explorer而不是Firefox。我甚至不想去想将来会给我带来的问题

谢谢

附言。
关于在不丢失我编写的所有测试的情况下从selenium IDE迁移到selenium Webdriver的更好方法的提示也可以解决这个问题。

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


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

如果您确定元素存在,您可以尝试此操作来模拟click-If
。click()
不起作用

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


谢谢大家的回答!我找到了一个解决方案,结果是我没有在我的问题中提供足够的代码

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

/cas/login?service=https%1F%8FAPPNAME%2FMOREURL%2Fj_spring_cas_security
成功了。我将测试导出到SeleniumWebDriver,它自然地保留了那个位置。Selenium Webdriver中的命令为

driver.get(baseUrl + "/cas/login?service=https%1A%2F%8FAPPNAME%2FMOREURL%2Fj_spring_cas_security");
由于种种原因,我还没有理解上述失败的原因。当我把它改成

driver.get(baseUrl + "MOREURL/");
单击命令突然开始工作。。。如果我能弄清楚这到底是为什么,我会编辑这个答案


注意:为了保护我公司的产品,我模糊了上面使用的URL。

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

请参阅此处 关键

请打开系统显示设置并确保字体大小设置为100%
它的效果出人意料

需要注意的一个主要问题是按钮是否启用。你仍然可以点击它们,没有任何东西会掉下来,元素就在那里,但它还没有准备好被点击,所以什么都不做

我一直在使用webdriver,花了我一整天的时间才弄明白这一点

以下方法似乎工作可靠(在我的环境中,只需一个按钮!)

你用它来形容

TryClick(By.XPath("//button[contains(.//*,'Some Text')]"));
这是chromedriver(在2020年仍然存在)的产品

在Chrome中,我将缩放比例从90%改为100%,解决了这个问题


我发现lifeofsteve更可靠。

我正在使用EasyRepro,当我调试代码时,它只是单击了可见且已启用的元素,没有按预期导航。但我终于明白了问题的根本原因

我的Chrome浏览器缩小了90%

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

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

我把我的页面缩小到85%

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


chrome版本86.0.4240.111发现问题

您是否尝试
断言loginButton.isDisplayed()?当您说click()操作失败时?您是否收到任何错误或异常。请发布这些错误或异常,以了解单击()操作失败的原因。@PavelJanicek任何一个都可以执行此操作,但经过编辑以显示这两个操作;)哇!我不知道这件事。这些命令对我很管用。虽然后来证明我的问题与CAS身份验证有关。谢谢你的回答@我爱死它了!甚至对屏幕边界之外的元素也这样做@lifeofsteve-输入、返回、空格、JavaScript执行器、操作-这些对我来说都不起作用。如果我在单击之前稍等片刻,它就会起作用。该元素似乎没有被禁用。所以,我不知道为什么需要等待。你说它在IE上失败了,而不是在firefox上。是否确定此情况仅由位置引起?请编辑原始问题,而不是发布更新作为答案。这是评论,不是答案。为什么这是投票?
    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')]"));