Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 量角器:在“browser.wait(EC.visibilityOf(confDial),五十秒)”处的陈旧元素引用_Javascript_Selenium Webdriver_Protractor - Fatal编程技术网

Javascript 量角器:在“browser.wait(EC.visibilityOf(confDial),五十秒)”处的陈旧元素引用

Javascript 量角器:在“browser.wait(EC.visibilityOf(confDial),五十秒)”处的陈旧元素引用,javascript,selenium-webdriver,protractor,Javascript,Selenium Webdriver,Protractor,我在某一点上陷入了困境。我7/10次命中了过时的元素引用问题。 我的应用程序在操作完成后显示一个conf对话框。此消息出现一秒钟左右。我想读conf对话框的文本 var confDial= element(by.id('dialog')); browser.wait(EC.visibilityOf(confDial), FIFTY_SECONDS); confDial.getText().then(function(text1){ expect(text1).toBe(TextExp

我在某一点上陷入了困境。我7/10次命中了过时的元素引用问题。 我的应用程序在操作完成后显示一个conf对话框。此消息出现一秒钟左右。我想读conf对话框的文本

var confDial= element(by.id('dialog'));
browser.wait(EC.visibilityOf(confDial), FIFTY_SECONDS);
confDial.getText().then(function(text1){
      expect(text1).toBe(TextExpected);
});
我要做的是,在操作完成后等待对话框出现,然后执行getText。但它在浏览器上失败。请等待。错误是

失败:过时元素引用:元素未附加到页面 文档09:14:52会话信息:chrome=52.0.2743.116 09:14:52 驾驶员信息:chromedriver=2.21.371461 633e689b520b25f3e264a2ede6b74ccc23cb636a,平台=Linux 4.2.0-42-generic x86_64警告:服务器未提供任何stacktrace信息09:14:52命令持续时间或超时:76 毫秒09:14:52有关此错误的文档,请 访问:

我如何解决它


提前感谢。

据我所知,元素的可视性需要存在。 因此,您应该首先等待元素出现

试试这个:

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);
//});
Evtl。同样,它也可以工作,但是:

browser.wait(EC.presenceOf(var confDial = element(by.id('dialog'))), FIFTY_SECONDS);
你有没有试过iPresent

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

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

我知道这不会解决你的问题,但看起来你的chrome和chrome驱动程序版本已经很旧了。升级到最新版本总是个好主意。谢谢你的建议。但是运气不好:碰到同样的问题,同样的问题place@jeet在定义对象之前,修改我的答案以检查是否存在。。。现在这样行吗?如果是这样,我通常只在变量中定义cssSelector字符串,而不是完整的元素,以遵循DRY原则。我将发表我的观察。谢谢你的帮助。@jeet我编辑了一下我的答案。。。可能您的then是错误的一部分,因为expect语句本身已经解决了承诺,所以您不需要在之前有then。让我知道,如果它对你有用的话。我确实遵循了这个方法。从过去的4/5分来看,我看不出有什么问题。非常感谢你帮助我是的,维沙,我试过了。前2/3次运行,成功了。但后来它开始失败。