WaitUntilReady()未按预期工作

时间:2013-04-19 16:10:46

标签: telerik automated-tests

我正在使用Telerik.Testing.Framework.2012.2.1527 我使用以下代码。我一直对“findElem”无效。但是当我处于调试模式时它很好。 WaitUntilReady();对我来说没有按预期工作。在我的场景中,我不应该使用waitforelement并指定timeout。

   public bool IsPresentbyInputId(string findCondition)
    {
            Manager.ActiveBrowser.WaitUntilReady();
            Element findElem = Manager.ActiveBrowser.Find.ByExpression(new HtmlFindExpression("tagname=input", "id=" + findCondition));
            Manager.ActiveBrowser.WaitUntilReady();
            return findElem != null && !findElem.Attributes.Any(s => s.Value.Contains("display:none"));         
    }

你能让我知道我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:0)

我为延迟回复你道歉。

要记住的一件事是WaitUntilReady正在监控浏览器的“Ready”标志。浏览器完成主HTML页面(例如MyPage.html)以及任何引用的资源(图像,css文件,js文件等)后,就会设置此标志。它没有考虑在页面加载后由于JavaScript获得控制而启动的任何Ajax回发。

Ajax回发(通常在从Web服务器获取数据时通过某种类型的旋转圆圈直观显示)可能导致在WaitUntilReady将控制权返回给测试代码后很长时间内修改DOM。如果设置执行延迟> 500让你的测试工作,我的打赌你的应用程序正在做Ajax Postbacks导致DOM改变。

有两种方法可以克服这个特殊问题: 1)在WaitUntilReady()调用之后立即添加一个ActiveBrowser.WaitForAjax()调用。这将导致您的测试等待,直到关闭与Web服务器的所有Ajax连接。 2)在WaitUntilReady之后添加WaitForElement。例如: ActiveBrowser.WaitForElement(new HtmlFindExpression(“id = maindiv”),30000,false); 这将使您的代码在继续之前等待与指定属性匹配的元素。

我希望这会有所帮助。

科迪 测试工作室支持人员