【问题标题】:Selenium c# Wait for javascript to executeSelenium c#等待javascript执行
【发布时间】:2019-10-08 06:39:12
【问题描述】:

我正在 c# 中使用 Selenium 和 Nunit 进行一些单元测试。

理论上这很简单,我想点击一个元素转到另一个页面。 我遇到的问题是使其可点击的部分加载时间晚于实际元素。这意味着如果我只是等到元素加载完毕,单击它仍然什么都不做。 我也试过等待它可以点击,但它似乎仍然不起作用。

除了静态延迟,有什么办法解决这个问题吗?

谢谢

【问题讨论】:

  • 页面的某些部分是否需要在元素可点击之前完成加载?您可以等待该部分可见,然后尝试单击。您是否尝试过像 jQuery 等那样等待后台进程完成?如果您拥有该网站,则必须调查正在运行的内容或与开发人员交谈。

标签: c# selenium unit-testing selenium-webdriver nunit


【解决方案1】:

我建议你创建一个等待ajax/jquery的方法:

public void WaitForJqueryAjax() {
    int delay = MaxdelaySeconds;
    while(delay > 0) {
        Thread.Sleep(1000);
        var jquery = (bool)(this.driver as IJavaScriptExecutor)
            .ExecuteScript("return window.jQuery == undefined");
        if(jquery) {
            break;
        }
        var ajaxIsComplete = (bool)(this.driver as IJavaScriptExecutor)
            .ExecuteScript("return window.jQuery.active == 0");
        if(ajaxIsComplete) {
            break;
        }
        delay--;
    }
}

在我的实现中,int delay = MaxdelaySeconds; 与我的驱动程序隐式等待时间具有相同的值。

(如果需要,修改上述方法以将您的驱动程序作为参数)

【讨论】:

  • 试过了,但似乎什么也没改变。我仍然收到失败的点击和类似的错误
  • @Jaco9307 你得到什么类型的异常?
  • 抱歉回复晚了。主要问题是我什至没有任何例外。代码只是在元素实际可点击之前点击,没有任何反应。代码只是继续,甚至不知道点击没有做任何事情,直到它无法找到一个元素,该元素应该在更改页面后显示。
  • @Jaco9307 是什么让它可以点击?您遇到的行为是 Selenium 设计的。正如您所说,即使您等待元素出现,它也是不可点击的,因此您应该等待使其可点击的事件......您可以尝试等待元素可点击,如@987654321 中所述@
  • +1,在我的例子中,表格是通过点击一个按钮来填充的,所以我在点击后做了WaitForJqueryAjax,表格在5秒内被正确填充。
【解决方案2】:

也许你需要执行一段 JavaScript 或 Jquery 代码

例如:

            driver.ExecuteJavaScript("$(\"#CategorylId\").CascadingDropDown(\"#WareId\", \'/store/log/AsyncWare\');");
            WaitUntilLoad(driver, "WareId", 5000);
            page = driver.PageSource;

有关更多信息,此link 可能有用

【讨论】:

  • 这个答案似乎是另一个问题的答案???我不确定这如何回答这里的问题。
  • 这是一个例子,不是我的答案也许你需要执行 JavaScript 或 Jquery 代码
  • 您的示例 JS 与问题有何关联?问题是询问如何等到元素可点击并且您的 JS 执行与此无关的操作。然后你引用这里没有定义的WaitUntilLoad()。然后最后你拉页面源......这又与问题无关。
猜你喜欢
  • 2019-07-25
  • 2012-03-06
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
相关资源
最近更新 更多