2017-09-16 260 views
0

我有问题编写的Java硒,对工作的等待条件既角4角和1。我现在有,对于角1有效的解决方案是如下:角4等待状态下使用Java硒

public static ExpectedCondition<Boolean> angularHasFinishedProcessing() { 
    return new ExpectedCondition<Boolean>() { 
     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()); 
     } 
    }; 
} 

public static void waitOnAngular(WebDriver driver){ 
    WebDriverWait wait = new WebDriverWait(driver, 15, 100); 
    wait.until(AdditionalConditions.angularHasFinishedProcessing()); 
} 

我正在寻找一些JavaScript来扩展这个apply()方法来处理angular 4或者其他一些解决方案,人们已经成功地让selenium等待角度$ http请求与所有视图一起加载。

请参阅下面的pom.xml文件,查看我是哪个版本的selenium-java版本。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>com.ridebooker</groupId> 
<artifactId>auto-tests</artifactId> 
<version>1.0.0-SNAPSHOT</version> 
<packaging>jar</packaging> 
<name>Ridebooker Auto Tests</name> 

<dependencies> 
    <dependency> 
     <groupId>com.codepine.api</groupId> 
     <artifactId>testrail-api-java-client</artifactId> 
     <version>RELEASE</version> 
     <exclusions> 
      <exclusion> 
       <artifactId>guava</artifactId> 
       <groupId>com.google.guava</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>info.cukes</groupId> 
     <artifactId>cucumber-java</artifactId> 
     <version>1.2.0</version> 

    </dependency> 
    <dependency> 
     <groupId>info.cukes</groupId> 
     <artifactId>cucumber-testng</artifactId> 
     <version>1.2.0</version> 

    </dependency> 
    <dependency> 
     <groupId>info.cukes</groupId> 
     <artifactId>cucumber-junit</artifactId> 
     <version>1.2.0</version> 

    </dependency> 
    <dependency> 
     <groupId>org.seleniumhq.selenium</groupId> 
     <artifactId>selenium-java</artifactId> 
     <version>3.5.2</version> 

    </dependency> 

    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.11</version> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.17</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.poi</groupId> 
     <artifactId>poi-ooxml</artifactId> 
     <version>3.9</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.poi</groupId> 
     <artifactId>poi</artifactId> 
     <version>3.11-beta3</version> 
    </dependency> 
    <dependency> 
     <groupId>xml-apis</groupId> 
     <artifactId>xml-apis</artifactId> 
     <version>2.0.2</version> 
    </dependency> 

    <dependency> 
     <groupId>xerces</groupId> 
     <artifactId>xercesImpl</artifactId> 
     <version>2.8.0</version> 
    </dependency> 

    <dependency> 
     <groupId>org.hamcrest</groupId> 
     <artifactId>hamcrest-all</artifactId> 
     <version>1.3</version> 
     <scope>test</scope> 
    </dependency> 

</dependencies> 

<build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.18</version> 
       <dependencies> 
        <dependency> 
         <groupId>org.apache.maven.surefire</groupId> 
         <artifactId>surefire-junit47</artifactId> 
         <version>2.18</version> 
        </dependency> 
       </dependencies> 
       <configuration> 
        <systemPropertyVariables> 

         <!--To use different properties when ran from inside your IDE change your run config to pass 
         the VM a parameter such as: 
         -Denv.HOME=local 
         -Denv.HOME=staging 
         -Denv.HOME=production 
         --> 

         <environment>${env.HOME}</environment> 
        </systemPropertyVariables> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

回答

0

这是我在此之前一段时间发现,并用它相当成功等待的角度。但我不知道它是否适用于两者。

final String script = "var callback = arguments[arguments.length - 1];\n" + 
     "var rootSelector = \'body\';\n" + 
     "var el = document.querySelector(rootSelector);\n" + 
     "\n" + 
     "try {\n" + 
     " if (angular) {\n" + 
     "  window.angular.getTestability(el).whenStable(callback);\n" + 
     " }\n" + 
     " else {\n" + 
     "  callback();\n" + 
     " }\n" + 
     "} catch (err) {\n" + 
     " callback(err.message);\n" + 
     "}"; 

((JavascriptExecutor) getDriver()).executeAsyncScript(script, new Object[0]); 
+1

我对你提供的脚本没有兴趣,你或者其他人对Angular 4有类似的东西吗? –

+0

不幸的是,这就是我找到并使用 –

+0

它不适用于角度4+,因为'角'变量不能从JavaScript访问了 – DenisD