量角器浏览器.Wait会导致角超时

Protractor browser.wait causes angular timeout

本文关键字:超时 浏览器 Wait 量角器      更新时间:2023-09-26

我有这样的代码

    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';

如果我删除一行浏览器等待测试继续,否则我得到

'等待量角器与页面同步时出错:'根元素(主体)没有注入器。这可能意味着它不在ng-app中。"

怎么能等待,它不使用任何角度的东西,不工作时的"by"。"模型"行吗?

而且我几乎可以肯定今天早上出去办事之前它是有效的。

如果你正在测试的页面是有角的,那么你应该在你的代码中设置ignoreSynchronizationfalse - browser.ignoreSynchronization = false;

也要确保你有ng-app属性在你的html正文标签没有量角器不知道如果它是一个有角或无角的页面。如果你的ng-app标签在body标签的后代元素上,那么在你的conf.js文件中使用rootElement属性来指示量角器从该标签开始检查角度。-

rootElement: 'body/div', //if ng-app tag is on a div element under body

isElementPresent()返回的承诺也没有在browser.wait()函数中解决。wait()函数总是等待返回一个布尔值,直到超时值过期,如果它没有返回任何东西,则抛出一个错误。另外,isElementPresent()根据元素的存在返回一个布尔值。以下是如何使用它-

browser.wait(function() { 
    return browser.isElementPresent(by.css('[class="box-header"]')).then(function(present){
        return present;
    });
}, 10000);

如果您只是想通过使用protractor拥有的ExpectedConditions对象来检查元素是否存在于DOM上,还有另一种简单的方法。下面是一些使用它的例子——

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

希望能有所帮助。