使用带有Java的量角器

我想在Java上使用Protractor而不是在Node.js上使用。 是否可以将Protractor与Java或Python一起使用? 我们不想添加其他技术进行测试,并希望使用现有技术。

不幸的是,你没有太多的选择,因为Protractor是AngularJS的JavaScript测试框架,它通过Node.js分发。

我们不想添加其他技术进行测试,并希望使用现有技术。

量角器是针对angularJS应用定制的。 因此,如果您的应用程序是使用AngularJS创建的,Protractor将提供帮助,因为它内置了对AngularJS页面加载和操作的支持。

如果您的应用程序不是构建在Angular之上,则可以在您喜欢的任何其他语言之上使用Selenium WebDriver。

Selenium为用户提供了使用Python作为编写测试的媒介的文档,请在此处阅读更多相关信息。

Java中已经有一个用于自动化Angular内容的库。 它基于量角器建立,称为“ ngWebDriver ”

Protractor是一个JS库,因此您无法在Java中运行它并且在没有Protractor的情况下测试Angular应用程序很困难,因为您的测试代码需要等待Angular进程在点击之类的交互之前完成。

幸运的是,Angular可以很容易地确定何时完成处理。

有一个JS函数接受回调,一旦Angular准备好就会通知你。

angular.getTestability("body").whenStable(callback); 

注意:这适用于Angular 1.4.8。 一些其他版本的Angular有一个类似的不同方法。

您可以使用以下简单方法或类似方法从Java测试代码调用可测试性方法。

 private void waitForAngular() { 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) driver).executeAsyncScript(script, new Object[0]); } 

在使用click之类的方法与驱动程序交互之前调用waitForAngular()。

您可能需要一个与’body’不同的rootSelector,如果angular不存在,您可能想要抛出一个错误,但这适合我的需要。

量角器提供了其他选择器,可以更容易测试Angular应用程序,但我个人使用ID和类选择器,所以我不需要它们。

要在汤姆的答案上添加一些内容,您甚至可以使用Protractor测试非角度的应用程序/网站。 但是仍然没有办法,您可以使用Java或Python编写Protractor测试,因为Protractor的核心是基于Javascript(node.js)构建的,并且纯粹是Javascript。 希望能帮助到你。

截至2017年,我发现了这些用于Java的Protractor库:

  • jProtractor – 开发有点不活跃,但我已经测试了它的工作。 点击此处了解更多详情。
  • ngWebDriver – 由Paul Hammant(Selenium的共同创建者)开发。 目前正在积极开发并提供良好的文档

代码片段:

  // jProtractor WebElement startBalanceField = driver.findElement(NgBy.model("startBalance")); // ngWebDriver WebElement startBalanceField = driver.findElement(ByAngular.model("startBalance")); 

使用量角器的最佳方法是,使用javascript单独编写量角器测试,并在需要时从java / python调用这些测试。 那就是我们目前正在做的事情!