为了账号安全,请及时绑定邮箱和手机立即绑定

什么是量角器中的browser.ignoreSynchronization?

/ 猿问

什么是量角器中的browser.ignoreSynchronization?

当年话下 2019-11-13 14:48:32

我见过很多次有人建议使用它:


browser.ignoreSynchronization=true;  // or false

但是我不明白我们为什么需要它?


查看完整描述

2 回答

?
慕斯王

简单的答案是,它使量角器不必等待Angular承诺,例如来自$http或$timeout解决的Angular承诺,如果您在$http或期间测试行为$timeout(例如,“正在加载”消息)或测试非Angular承诺,角度站点或页面,例如单独的登录页面。


例如,要测试在请求期间设置加载消息的按钮,可以true在获取元素时将其设置为+检查其内容


element(by.css('button[type="submit"]')).click();

browser.ignoreSynchronization = true;

expect(element(by.css('.message')).getText().toBe('Loading...');    

browser.ignoreSynchronization = false;

expect(element(by.css('.message')).getText().toBe('Loaded'); 

一个更复杂的答案是将其设置为true意味着对控制流的后续添加/注入也不会添加browser.waitForAngular。在某些情况下,了解控制流以及何时/如何添加/注入控制流很重要。例如,如果您要browser.wait测试多阶段流程,则将测试中的其余功能添加到wait控制流之后,将传递给的功能注入到控制流中。


element(by.css('button[type="submit"]')).click();

browser.ignoreSynchronization = true;

expect(element(by.css('.message')).getText().toBe('Stage 1');

browser.wait(function () {

   // This function is added to the control flow after the final

   // browser.ignoreSynchronization = false in the test

   // so we need to set it again here 

   browser.ignoreSynchronization = true;

   return element(by.cssContainingText('.message', 'Stage 2')).isPresent().then(function(isPresent) { 

     // Cleanup so later tests have the default value of false

     browser.ignoreSynchronization = false;

     return !isPresent;

   });

});

expect(element(by.css('.message')).getText().toBe('Stage 2');

browser.ignoreSynchronization = false;

expect(element(by.css('.message')).getText().toBe('Stage 3');

另一种使用方法browser.ignoreSynchronization是直接访问标准的webdriver API


element(by.css('button[type="submit"]')).click();

expect(browser.driver.findElement(by.css('.message')).getText().toBe('Loading...');    

expect(element(by.css('.message')).getText().toBe('Loaded'); 

直接使用驱动程序方法来查找元素意味着系统将尝试查找它们而无需等待任何正在进行的$http请求完成,就像设置browser.ignoreSynchronization = true。


查看完整回答
反对 回复 2019-11-13
?
慕莱坞森

此设置控制量角器是否应等待页面上的角度。它没有正确记录,但是这里是代码中的文档字符串:


/**

   * If true, Protractor will not attempt to synchronize with the page before

   * performing actions. This can be harmful because Protractor will not wait

   * until $timeouts and $http calls have been processed, which can cause

   * tests to become flaky. This should be used only when necessary, such as

   * when a page continuously polls an API using $timeout.

   *

   * @type {boolean}

   */

换句话说,如果要针对非角度站点进行测试,请将ignoreSynchronization设置设置为true。作为一个真实的例子,请看我从角度页面打开非角度页面时遇到的挑战之一:单击之后打开非角度页面。


查看完整回答
反对 回复 2019-11-13

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信