我对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。
答案 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>
屏幕截图:
答案 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"))));