2017-08-16 13 views
1

私はテストベースのモカをやっています。 ノードv8.2.1セレン - webdriver:^ 3.5.0nodejs + selenium-driver NoSuchElementError&StaleElementReferenceError

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-plus '))。クリック();

私がdriver.sleep(2000)を使用すると、解決されます。私の意見では、それはアニメーションの問題です。私はその時点で要素(.anticon.ancicon-plus)を得ることができます、ページのアニメーションが完了します。

私が混乱しているのは、エラーなしでdriver.wait(until.elementIsVisible())を使用していることです。要素があることは明らかです。しかし、次の行では、私はそれを使用することはできません。またはNoSuchElementError、またはStaleElementReferenceErrorです。

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

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 
}) 
+0

この回答とコードは意味がありません。 – JeffC

+0

本当に助けてくれます。セレンのwebdriverが何をするのか分かりませんが、javascriptによるこのメソッドは有効です。私はひどい誤りなくそれを実行します。 [フレークを固定する](https://github.com/tastejs/todomvc/pull/1371)、角度のようなフレームを使用すると、反応するかもしれません。何かをしたり、ページが読み込まれます。当時、selenium-webdriverはエラーを表示します。しかし、javascriptはまだ有用です。 @JeffC – yuwanlin

+0

ありがとう、それは実際にprobleを解決する。@ yuwanlin – real