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

时间:2015-06-13 15:00:56

标签: c# 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

2 个答案:

答案 0 :(得分:0)

您需要使用WebDriverWait课程。 Here对您的问题来说是非常好的解决方案。

答案 1 :(得分:0)

如果您的应用程序使用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 here。)

主要想法是找到一些条件或元素来轮询/等待,当页面没有准备好时,它始终存在。