javascript - Protractor browser.wait 导致 Angular 超时

标签 javascript angularjs selenium selenium-webdriver protractor

我有这个代码

    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/

相关文章:

javascript - 指令的范围与其模板之间没有数据绑定(bind)

javascript - 更改输入后变量未更新

python - Selenium Python 无法在 ConnectWise 登录页面上选择元素

javascript - 重叠的 chart.js 堆叠图

angularjs - 启动 AngularJS、NodeJS、Express 和 Firebase?

javascript - 如何访问渲染中构造函数中定义的 react native 变量?

java - Selenium 网络驱动程序 : how to verify that there is a heading titled “Download” on the page wrapped in <h2> tags?

python Selenium 网络抓取

javascript - 退格键和空格键在 Firefox 中不起作用

javascript - 解析 Promise While 循环中的值