2015-04-07 104 views
1

起初:
- 硒2.0 webdriver的
- 爲IEXPLORER,Chrome和Firefox
- 當前的webdriver和硒的DLL
- Windows 8.1中
- 的Visual Studio 2013 C#硒的webdriver,等待顯示加載的div

我會測試我的網站。這些頁面將加載一個Ajax。如果我要更改頁面,它將顯示一個加載div(div #wartenDialog)。現在我等待顯示這個div,然後我切換到下一頁。

問題是,有時會有一個小的延遲,直到顯示加載div和由一個快速的計算機/互聯網沒有加載div。

我有嘗試這個功能:

public static void WaitWhileElementVisible(RemoteWebDriver _driver, By _locator) 
{ 
    WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromMilliseconds(timeout)); 
    wait.Until(drv => !Exists(drv, _locator)); 
} 

private static bool Exists(IWebDriver _drv, By _locator) 
{ 
    return (ExpectedConditions.ElementIsVisible(_locator) != null); 
} 

現在它在超時始終運行。

+0

您還應該顯示相關的HTML以及如何使用參數調用'WaitWhileElementVisible'。另外我不明白爲什麼用參數'IWebDriver _drv'創建定製的'Exists'方法,根本不使用它。 –

+0

_drv是來自其他嘗試的剩餘物。我已經使用_drv.FindElement(_locator)方法 – Gamer2015

回答

0

等待元素可見的方法是正確的。但是對代碼進行一些修改就可以解決問題。

public static void WaitWhileElementVisible(RemoteWebDriver _driver, By _locator) 
{ 
    WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromMilliseconds(timeout)); 
    wait.IgnoreExceptionTypes(typeof(WebDriverTimeoutException)); 
    wait.Until(drv => !Exists(drv, _locator)); 
} 

IgnoreExceptionTypes()將忽略提供的異常類型。此代碼正在爲我工​​作。

希望這可以解決您的問題。

+0

感謝您的快速答案。不幸的是,這並沒有改變。我有一個自己的錯誤:CSS語法必須是div#wartenDialog而不是div #wartenDialog,但我得到了相同的結果。我檢測到ExpectedConditions.ElementIsVisible(_locator)!= null方法總是返回true。現在我使用_drv.FindElement(_locator).GetCssValue(「display」)!=「none」表達式並且它可以工作 – Gamer2015

+0

我已經將表達式更改爲_drv.FindElement(_locator).Displayed;表達,它也起作用。也許更好的語法 – Gamer2015

+0

@ Gamer2015很高興聽到你解決了這個問題。如果你想忽略使用'WebDriverWait'時發生的異常,你應該使用'IgnoreExceptionTypes'(在你的情況下它是'TimeoutException')。我使用'Displayed'方法遇到了一個問題。如果DOM上不存在元素,則FindElement方法拋出'NoSuchElement'異常。如果元素出現在頁面上,它工作正常。大多數情況下,我避免使用「顯示」方法。 –