WebdDriverJS / NodeJS:'元素未附加到页面文档'错误

时间:2016-09-30 08:03:43

标签: javascript node.js selenium-webdriver webdriver

我是WebDriver(chromedriver)的新手,只有javascript语法的超级基础知识,所以如果我的代码看起来像意大利面,我很抱歉。

我有一个clickAllElements();函数,可以查找类中的所有元素并单击它们。

//Click every element of an array
var clickAllElements = function (el, screenShot){
    //Store elements in an array
    var findElements = driver.findElements(By.css(el));
    findElements.then(function (options) {
        //Then iterate through array
        options.map(function (elem) {
            //Click on each item in the array
            return elem.click().then(function() {
                //Then get the text content inside each element
                driver.sleep(5000);
                elem.getText().then(function(text){
                    //Log the text to the console.
                    console.log(" - Selecting " + text.trim());
                     driver.sleep(2000);
                    if (screenShot) {
                        takeScreenShot(text);
                    }                    
                });              
            });
        });
    });
}

这个工作正常,但现在我有以下三个要素。

enter image description here

以下是Chrome检查器中显示的html / css

enter image description here

我希望我的clickAllElements();函数单击每个值上的x,以便删除它们。当我clickAllElements('.token > a');时它实际上删除了第一个,但之后我得到一个"陈旧元素引用:元素没有附加到页面文档。"我不理解错误,因为那些元素显然存在。我怎么能绕过这个? (最好使用javascripit解决方案);

1 个答案:

答案 0 :(得分:2)

有两种可能性:

单击后立即删除元素,但稍后会引用

elem.getText().then(function(text)

在这种情况下,您只需要在delete链接的情况下不要进一步引用该对象。向此函数添加参数,或者更好的是,创建另一个参数以删除所有链接。

单击

后元素会更新

您也可以通过编写另一个函数来解决这个问题,但在这种情况下,您还可以重新编写函数以按索引遍历每个元素,每次单击后刷新元素列表并从中获取文本由index指定。