我怎样才能让Selenium WebDriver等一段时间?

时间:2012-08-13 05:52:31

标签: ajax selenium webdriver selenium-webdriver

我可以编写以下代码让WebDriver等待一段时间

new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfElementLocated(By.id("loginBox")));

但是,

实际上我向服务器发送了AJAX请求。在这里,我给了20毫秒等待。 20ms或500ms并不重要。如果响应超过给定时间(例如20ms)。然后我会例外地发现没有这样的元素。

那么有没有更好的方法让服务器等待?

任何人都可以帮助我吗?

提前致谢, Gnik

2 个答案:

答案 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();
            }
        }