2016-12-05 13 views
1

ブロックの要素であれば、{}がある場合にセレン(XPathは)、そのため素子セレンC#タイムアウト例外

private void CheckLogin(IWebDriver driver) 
    { 
     var driver = new ChromeDriver(); 
     driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1000)); 
     driver.FindElement(By.XPath(".//div[@class='modal fade in']//button[text()='Close']")).Click(); 
     var element = driver.FindElement(By.XPath(".//*/span[contains(text(),'code')]")); 
     if (element != null && dealer.Displayed) 
     { 
      System.Diagnostics.Debug.WriteLine("Element is shown"); 
     } 
     else 
     { 
      System.Diagnostics.Debug.WriteLine("Element is not shown"); 
      driver.FindElement(By.XPath(".//*[@id='s2id_autogen5']/a")).Click(); 
      driver.FindElement(By.XPath(".//*[@id='body']/a")).Click(); 
      driver.FindElement(By.XPath(".//*[@id='s2id_autogen6_search']")).SendKeys(ENTER); 
     } 

    } 

を進めることができないとき、私は、autotestsを書き、セレンタイムアウトエラーに問題があるために始めています(テキストに値 "code"が含まれています)、それは正常に動作しますが、見つからない場合(テキストに値 "code"が含まれていません)、システムはTimeoutエラーを送信します。助けてくれなかった。 ChromeDriver()とFirefoxDriver()の同じ問題です。

例外:

OpenQA.Selenium.WebDriverException occurred 
    HResult=0x80131500 
    Message=The HTTP request to the remote WebDriver server for URL http://localhost:56939/session/ timed out after 60 seconds. 
    Source=WebDriver 
    StackTrace: 
    at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request) 
    at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute) 
    at OpenQA.Selenium.Remote.DriverServiceCommandExecutor.Execute(Command commandToExecute) 
    at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters) 
    at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(String mechanism, String value) 
    at OpenQA.Selenium.Remote.RemoteWebDriver.FindElementByXPath(String xpath) 
    at OpenQA.Selenium.By.<>c__DisplayClasse.<XPath>b__c(ISearchContext context) 
    at OpenQA.Selenium.By.FindElement(ISearchContext context) 
    at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(By by) 
+0

要素が見つからない場合、Displayed()はC#でエラーをスローします。あなたはそれを正しく処理する必要があります。答え[ここ](http://stackoverflow.com/questions/27516545/how-to-check-if-element-exists-in-c-sharp-selenium-drivers)を参照してください。 – Sudeepthi

答えて

0

あなたが暗黙の待機を追加しているので、あなたは、タイムアウトエラーを取得しています。 のは、あなたの例でそれを見てみましょう:この場合

var driver = new ChromeDriver(); 
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1000)); 
driver.FindElement(By.XPath(".//div[@class='modal fade in']//button[text()='Close']")).Click(); 

、あなたはそれはあなたが見つけることがしたい要素を検索します前に、指定されたタイムアウトを待つようにセレンを「伝える」です。要素が見つからない場合は、タイムアウトエラーが発生します。する要素の前に待機する時間がありませんので、場合にはそれが無いタイムアウトで、あなたがNoSuchElementExceptionを取得しますが、検出されませんので、あなたは、自動的に要素を取得するにはセレンを言っている。この場合

var driver = new ChromeDriver(); 
driver.FindElement(By.XPath(".//div[@class='modal fade in']//button[text()='Close']")).Click(); 

プレゼント。

そして、我々は、明示的な待ち時間にそれを拡張している場合:あなたは、それが発見されるまでの要素を探し続けるためにセレンを言ったが、もはやとして指定された最大タイムアウトよりもしている。この場合

var driver = new ChromeDriver(); 
var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 1000)); 
wait.Until(d => d.FindElement(By.XPath(".//div[@class='modal fade in']//button[text()='Close']"))).Click(); 

パラメータはWebDriverWaitです。