我有这个代码
browser.sleep(5000).then(function() {console.log('rotel:' + browser.rootEl)});
browser.ignoreSynchronization = true;
browser.rootEl = 'div#overview';
browser.driver.switchTo().defaultContent().then(function() {console.log('Switch default')});
browser.sleep(500);
browser.wait(function() { return browser.isElementPresent(by.css('[class="box-header"]'))}, 10000);
element(by.model("ssn")).sendKeys(pat + "\n").then(function() {console.log('sendkeys')});
browser.rootEl = 'body';
如果我用浏览器删除该行,等待测试继续,否则我会得到
'Error while waiting for Protractor to sync with the page: "root element (body) has no injector. this may mean it is not inside ng-app."'
当“by.model”行使用时,不使用任何 Angular 事物的等待如何不起作用?
另外,我几乎可以肯定今天早上出去办事之前它会起作用。
最佳答案
如果您正在测试的页面是 Angular ,那么您应该在代码中将 ignoreSynchronization
设置为 false
- browser.ignoreSynchronization = false;
。
还要确保您的 html body 标记上有 ng-app
属性,如果没有该属性, Protractor 将无法识别它是 Angular 页面还是非 Angular 页面。如果您的 ng-app
标记位于 body 标记的后代元素上,则使用 conf.js 文件中的属性 rootElement
指示 Protractor 检查该标记的 Angular 标签开始。方法如下 -
rootElement: 'body/div', //if ng-app tag is on a div element under body
还有isElementPresent()
的 promise 返回未在您的 browser.wait()
函数中解析。 wait()
函数始终等待返回 bool 值,直到超时值到期,如果它不返回任何内容,则会引发错误。另外,isElementPresent()
根据元素的存在返回一个 bool 值。下面是如何使用它 -
browser.wait(function() {
return browser.isElementPresent(by.css('[class="box-header"]')).then(function(present){
return present;
});
}, 10000);
如果您只想使用 ExpectedConditions
检查元素是否存在于 DOM 上,还有另一种简单的方法。 Protractor 拥有的对象。以下是其用法的一些示例 -
var EC = protractor.ExpectedConditions;
var element = element(by.css('[class="box-header"]'));
browser.wait(EC.visibilityOf(element), 10000); //Checks if element is present and enabled on DOM
browser.wait(EC.presenceOf(element), 10000); //Checks if element is present on DOM
browser.wait(EC.elementToBeClickable(element), 10000); //Use it if you want to wait for element to be clickable Checks if element is present and enabled on DOM
希望有帮助。
关于javascript - Protractor browser.wait 导致 Angular 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33279903/