您正在使用WebDriver(從您之前的Selenium問題中獲得),因此您看到的代碼不正確。 selenium.waitForCondition
是舊的v1代碼。你正在使用漂亮的新閃亮的V2代碼。
你想要什麼特別是WebDriverWait類位於OpenQA.Selenium.Support
命名空間。
var driver = new FirefoxDriver();
var waitableDriver = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
var element = waitableDriver.Until(d => d.FindElement(By.Id("something")));
這會等到它找到某個元素。但是,它允許您指定任何Func<T, TResult>
,因此它爲靈活性提供了一些很大的空間。您可以利用C#中的lambda表達式的強大功能。
如果您想等待某個元素對用戶可見,那麼該怎麼辦?和裏面有一個值?如果在登錄時彈出5秒鐘後出現消息,該怎麼辦?所有可行的。
此外,還有一些方便的'expected conditions'已經供您使用,這些是人們可能需要「等待」特定條件爲真的常見情況,例如常見的人們需要等到元素不僅在頁面中呈現,而且實際上對用戶可見。有一個ElementIsVisible
預期的條件供你使用,所以你不必手動組成邏輯。
這個整體概念在Selenium世界中被稱爲explicit waits,對於自動化測試AJAX應用程序至關重要。
嗨艾倫,是的,我看到了這種做法,但問題是,waitableDriver .Until()期望IWebElement,但我需要評估條件。 我真正需要的是能夠等到ajax頁面加載完畢。我可以使用FindElement(),但問題是即使ajax調用仍在進程中,該元素已經存在。我想檢查兩個條件 - 只要一個元素被加載,另一個元素會消失。 – Different
你需要評估什麼條件?編輯您的帖子以顯示它。完全可能,我確定。它是一些JavaScript? – Arran
我現在編輯了帖子,問題是我在評論中寫道:「我想檢查兩個條件 - 一旦一個元素被加載並且另一個元素消失。」 – Different