2017-11-19 2 views
0
IWebDriver driver = new RemoteWebDriver(uri, dc); 
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(60); 
** Search google and end up at a Google Search Results page 
List<IWebElement> elements = new List<IWebElement>(); 
elements.AddRange(driver.FindElements(By.XPath("//*[@id=\"vn1s0p1c0\"]"))); 

これを実行すると、XPathがページに存在する場合に動作しますが、Xpathがページに存在しない場合は60秒間待機してからタイムアウトします。私はFindElementsの動作は、要素が見つからない場合は空のリストを返すことでしたが。私が間違っていることは考えられません。ImplicitWaitを使用するとFindElementsのタイムアウト動作が発生する

答えて

2

問題は、その要素の検索を待機するのに60秒間を指定することです。待機時間を設定している2行目のコードを削除すると、その要素がドライバページに存在しない場合は、空のリストIWebElementが返されます。そうでなければ、その要素を検索するために60秒を指定すると、60秒後にTimeout exceptionがスローされます。

次のコードは、タイムアウトの問題をスキップします:そのため

IWebDriver driver = new RemoteWebDriver(uri, dc); 
** Search google and end up at a Google Search Results page 
List<IWebElement> elements = new List<IWebElement>(); 
elements.AddRange(driver.FindElements(By.XPath("//*[@id=\"vn1s0p1c0\"]"))); 
+0

感謝を。私がやったことは、タイムアウトを0に設定してからFindElementsを60にリセットしてから、タイムアウトをコード内の他の場所で有効にしたかったからです。 –

+0

@ MarkMasic:いくつかの場所で待機ロジックを使いたいなら、グローバルドライバのタイムアウト設定に影響を与えない 'WebDriverWait'を使うことができます。 –

+1

暗黙的および明示的な待機の両方を使用していないことを確認してください。[http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-and-implicit-waits](wsd) 。警告:暗黙的および明示的な待機を混同しないでください。そうすると、予測できない待ち時間が発生する可能性があります。 – JeffC

関連する問題