【问题标题】:How to initiate click before page is fully loaded如何在页面完全加载之前启动点击
【发布时间】:2015-02-04 01:36:10
【问题描述】:

我在使用 Selenium webdriver 时遇到问题,即使可见页面已加载,并且我想在该页面上单击的按钮现在可用,页面仍会继续加载。

我已经使用了隐式和显式等待页面加载但没有成功。

如何强制驱动程序单击尚未完成加载的页面上的按钮?

我的显式等待代码的 sn-p:

    myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.xpath("(//button[@type='submit'])[2]")));
    myDynamicElement.click();

谢谢

添加了 HTML:

    </div>

    <div class="first-message-form">

        <form role="form" action="/signup/first-message" method="POST">
            <div class="form-group">

                <textarea id="message_message" name="message[message]"    class="form-control"></textarea>

            </div>
            <div class="form-group">
                <button type="submit" class="btn btn-primary btn-lg">Post to others</button>
                <button type="submit" class="btn btn-default btn-lg">Skip</button>
            </div>
        </form>

    </div>

</div>

“跳过”按钮是我想点击的那个。

【问题讨论】:

  • 错误是什么?而且,你能提供更多的代码来导航到网站吗?
  • 没有错误。我的脚本在页面仍在加载时停止运行。我不想等待页面完成加载。我想继续并单击即使页面尚未完成加载也可用的按钮。
  • 您能否提供您要单击的按钮的html 并澄清问题所在?我也很想看看您的测试代码。
  • 我已经添加了 HTML。我也更新了代码。你还追求什么其他代码?
  • 我想调查一下您的页面一直加载的原因以及您如何实例化驱动程序并导航到该页面的代码。

标签: selenium selenium-webdriver


【解决方案1】:

我会在那个按钮上执行javascript。我假设您使用的是 selenium java 绑定,因为您从未提到过。

JavascriptExecutor js =(JavascriptExecutor) driver;
    js.executeScript("document.querySelector(\"[type='submit'][class='btn btn-default btn-lg']\").click();");

这个脚本应该点击Skip按钮

我实际上从未遇到过页面无法完成加载的问题。这就是为什么我很想知道你在导航到url 时是否正在做一些你不应该做的事情。

【讨论】:

  • 感谢赛夫的帮助。我会试试看它是否有效。
  • 您使用的是什么语言?
  • 我不认为 selenium 可以提供任何其他解决方案。因为如果Dom 未正确加载,selenium 将找不到该元素。您需要调查为什么页面永远不会停止加载。真的无法提供更多帮助,因为我不知道可能出错的代码是如何编写的。
  • 我明白了。感谢您的帮助。
  • 另外,当您认为可以停止网页加载((JavascriptExecutor) driver).executeScript("return window.stop"); 然后执行我提供的代码时,请尝试此操作
【解决方案2】:

在 WebDriver documentation 中,您可以找到以下内容:

取决于几个因素,包括操作系统/浏览器组合, WebDriver 可能会也可能不会等待页面加载。在一些 在这种情况下,WebDriver 可能会在页面有控制权之前返回 完成,甚至开始加载。为确保稳健性,您需要 使用 Explicit 等待页面中存在的元素和 隐式等待。

这意味着在这种情况下您无法确保驱动程序的行为。因此,稳定的测试可能会在页面加载时起作用。

【讨论】:

  • 感谢您的 cmets。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 2016-01-06
相关资源
最近更新 更多