C# - Selenium - 如何等待页面完全加载

时间:2018-03-09 10:59:31

标签: c# selenium selenium-webdriver pageload webdriverwait

由于我的测试网站上的同步速度很慢,我需要等待页面直到满载为止。我尝试了几个等待的元素:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(50));
wait.Until(ExpectedConditions.ElementExists(By.XPath("//input[@placeholder='First Name']"))).SendKeys("FirstName");

此外,我尝试使用JavaScript方法:

public static void WaitForLoadOriginal(IWebDriver driver)
{
    IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
    int timeoutSec = 15;
    WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0, 0, timeoutSec));
    wait.Until(wd => js.ExecuteScript("return document.readyState").ToString() == "complete");
}

这是我尝试选择的代码

<select name="question" id="question1" type="text" class="form-control ng-pristine ng-empty ng-invalid ng-invalid-required ng-touched" ng-required="true" 

这是我得到的例外:

WebDriver.Support.dll中出现“OpenQA.Selenium.NoSuchElementException”类型的异常,但未在用户代码中处理$ exception {“无法找到带索引的选项:1”} OpenQA.Selenium.NoSuchElementException

如果我放入Thread.Sleep(20000),它可以正常工作。但我不想使用静态等待。要么我没有正确使用上述方法,要么它们不起作用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

根据您的代码块,您尝试沿 WebDriverWait 而不是 ExpectedConditions 子句调用 SendKeys()作为 ElementExists < / em>您可以使用ElementToBeClickable条款,如下所示:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//input[@placeholder='First Name']"))).SendKeys("FirstName");

答案 1 :(得分:0)

要执行等待页面加载的操作,这段代码对我来说很好。

protected void WaitForPageLoad()
    {
        wait.Until(driver=>((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));
    }

谢谢