【问题标题】:Protractor wait for isElementPresent and click on waited element fails量角器等待 isElementPresent 并单击等待的元素失败
【发布时间】:2015-03-17 12:00:52
【问题描述】:

我的端到端测试有问题。有时他们通过没有任何问题,但三分之二的时间他们失败了。我使用带有以下代码的量角器:

 describe('Admin dashboard delete Exports', function () {
        it('create export', function () {
            browser.get(e2GUrl + '/admin/studies');
            ptor.wait(function() {
                return ptor.isElementPresent(by.id('export'));
            }, 5000, 'wait for study list page to be loaded.');
            element(by.id('export')).click();
         });

HTML(注意这个元素是可见的,不会被 ng-if 或 ng-show 隐藏):

 <ul>
    <li data-ng-repeat="study in studies">
       <div data-ng-controller="ExportController" class="btn-group">
          <a id="export" class="btn btn-small dropdown-toggle" data-toggle="dropdown" href="#">
             <i class="fw-icon fw-icon-cloud-download"></i>Export
                <span class="caret"></span>
           </a>
           <ul class="dropdown-menu export-list">
                <li class="excel"><a data-ng-click="excel(study.Code)">Export to Excel</a>
                </li>
           </ul>
       </div>
    </li>
</ul>

我收到错误:

E2E:管理仪表板删除导出创建导出消息: NoSuchElementError: No element found using locator: By.id("export")

【问题讨论】:

  • 如果我注释掉点击动作,它每次都运行良好
  • 如果在get() 调用之后添加browser.waitForAngular(); 会怎样?
  • doens't似乎工作仍然有时会失败
  • 你的元素闪烁吗?尝试做这样的事情 'for (i = 0; i
  • 发现问题并分享解决方案感谢您的回复和帮助。

标签: angularjs protractor e2e-testing


【解决方案1】:

我发现问题在于: elementisPresent()isDisplayed()

因此,如果您只等待isPresent(),它可以在 html 中找到但尚未显示。

如果你只想使用elm.isDisplayed(),这很棘手,如果元素还不存在,它会崩溃。所以你必须先检查isPresent(),然后再检查isDisplayed()

我创建了一个等待阻塞 2 个属性的函数:

this.waitUntilReady = function (elm) {
        browser.wait(function () {
            return elm.isPresent();
        },10000);
        browser.wait(function () {
            return elm.isDisplayed();
        },10000);
    };

describe('Admin dashboard delete Exports', function () {
        it('create export', function () {
            browser.get(e2GUrl + '/admin/studies');
            waitUntilReady(element(by.id('export')));
            element(by.id('export')).click();
         });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多