我可以编写以下代码让WebDriver等待一段时间
new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfElementLocated(By.id("loginBox")));
但是,
实际上我向服务器发送了AJAX请求。在这里,我给了20毫秒等待。 20ms或500ms并不重要。如果响应超过给定时间(例如20ms)。然后我会例外地发现没有这样的元素。
那么有没有更好的方法让服务器等待?
任何人都可以帮助我吗?
提前致谢, Gnik
答案 0 :(得分:5)
您可以确保在继续执行此代码之前填充employeeName文本框 -
new WebDriverWait(driver,10).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
String text = driver.findElement(By.id("employeeName")).getText();
return !text.equals("");
}
});
现在,此代码检查employeeName文本框中的文本是否为空。如果它为空,则驱动程序等待10秒,或者如果由于AJAX调用而在文本字段中填充了一些数据,则继续执行。
如果这不起作用,您可以发布一些用于进行AJAX调用的代码。
答案 1 :(得分:0)
public void WaitForAjaxCompletion()
{
Stopwatch sw = new Stopwatch();
sw.Start();
try
{
while (sw.Elapsed.TotalSeconds < int.Parse(ConfigurationManager.AppSettings["TimeOut"]))
{
var ajaxIsComplete = (bool)((IJavaScriptExecutor)_webDriver).ExecuteScript("return window.jQuery != undefined && jQuery.active==0");
if (ajaxIsComplete)
break;
Thread.Sleep(100);
}
}
catch (Exception)
{
Console.WriteLine("Ajax call time out time {0} has passed ", ConfigurationManager.AppSettings["TimeOut"].ToString());
}
finally
{
sw.Stop();
}
}