2017-05-25 8 views
2

テキストボックスにテキストを入力する必要があります。リストが自動拡張され、最初のアイテムを選択する必要があります。しかし、それは例外のために失敗します。 OpenQA.Selenium.NoSuchElementException。私はwait.Until()を使用してみましたが、同じエラーに直面しています。OpenQA.Selenium.NoSuchElementException - C#Selenium

​​

try 
{ 
    IWebElement cityList = driver.FindElement(By.XPath("value")); 
    MouseClick(driver, cityList); 
} 
catch (OpenQA.Selenium.NoSuchElementException ex) 
{ 
    IWebElement cityList = driver.FindElement(By.XPath("value")); 
    MouseClick(driver, cityList); 
} 

編集

HTMLコード:

<input name="ctl00$cphmain$txtCity" type="text" maxlength="50" id="ctl00_cphmain_txtCity" class="mandsearchtxtbox" onkeypress="javascript:return ValidateInputAlphabeticValuesOnly(event);" onblur="javascript:return checkItemMsg(this)" style="width:180px;" autocomplete="off"> 
<div class="AutoExtenderHighlight">AMANDOLUWA</div> 

wait.Until()とのコード

WebDriverWait wait1 = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
    wait.Until<IWebElement>((d) => 
     { 
      try 
      { 
       return d.FindElement(By.XPath("//*[@id='citydiv']/div")); 
       MouseClick(driver, driver.FindElement(By.XPath("//*[@id='citydiv']/div"))); 
      } 
      catch (OpenQA.Selenium.NoSuchElementException ex) 
      { 
       return null; 
       MouseClick(driver, driver.FindElement(By.XPath("//*[@id='citydiv']/div"))); 
      } 
     }); 

WebDriverExceptionの編集2

HTMLコード(ボタン)

HTML code

+0

あなたが試したコードと関連するhtmlを追加してください。 – Guy

+0

htmlコードと試したコードを追加しました。 wait.until()コードが正しいかどうかはわかりません。 –

答えて

2

あなたはidがctl00_cphmain_txtCity、ないcitydivある投稿をHTMLによります。

wait.Untilの実装ではIWebElementまたはnullが返されますが、MouseClickメソッドには届きません。また、要素が存在するかどうかをチェックします(可視ではありません)。

あなたは独自の実装をしたい場合は、私の指揮官は、あなたが機能で構築を使用していますが、あなたが

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
IWebElement option = wait.Until<IWebElement>((d) => 
{ 
    try 
    { 
     IWebElement element = d.FindElement(By.XPath("//*[@id='ctl00_cphmain_txtCity']/div")); 
     if (element.Displayed) 
     { 
      return element; 
     } 
    } 
    catch (NoSuchElementException) { } 
    catch (StaleElementReferenceException) { } 

    return null; 
}); 

option.Click(); 

ような何かを行うことができますexpected conditionsクラス

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
IWebElement element = wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//*[@id='ctl00_cphmain_txtCity']/div"))); 
element.Click(); 

で構築を使用することができます。

+0

2番目のコードが機能しました。ありがとう:) –

+0

また、ctl00_cphmain_txtCityはTextboxのIDですが、citydivはauto-extenderリストのIDです。したがって、後者のIDが使用されます。 –

+0

待ちに関するもう一つの疑問。 10秒後にタイムアウト例外がスローされた場合はどうなりますか?タイムアウトにより失敗した場合、tryブロックに入りません。 –

関連する問題