我想在Java上使用Protractor而不是在Node.js上使用。是否可以将Protractor与Java或Python一起使用?我们不想添加其他技术进行测试,并希望使用现有技术。
答案 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库:
代码段:
<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调用这些测试。那就是我们目前正在做的事情!