簡體   English   中英

(C#Selenium)如何等待元素出現?

[英](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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM