[英](C# Selenium) How to wait until an element is present?
我對Selenium完全陌生,昨天就開始使用它,並且我已經完成了項目的第一部分,而且我真的很喜歡Selenium的運行方式。
我遇到了一個問題,目前我正在使用Thread.Sleep暫停直到元素出現。 有時會出現一些動畫,或者只是加載緩慢,我如何才能讓它等到元素出現后再與之交互?
例如:
LoginPageElements loginPage = new LoginPageElements();
loginPage.continueLink.Click();
Thread.Sleep(5000); //here it has to wait until the next page loads
ClickDailyBonusPopUp();
Driver.driver.Navigate().GoToUrl(.....);
Thread.Sleep(2000); //here it has to wait until a login form pops up
LoginFormElements loginForm = new LoginFormElements();
loginForm.userPasswordLogin.Click();
Thread.Sleep(2000); //here it has to wait until a different login form pops up
您需要使用WebDriverWait類。 這確實是解決您問題的好方法。
如果您的應用程序使用jQuery,我將利用Selenium的IJavaScriptExecutor
進行以下操作:
public void WaitForAjax()
{
if ((bool)((IJavaScriptExecutor)WebDriver).("return window.jQuery != undefined"))
{
while (true)
{
var ajaxIsComplete = (bool)((IJavaScriptExecutor)WebDriver).ExecuteScript("return jQuery.active == 0");
if (ajaxIsComplete)
break;
Thread.Sleep(100);
}
}
}
(有關jQuery.active
更多信息,請點擊此處 。)
主要思想是找到一些條件或元素以進行輪詢/等待,以便在頁面未准備好時始終存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.