4

我可以编写以下代码来要求 WebDriver 等待某个时间

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

但,

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

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

谁能帮我?

提前致谢, Gnik

4

2 回答 2

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 调用的代码。

于 2012-08-13T07:30:04.543 回答
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();
            }
        }
于 2013-12-04T21:30:41.690 回答