0

我是Test Automation的新成员。我想使用Selenium来测试由角度js完成的web应用程序。有人能告诉我如何从一个基本的应用程序开始,并且你有一个角度js应用程序的例子。如何使用硒测试角度js Web应用程序?

回答

1

对于E2E-测试AngularJS应用中,有一个专门的称为Protractor,这本身就是围绕WebDriverJS一个方便的包装 - 硒的JavaScript绑定。

一个很好的开始是Tutorial

+0

谢谢,但我可以只用硒来测试吗? – Emna

+0

@Emna谢谢,好吧,你的意思只是纯粹的'WebDriverJS'? – alecxe

+0

是的,我对此没有太大想法。我刚刚使用Appium进行移动自动化。 我想知道如果只有硒可能测试一个角度js web应用程序? 如果是的话,我可以从它开始理解基本概念吗? – Emna

1

我最近发现GitHub项目叫做jProtractor。它基于Selenium WebDriver实施自己的NgWebDriver。我注意到的最重要的功能是,在调用原始方法之前,大多数基本方法都等待完成AngularJS脚本。

请注意,我自己没有尝试过,所以我不能说它的工作效果如何,但它目前处于开发阶段,可能包含错误和缺少功能。

希望它有帮助。

1

以下两个预期条件可能会做你需要做的一切,使测试角站点容易。

这一次将是最常用的预期状态,你会在你的代码:

public static ExpectedCondition angularHasFinishedProcessing() { 
    return new ExpectedCondition<Boolean>() { 
     @Override 
     public Boolean apply(WebDriver driver) { 
      String hasAngularFinishedScript = "var callback = arguments[arguments.length - 1];\n" + 
        "var el = document.querySelector('html');\n" + 
        "if (!window.angular) {\n" + 
        " callback('false')\n" + 
        "}\n" + 
        "if (angular.getTestability) {\n" + 
        " angular.getTestability(el).whenStable(function(){callback('true')});\n" + 
        "} else {\n" + 
        " if (!angular.element(el).injector()) {\n" + 
        "  callback('false')\n" + 
        " }\n" + 
        " var browser = angular.element(el).injector().get('$browser');\n" + 
        " browser.notifyWhenNoOutstandingRequests(function(){callback('true')});\n" + 
        "}"; 

      JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver; 
      String isProcessingFinished = javascriptExecutor.executeAsyncScript(hasAngularFinishedScript).toString(); 

      return Boolean.valueOf(isProcessingFinished); 
     } 
    }; 
} 

它会等待角度是在它认为的状态,该网站是准备自动化测试去(这几乎从保护程序代码库中被窃取,并用Java包装)。你将需要有一个脚本超时设置为它工作,虽然:如果您使用的角度动画在屏幕上移动的东西,你会想这

webdriver.manage().timeouts().setScriptTimeout(15, TimeUnit.SECONDS); 

最后:

public static ExpectedCondition angularAnimationsAreComplete() { 
    return new ExpectedCondition<Boolean>() { 
     @Override 
     public Boolean apply(WebDriver driver) { 
      int animatingElements = driver.findElements(By.className("ng-animate")).size(); 

      return animatingElements == 0; 
     } 
    }; 
} 

角动画将类“ng-animate”添加到它正在移动的所有元素。这种情况将等到该类不再适用于任何元素,或者换句话说,它将等待,直到所有动画完成。