【问题标题】:Protractor: Stale element reference at "browser.wait(EC.visibilityOf(confDial), FIFTY_SECONDS);"量角器:“browser.wait(EC.visibilityOf(confDial), FIFTY_SECONDS);”处的过时元素引用
【发布时间】:2017-11-03 20:52:24
【问题描述】:

我被困在一个点上。我打了 7/10 次过时的元素参考问题。 操作完成后,我的应用程序会显示一个配置对话框。此消息出现一秒钟左右。我想阅读 conf 对话框的文本。

var confDial= element(by.id('dialog'));
browser.wait(EC.visibilityOf(confDial), FIFTY_SECONDS);
confDial.getText().then(function(text1){
      expect(text1).toBe(TextExpected);
});

我所做的是,在操作完成后等待对话框出现,然后执行 getText()。但它在 browser.wait() 本身失败。错误是

失败:过时的元素引用:元素未附加到页面 文档 09:14:52(会话信息:chrome=52.0.2743.116)09:14:52 (驱动信息:chromedriver=2.21.371461 (633e689b520b25f3e264a2ede6b74ccc23cb636a),平台=Linux 4.2.0-42-generic x86_64)(警告:服务器未提供任何堆栈跟踪信息)09:14:52 命令持续时间或超时:76 毫秒 09:14:52 有关此错误的文档,请 访问:http://seleniumhq.org/exceptions/stale_element_reference.html

如何解决?

提前致谢。

【问题讨论】:

  • 我知道这不会解决您的问题,但看起来您的 chrome 和 chrome 驱动程序版本已经很旧了。升级到最新版本总是一个好主意。

标签: javascript selenium-webdriver protractor


【解决方案1】:

据我所知,visibilityOf(element) 需要在场。 因此,您应该首先等待元素出现。

试试这个:

browser.wait(EC.presenceOf(element(by.id('dialog'))), FIFTY_SECONDS);
var confDial= element(by.id('dialog'));
browser.wait(EC.visibilityOf(confDial), FIFTY_SECONDS);
//expect already resolves a promise, so no need for a then() here.
expect(confDial.getText()).toBe(TextExpected);

//confDial.getText().then(function(text1){
//      expect(text1).toBe(TextExpected);
//});

事件。这样它也可以工作(虽然不是父亲):

browser.wait(EC.presenceOf(var confDial = element(by.id('dialog'))), FIFTY_SECONDS);

【讨论】:

  • 感谢您的建议。但没有运气:(遇到同样的问题,同样的地方
  • @jeet 修改了我的答案以在定义对象之前检查存在性......现在这样工作了吗?如果是这样,我通常只在变量中定义 cssSelector-String 而不是完整元素,以遵循 DRY 原则。
  • 嘿恩斯特,让我试试这个方法。将发表我的观察。感谢您帮助我。
  • @jeet 我稍微编辑了我的答案......也许你的then() 是错误的一部分,因为expect() 语句本身已经解决了承诺,所以你不需要then() 之前。让我知道,如果它适合你。
  • 我确实遵循了这种方法。从过去的 4/5 运行来看,我没有看到问题。非常感谢你帮助我。 :)
【解决方案2】:

你尝试过 isPresent 吗?

一旦对象存在于 DOM 树中,这将验证...

confDial.isPresent().then(function(result) {
    if ( result ) {
       confDial.getText().then(function(text1){
        expect(text1).toBe(TextExpected);
       });
    } 
    else {
   //some alternate action 
    }
});

【讨论】:

  • 是的,Vishal,我试过了。第 2/3 次运行,它起作用了。但后来它开始失败。
猜你喜欢
  • 2020-07-03
  • 2018-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多