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

Javascript Selenium WebDriver-等待角度请求(Java),javascript,java,angularjs,selenium,automated-tests,Javascript,Java,Angularjs,Selenium,Automated Tests,我正在为基于角度的应用程序创建测试,我需要帮助。 我必须创建一个等待,它将一直等待,直到所有待处理的请求得到处理。 基本上,在我的场景中,我想标记一个复选框,但它只有在GET请求完成时才可用,如果我使用simpleThread.sleep(2000)一切正常,但我知道这不是解决这个问题的可靠方法。 我尝试了两种方法: 第一: AdditionalConditions wait = new AdditionalConditions(); wait.untilAngularFi

我正在为基于角度的应用程序创建测试,我需要帮助。 我必须创建一个等待,它将一直等待,直到所有待处理的请求得到处理。 基本上,在我的场景中,我想标记一个复选框,但它只有在GET请求完成时才可用,如果我使用simple
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);
    }
AdditionalConditions wait=新的AdditionalConditions();
等待。untilanguarlFinishHttpCalls();
在LanguarFinishHttpCalls()之前的公共无效{
最终字符串javaScriptToLoadAngular=
“var injector=window.angular.element('app-root').injector();”+
“var$http=injector.get('$http');”+
“返回($http.pendingRequests.length==0)”;
ExpectedCondition PendingTTPCallsCondition=新的ExpectedCondition(){
公共布尔应用(WebDriver驱动程序){
return((JavascriptExecutor)driver.executeScript(javaScriptToLoadAngular).equals(true);
}
};
WebDriverWait wait=newwebdriverwait(SharedDriver.getDriver(),20);//超时=20秒
等待.直到(待决TTPCalls条件);
}
这里我得到了以下错误:

org.openqa.selenium.WebDriverException:未知错误:无法读取 未定义的属性“元素”(会话信息:chrome=59.0.3071.115)
(驾驶员信息:chromedriver=2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8),平台=Windows NT 10.0.15063 x86_64)(警告:服务器未提供任何stacktrace信息)命令持续时间或超时:5毫秒生成信息: 版本:“2.31.0”,修订版: “1BD29D185A80FA4206DFEAB80BA773C04AC33C0”,时间:“2013-02-27 13:51:26'系统信息:os.name:'Windows 10',os.arch:'amd64', os.version:'10.0',java.version:'1.8.0_121'驱动程序信息: org.openqa.selenium.chrome.ChromeDriver功能 [{applicationCacheEnabled=false,rotatable=false, mobileEmulationEnabled=false,networkConnectionEnabled=false, chrome={chromedriverVersion=2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8), userDataDir=C:\Users\lpaczek\AppData\Local\Temp\scoped\u dir13872\u 15975}, takesHeapSnapshot=true,pageLoadStrategy=normal, databaseEnabled=false,handlesAlerts=true,hasTouchScreen=false, 版本=59.0.3071.115,平台=XP,浏览器连接启用=false, nativeEvents=true,acceptSslCerts=true,locationContextEnabled=true, WebStorage Enabled=true,browserName=chrome,takesScreenshot=true, javascriptEnabled=true,CSSSelectorEnabled=true,setWindowRect=true, 意外的行为=}]

我也试过:

   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());
            }
        };
    }
WebDriverWait wait=newwebdriverwait(SharedDriver.getDriver(),15500);
等待.直到(AdditionalConditions.angularHasFinishedProcessing());
公共类附加条件{
公共静态预期条件Angular已完成数据处理(){
返回新的ExpectedCondition(){
@凌驾
公共布尔应用(WebDriver驱动程序){
返回Boolean.valueOf(((JavascriptExecutor)
executeScript(“return(window.angular!==未定义)&&(angular.element(document.injector()!==未定义)&&(angular.element(document.injector().get('$http').pendingRequests.length==0)”).toString();
}
};
}
在这里,我得到了15秒后的超时。它似乎不起作用。
如果可以,请提供帮助,据我所知,我需要执行JavaScript代码,我是其中的新手。

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

这个软件包会给你这种能力

var driver = new NgWebDriver(driver);

driver.waitForAngularRequestsToFinish();

不是为每个角度调用添加显式等待,我们可以单独处理隐式等待吗?我已经将其添加到代码中,得到“org.openqa.selenium.ScriptTimeoutException:异步脚本超时:结果在15秒内未收到”为什么?当我手动测试时,请求会在大约6秒钟后处理。这是特定于应用程序的…无法从问题中看出