2016-04-05 4 views
0

Im folgenden Code weiterhin treffenSelen WebDriver NoSuchElement Exception wirft, findet dann Elemente, wenn ich

using System; 
using System.Security.Policy; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Chrome; 
using OpenQA.Selenium.Support; 
using OpenQA.Selenium.Support.PageObjects; 

namespace StackOverflowTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      IWebDriver driver = new ChromeDriver(); 
      driver.Navigate().GoToUrl("http://www.stackoverflow.com"); 
      driver.FindElement(By.LinkText("log in")).Click(); 
      driver.FindElement(By.ClassName("google-login")).Click(); 
      Int16 myInt = 2; //breakpoint goes here. 
      driver.Close(); 
     } 
    } 
} 

Selen eine 'NoSuchElement' Exception wirft. Wenn ich dann weiter klicke, klickt es auf das Element, das es angeblich nicht finden kann. Kann mir jemand erklären, warum das so ist/was ich falsch mache?

Antwort

2

Es dauert wahrscheinlich einige Zeit, bis das Element geladen ist. Sie können mit ExpectedConditions explizite Warte verwenden für das Element warten

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
wait.Until(ExpectedConditions.ElementIsVisible(By.LinkText("log in"))).Click(); 

Oder setzen implizite Warte

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10)); 
+0

ich dieses Recht herausgefunden, bevor Sie es geschrieben. Aber ich benutzte Thread.Sleep (25000). Ist der WebDriverWait die bevorzugte Methode, Selen zu warten? Oder würde Thread.Sleep arbeiten? – CryptoJones

+0

Ich weiß, dass dies nicht als "Race Condition" betrachtet werden würde. Was wäre die Definition davon, wenn Ihre Anwendung schneller agiert als Ihr antwortender Akteur? – CryptoJones

+1

@CryptoJones 'Thread.Sleep (25000)' stoppt das Skript für 25 Sekunden kein Meter was. 'WebDriverWait' mit der gleichen Zeit wartet ** auf ** bis 25 Sekunden, bis das Element die Bedingung erfüllt. Wenn die Bedingung nach 2 Sekunden erfüllt ist, wird das Skript nach 2 Sekunden fortgesetzt. – Guy