2013-05-28 36 views
2

我想在c#項目中使用waitforcondition Selenium擴展。 我看到論壇上的人加入: selenium.waitForCondition(「some_javascript_boolean_test_as_a_string」,「5000」)Selenium c#:WaitForCondition(如何找到ajax頁面何時被完全加載)

我怎樣才能把它添加到C#項目作爲「WaitForCondition」在命名空間「硒」不存在?

編輯: 我想檢查兩個條件。首先加載這兩個元素,讓我們說元素id = el1和id = el2。之後,其中一個元素el2從DOM中刪除。一旦el2被刪除,頁面被加載。

回答

0

我發現的方式通過設置WebDriverWait等待條件爲真要等上一個布爾值,而不是IWebElement:

  waitableDriver.Until<bool>((d) => 
      { 
       try 
       { 
        IWebElement elementOverlay = d.FindElement(By.Id("overlay")); 
        return !elementOverlay.Displayed; 
       } 
       catch (NoSuchElementException) 
       { 
        IWebElement element = d.FindElement(By.XPath("//li[@id='newBtn']")); 
        return true; 
       } 
      }); 
3

您正在使用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應用程序至關重要。

+0

嗨艾倫,是的,我看到了這種做法,但問題是,waitableDriver .Until()期望IWebElement,但我需要評估條件。 我真正需要的是能夠等到ajax頁面加載完畢。我可以使用FindElement(),但問題是即使ajax調用仍在進程中,該元素已經存在。我想檢查兩個條件 - 只要一個元素被加載,另一個元素會消失。 – Different

+0

你需要評估什麼條件?編輯您的帖子以顯示它。完全可能,我確定。它是一些JavaScript? – Arran

+0

我現在編輯了帖子,問題是我在評論中寫道:「我想檢查兩個條件 - 一旦一個元素被加載並且另一個元素消失。」 – Different

相關問題