我是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
答案 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。)
主要想法是找到一些条件或元素来轮询/等待,当页面没有准备好时,它始终存在。