当前位置: 首页 > 知识库问答 >
问题:

Selenium WebDriver-等待角度请求(Java)

华哲茂
2023-03-14

我正在为基于角度的应用程序创建测试,我需要帮助。我必须创建一个等待,这将等待,直到所有挂起的请求将被处理。基本上,在我的场景中,我希望标记一个复选框,但它只有在GET请求完成时才可用,如果我使用简单的thread.sleep(2000),一切都很好,但我知道这不是解决这个问题的可靠方法。我尝试了两种方法:

   AdditionalConditions wait = new AdditionalConditions();
        wait.untilAngularFinishHttpCalls();



 public void untilAngularFinishHttpCalls() {
        final String javaScriptToLoadAngular =
                "var injector = window.angular.element('app-root').injector();" +
                        "var $http = injector.get('$http');" +
                        "return ($http.pendingRequests.length === 0)";

        ExpectedCondition<Boolean> pendingHttpCallsCondition = new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver driver) {
                return ((JavascriptExecutor) driver).executeScript(javaScriptToLoadAngular).equals(true);
            }
        };
        WebDriverWait wait = new WebDriverWait(SharedDriver.getDriver(), 20); // timeout = 20 secs
        wait.until(pendingHttpCallsCondition);
    }

我也试过:

   WebDriverWait wait = new WebDriverWait(SharedDriver.getDriver(), 15, 500);
        wait.until(AdditionalConditions.angularHasFinishedProcessing());


public class AdditionalConditions {
    public static ExpectedCondition<Boolean> angularHasFinishedProcessing() {
        return new ExpectedCondition<Boolean>() {
            @Override
            public Boolean apply(WebDriver driver) {
                return Boolean.valueOf(((JavascriptExecutor)
                        driver).executeScript("return (window.angular !== undefined) && (angular.element(document).injector() !== undefined) && (angular.element(document).injector(). get('$http').pendingRequests.length === 0)").toString());
            }
        };
    }

15秒后超时,似乎不起作用。请帮助,如果你可以,据我所知,我需要执行JavaScript代码,我是新手在它。

共有1个答案

孙佑运
2023-03-14

您可以等待angular完成它的工作

ngwebDriver包将提供此功能

var driver = new NgWebDriver(driver);

driver.waitForAngularRequestsToFinish();
 类似资料:
  • 我实际上有三个问题: Selenium WebDriver如何实现此 因为我们不能给无限睡眠的线程一个负值。 有没有更好的方法来实现无限等待? 我们在SeleniumWebDriver文档中看到了这一点

  • 问题内容: 我正在尝试编写一个JS代码,如果给定的数字已经存在于数据库中,它将取消“ btn_submit”按钮.onclick事件。我使用AJAX向数据库查询给定的编号,并确定是否应将数据发送到将上传问题的.php站点。为了确定这一点,我需要numOfRows变量的值,但是因为我在AJAX中将其设置为0,所以validation()函数将在我的AJAX查询完成之前完成,这将导致始终表示给定数字不

  • 问题内容: 在Bash中,可以通过追加在后台执行命令。如何在Python中完成? 问题答案: 我用。我在模块级别创建一个单例线程池,然后用于启动任务。 该命令给了我一个未来,我可以将它无限期地与其他未来添加到列表中,直到我想收集全部或部分结果为止。 出于所有逻辑和理由,是一个THREAD池而不是一个进程池。 示例(只要安装了请求,就可以在Python 2和3中使用): 这些请求将同时执行,因此运行

  • 问题内容: 我的量角器conf.js 函数需要发出一个看起来像这样的http请求, 它会引发错误, 还有其他方法可以强制在测试开始执行之前调用内部回调吗? 问题答案: 可以选择返回量角器在开始执行测试之前将解决的承诺: 可以选择返回一个承诺,量角器将在继续执行之前等待。如果准备工作涉及任何异步调用,例如与浏览器进行交互,则可以使用此方法。否则,量角器不能保证执行顺序,并可能在准备工作完成之前开始测

  • 我在做一个爬行项目。当我对网站进行简单的连接时,如下所示: URLConnection conn=new URL(URL).openConnection();BufferedReader reader=新的BufferedReader(新的InputStreamReader(conn.getInputStream())); 方法正确返回HTML正文。但是,网站对某些字段进行了内部请求。例如,网站从

  • 问题内容: 目前,我正在编写使用ajax进行搜索的webdriver测试。如果在键入搜索内容之后并按Enter键之前添加显式等待,则测试效果很好。 但 失败。我正在使用1个虚拟CPU在ec2上运行测试。我怀疑,即使在发送与搜索相关的GET请求之前,我也按回车键;如果在建议之前按回车键,它将失败。 有没有更好的方法来添加显式等待? 问题答案: 您确实可以添加一个明确的等待,以等待诸如 请参阅:htt