使用带有Java的量角器

时间:2015-05-01 07:37:14

标签: java protractor

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

6 个答案:

答案 0 :(得分:8)

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

  

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

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

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:5)

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

  • jProtractor - 开发有点不活跃,但我已经测试了它的工作原理。点击here了解详情。
  • ngWebDriver - 由Paul Hammant(Selenium的共同创始人)开发。目前正在积极开发并提供良好的文档。

代码段:

<input type="text" ng-model="startBalance" placeholder="Enter your current balance" class="ng-pristine ng-valid">    

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

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

答案 3 :(得分:4)

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()。

你可能想要一个不同的rootSelector来自&#39; body&#39;如果角度不存在,你可能想抛出一个错误,但这很适合我的需要。

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

答案 4 :(得分:3)

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

答案 5 :(得分:1)

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