2016-08-04 4 views
2

私は要素を見つけてテキストで入力するためにSeleniumを使用しています。 URLを参照すると、最初にページを読み込むテキストボックスが表示されます。アプリが読み込まれると、ログインユーザー名/パスワードが表示されます。 NoSuchElementExceptionを避けるために、ログインユーザー名とパスワードが表示されるまで待つだけです。私はthis postを参照しましたが、そこに解決策を得ることはできません。WebDriverWaitを使用しているにもかかわらずNoSuchElementException

テストを実行すると、要素が表示されるのを待たずにすぐにx.FindElement(By.Id("UserName")NoSuchElementExceptionで失敗します。

using (IWebDriver driver = new ChromeDriver(@"<my path>")) 
{ 
    driver.Manage().Window.Maximize(); 

    driver.Navigate().GoToUrl("<my url>"); 

    var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(600)); 
    var userName = wait.Until(x => x.FindElement(By.Id("UserName"))); 

    userName.SendKeys("username"); 

    IWebElement pass = driver.FindElement(By.Id("Password")); 
    pass.SendKeys("password"); 
} 

私はここで間違っていますか?コードを探してから、UserNameが存在するのを待ってから探してください。

答えて

2

私は、以下のようにユーザー名の可視性を待つことに行くあなたは負荷要素の最初の不可視を待つ必要があると思う: -

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20)); 

wait.Until(ExpectedConditions.InvisibilityOfElementLocated(By.ID("id of loading element "))); 

//Now go to find username element 
var userName = wait.Until(ExpectedConditions.ElementIsVisible(By.ID("UserName"))); 
userName.SendKeys("username"); 
+1

ありがとう!私はちょうど 'wait.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(By.Id(" UserName "));)を使用して終了し、それは働いた。 – tnw

関連する問題