如何在移动到另一个页面之前等待selenium中的页面加载? (C#)

时间:2018-02-14 12:01:31

标签: c# unit-testing selenium selenium-webdriver selenium-chromedriver

我对selenium有点新鲜,基本上,我要做的是登录website1,等到页面完全加载。然后转到website2。 我不想使用Thread.Sleep(),因为您知道这会让我的用户界面无法响应。 我如何使用硒与c#。

        MyWebDriver.Navigate().GoToUrl(url1);
        MyWebDriver.FindElement(By.Name(Username_Input)).SendKeys(username);
        MyWebDriver.FindElement(By.Name(Password_Input)).SendKeys(password);
        MyWebDriver.FindElement(By.XPath(Log_in_Button)).Click();
        //wait untill the page is fully loaded then move to url2
        MyWebDriver.Navigate().GoToUrl(url2);

我找到了一个使用ExpectedConditions.ElementIsVisible的答案,但不幸的是我在新的selenium版本中找不到ExpectedConditions。

3 个答案:

答案 0 :(得分:2)

bool wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60)).Until(d => ((javascriptexecutor)d).executescript("return document.readyState").Equals("complete")); 

if(wait == true)
{
    //Your code
}

上面的代码将等待页面加载60秒,如果页面准备好(60秒内)则返回true,如果页面未准备好(60秒后)则返回false。

答案 1 :(得分:1)

从根本上说,作为验证过程的一部分,您不要等待加载页面,而是等待验证 操作的最终结果,无论是:

  • ElementIsVisible
  • ElementToBeClickable
  • 部分TextToBePresentInElement
  • TitleContains
  • UrlContains
  • 因此,您的自动化脚本将验证上述任何验证点

    根据API Docs (C#)ExpectedConditions Class确实提到了方法ElementIsVisible,如下所示:

ExpectedConditions.ElementIsVisible方法

期望检查页面的DOM上是否存在元素并且可见。可见性意味着不仅要显示元素,还要使其高度和宽度大于0。

  • 命名空间:OpenQA.Selenium.Support.UI
  • 大会:WebDriver.Support (in WebDriver.Support.dll) Version: 3.1.0
  • 参数(定位器):
    • 输入:OpenQA.Selenium.By
    • 返回值:输入:Func<IWebDriver, IWebElement>

屏幕截图:

ElementIsVisible

答案 2 :(得分:1)

正如DebanjanB所说,我们无需等待完整的页面加载。相反,你可以尝试以下方法:

MyWebDriver.Navigate().GoToUrl(url2);
WebDriverWait wait = new WebDriverWait(dr, TimeSpan.FromMinutes(5));
element = wait.Until(ExpectedConditions.ElementToBeClickable(dr.FindElement(By.Name("User_Name"))));