nodejs + selenium-driver NoSuchElementError& StaleElementReferenceError

时间:2017-08-16 14:33:09

标签: node.js selenium-webdriver

我正在做一个基于摩卡的测试。 节点v8.2.1 selenium-webdriver:^ 3.5.0

test.it('demoClass', () => {
  driver.classes[0].findElement(By.css('.class-avatar')).click();
  driver.wait(until.elementIsVisible(driver.findElement(By.css('.anticon.anticon-plus'))));
  //driver.sleep(2000);
  driver.findElement(By.css('.anticon.anticon-plus')).click();
})

我收到两种不同类型的错误,无论是NoSuchElementError: no such element: Unable to locate element:还是StaleElementReferenceError: stale element reference: element is not attached to the page document

但无论哪个错误,都是指行:

  

driver.findElement(By.css()” anticon.anticon加。)点击();

当我使用driver.sleep(2000)时,它会得到解决。在我看来,这是动画的问题。我只能在当时获得元素(.anticon.ancicon-plus),页面的动画完成。

我感到困惑的是我使用driver.wait(until.elementIsVisible())没有错误,显然我得到了元素。但在下一行,我不能使用它。或NoSuchElementErrorStaleElementReferenceError

我找到了一些像http://www.seleniumhq.org/exceptions/stale_element_reference.jsp,https://stackoverflow.com/questions/18225997/stale-element-reference-element-is-not-attached-to-the-page-document这样的答案。但它无法帮助我。

1 个答案:

答案 0 :(得分:-1)

使用driver.findElement时,会触发一些可怕的事情。使用javascript代替它。

driver.executeScript(function() {
    while(true) {
        if(!document.querySelector('.anticon.anticon-plus')){}
        else {
            document.querySelector('.anticon.anticon-plus').click();
            break;
        }
    }
    return true; // not neccessary
})