小编Mor*_*bia的帖子

"陈旧元素引用"错误行为未定

代码1:

element(by.id('myButtonId')).click();
return element(by.id('myValidationSummaryId')).getText().then(function (val) {
    return val;
});
Run Code Online (Sandbox Code Playgroud)

上面的代码工作很多次,然后它开始给出以下错误

"失败:陈旧元素引用:元素未附加到页面文档"

这个id"myValidationSummaryId"之前没有使用过,单击"myValidationSummaryId"中服务端提供的按钮发布表单和成功/失败消息.

代码2:

return element(by.id('myButtonId')).click().then(function () {
    return element(by.id('myValidationSummaryId')).getText().then(function (val) {
      return val;
    });
});
Run Code Online (Sandbox Code Playgroud)

修复代码如上所述固定原始问题并且它一直很好地工作很多次但后来它开始随机失败原始陈旧元素引用错误.

代码3:

return element(by.id('myButtonId')).click().then(function () {
    return element(by.id('myValidationSummaryId')).waitReady().then(function (isReady) {
        if (isReady) {
            return element(by.id('myValidationSummaryId')).getText().then(function (val) {
                return val;
            });
        } else {
            return 'Failed to check success/failure message';
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

然后我修复了上面的代码,现在它工作正常,waitReady函数主动等待一个元素存在并显示到指定的时间.

不应该是量角器/ WebdriverJS原本应该处理这个问题.

1>你能否解释为什么Code 1和Code 2有时会工作并且有时会失败?

2>您认为Code 3现在还好吗,并且每次都有效吗?

元素'myValidationSummaryId'只使用一次,然后点击,如果页面没有完全加载,如果元素尚未可用,它应该说没有找到元素,但为什么陈旧的元素引用?我使用pageLoadTimeout作为5分钟,页面加载几秒钟.这是非AngularJS应用程序和browser.ignoreSynchronization = true.

它到处谈论什么代码可以修复它,但没有发现为什么这种行为以及为什么WebdriverJS本身无法处理它.

jasmine selenium-webdriver protractor

7
推荐指数
1
解决办法
9463
查看次数

标签 统计

jasmine ×1

protractor ×1

selenium-webdriver ×1