一个简单的答案是,它使量角器不必等待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。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)