【问题标题】:click command in selenium webdriver does not workselenium webdriver中的单击命令不起作用
【发布时间】:2022-04-07 04:09:18
【问题描述】:

我最近刚刚将我的 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 会给我带来的问题。

谢谢,

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

【问题讨论】:

  • 你试过assert loginButton.isDisplayed();吗?
  • 当你说click()操作失败了?您是否收到任何错误或异常。请发布它们以了解 click() 操作失败的原因。

标签: selenium selenium-ide selenium-webdriver


【解决方案1】:

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

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

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

【讨论】:

  • @PavelJanicek 任何一个都可以解决问题,但经过编辑以显示两者;)
  • 哇。我不知道这个。赞成教我一些新东西:)
  • 这些命令对我有用。虽然事实证明我的问题与 CAS 身份验证有关。感谢您的回答!
  • @TheLifeOfSteve 喜欢它!甚至对屏幕边界之外的元素也这样做!
  • @TheLifeOfSteve - Enter、Return、Space、JavaScript Executor、Actions - 这些都不适合我。如果我在点击之前稍等片刻,它就会起作用。该元素似乎没有被禁用。所以,我不知道为什么需要等待。
【解决方案2】:

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

我一直在使用 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')]"));

【讨论】:

    【解决方案3】:

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

    我的页面缩小到 85%。

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

    在 chrome 版本 86.0.4240.111 中发现问题

    【讨论】:

      【解决方案4】:

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

      请打开系统显示设置,确保字体大小设置为100% 效果出乎意料

      【讨论】:

        【解决方案5】:

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

        您是否对定位器进行了三次检查?你的元素肯定有 name=submit 而不是 id=submit?

        【讨论】:

          【解决方案6】:

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

          问题毕竟不是与 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 以保护我公司的产品。

          【讨论】:

          • 您说它在 IE 上失败,而不是在 Firefox 上。您确定这种情况只是由位置引起的吗?
          • 请编辑原始问题,而不是发布更新作为答案。
          【解决方案7】:

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

          【讨论】:

          • 这是评论,不是答案。为什么要投票?
          【解决方案8】:

          这是a long standing issue,带有 chromedriver(2020 年仍然存在)。

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

          我发现 TheLifeOfSteve 的 answer 更可靠。

          【讨论】:

            【解决方案9】:

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

            我的 Chrome 已缩小 90%

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

            【讨论】:

              【解决方案10】:

              我使用下面的函数来使其工作,或者至少尝试几次。基本上检查 current_url 直到你得到一个新页面。

              def make_button_work(驱动程序,路径,max_try = 3):

              strUrl_1 = driver.current_url
              strUrl_2 = driver.current_url
              try_num = 0
              while strUrl_1 == strUrl_2:
                  try_num +=1
                  button = driver.find_element_by_xpath(path)
                  time.sleep(1)
                  button.click()
                  time.sleep(1)
                  strUrl_2 = driver.current_url
                  if max_try == try_num:
                      print('Reached max_try')
                      break
              

              【讨论】:

                猜你喜欢
                • 2014-01-12
                • 1970-01-01
                • 1970-01-01
                • 2017-05-23
                • 1970-01-01
                • 2019-05-16
                • 1970-01-01
                • 2018-03-27
                • 2017-08-18
                相关资源
                最近更新 更多