【问题标题】:Protractor browser.wait causes angular timeoutProtractor browser.wait 导致角度超时
【发布时间】:2015-10-27 17:36:35
【问题描述】:

我有这个代码

    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.model”行执行时,不使用任何角度的东西如何等待?

另外,我几乎可以肯定它今天早上出去办事之前奏效了。

【问题讨论】:

    标签: javascript angularjs selenium selenium-webdriver protractor


    【解决方案1】:

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

    还要确保您的 html 正文标签上有 ng-app 属性,如果没有该属性,量角器将无法识别它是角页面还是非角页面。如果您的 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);
    

    如果您只想使用量角器拥有的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
    

    希望对你有帮助。

    【讨论】:

    • 感谢您的回答,不幸的是,我的测试行为方式没有改变。我仍然得到角度的超时。
    • @TheBurnMill 您的页面是有角度的还是无角度的?我问的原因是因为您正在使用model 定位器并且您已经关闭了ignoreSynchronization。这个错误到底发生在哪里——是在wait()函数还是by.model().sendKeys()上?我已经用一种简单的方法更新了答案,等待元素出现在页面上。
    • 它是有角度的,但是 ng-app 不在主体上,因此是 rootEl 线。
    • 尝试“protractor.ExpectedConditions”后结果还是一样。
    • 设置browser.ignoreSynchronization = false; 有帮助吗?您还使用哪个版本的角度?或者您可以简单地尝试使用 browser.waitForAngular().then(function(){//Your code to work on angular elements}); 等待 angular 解决
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    相关资源
    最近更新 更多