如何在非 angularjs 网站上使用量角器?

IT技术 javascript asp.net angularjs testing protractor
2021-01-12 09:39:58

我找到了为 AngularJS Web 应用程序制作的 Protractor 框架。

如何在不使用 AngularJS 的网站上使用量角器?

我写了我的第一个测试,Protractor 触发了这条消息:

Error: Angular could not be found on the page https://www.stratexapp.com/ : retries looking for angular exceeded
6个回答

另一种方法是browser.ignoreSynchronization = true browser.get(...)之前设置量角器不会等待 Angular 加载,您可以使用通常的 element(...) 语法。

browser.ignoreSynchronization = true;
browser.get('http://localhost:8000/login.html');

element(by.id('username')).sendKeys('Jane');
element(by.id('password')).sendKeys('1234');
element(by.id('clickme')).click();
@Andrei pageObjects 怎么样。当我在功能块之外声明元素并尝试运行它时,它向我显示 NoSuchElementError 代码片段: this.buttonOnLeftSide= browser.driver.findElement(by.className('leftbutton')); this.iframe='emulatorFrame'; this.clickPlusSignOnTemplateEditor= function() { browser.driver.ignoreSynchronization = true; console.log('嘿'); browser.driver.switchTo().frame(this.iframe); console.log('iframe 内部'); 浏览器睡眠(3000);buttonOnLeftSide.click(); };
2021-03-24 09:39:58
这无疑是处理非角度量角器的最佳方法。一篇关于此博客文章解释了更多内容。对于那些寻访E2E,这里还有nightwatch.js实习生casperjswebdriver的
2021-03-27 09:39:58
我喜欢这种在整个测试套件中保持代码一致的方法。
2021-04-07 09:39:58
单击提交按钮后,我有 jasmine.DEFAULT_TIMEOUT_INTERVAL。任何的想法?
2021-04-09 09:39:58
把它放在这里以防有人遇到和我一样的问题。请注意这种方法,这很好,但如果您想要fast-fail尽管测试失败,但您的测试可能会在某些情况/环境中永远运行。
2021-04-11 09:39:58

如果您的测试需要与非角度页面交互,请直接使用browser.driver.

量角器文档中的示例

browser.driver.get('http://localhost:8000/login.html');

browser.driver.findElement(by.id('username')).sendKeys('Jane');
browser.driver.findElement(by.id('password')).sendKeys('1234');
browser.driver.findElement(by.id('clickme')).click();
只是一个愚蠢的问题,已by.id更改为By.id
2021-03-13 09:39:58
@Val - global.by = global.By = protractor.By; (来源 - github.com/angular/protractor/commit/...
2021-03-22 09:39:58
如何按类和其他非角度站点的方式查找元素?
2021-04-01 09:39:58
@EaswaramoorthyK by.className参考文档
2021-04-06 09:39:58

现在应该使用 waitForAngular 而不是弃用的 ignoreSynchronization 属性。

以下 waitForAngular 指南来自 Protractor 文档中的超时:

如何禁用等待 Angular

如果你需要导航到一个不使用 Angular 的页面,你可以通过设置 `browser.waitForAngularEnabled(false) 来关闭等待 Angular。例如:

browser.waitForAngularEnabled(false);
browser.get('/non-angular-login-page.html');

element(by.id('username')).sendKeys('Jane');
element(by.id('password')).sendKeys('1234');
element(by.id('clickme')).click();

browser.waitForAngularEnabled(true);
browser.get('/page-containing-angular.html');
它的行为有问题
2021-03-18 09:39:58

要在非角度站点上进行测试,您应该删除同步。为此,请使用以下内容:

browser.ignoreSynchronisation = true;
browser.get('url');

忘记了ignoreSynchronization!!!它不再存在于从量角器开始的量角器中5.3.0

browser.waitForAngularEnabled(false) 应该改用

分步说明如何使用它

量角器具有等待角度的内置处理,这就是它的不同之处。但是,如果页面不是有角度的页面,则量角器将挂起直到遇到超时错误,因此您需要禁用该功能以测试非角度页面。还有一个边缘情况,当页面有角度时,但这个功能仍然会使量角器出错。执行以下步骤,找出何时禁用量角器的等待角度

  1. 确定您的页面是否为 Angular:在浏览器中打开开发控制台并在“控制台”选项卡运行命令内
getAllAngularTestabilities()

如果输出是getAllAngularTestabilities is not defined,那么你的页面没有角度,去最后一步禁用内置等待

  1. 在控制台中运行这些命令
getAllAngularTestabilities()[0]._ngZone.hasPendingMacrotasks
getAllAngularTestabilities()[0]._ngZone.hasPendingMicrotasks

如果其中任何一个返回true(如果有未决的微任务或宏任务),则转到最后一步。如果都是false,恭喜,您可以使用内置量角器的等待角度。但如果你不喜欢它,我也不喜欢,那么请阅读最后一步以了解如何禁用它

  1. 运行上面提到的命令。但!它返回一个promise,需要处理,最好使用await关键字
await browser.waitForAngularEnabled(false)

此命令可以在任何地方运行:在it块中、在beforeAll中或在onPrepare您的配置中。只要确保,如果你await用来制作相应的块async

beforeAll(async () => await browser.waitForAngularEnabled(false))