0

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

   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"));         
    }

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

4

1 回答 1

0

对于延迟回复您,我深表歉意。

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

Ajax 回发(通常在从 Web 服务器获取数据时通过某种类型的旋转圆圈直观地显示)可能会导致 DOM 在 WaitUntilReady 将控制权返回给您的测试代码后很久才被修改。如果设置 Execution Delay > 500 使您的测试工作,我敢打赌您的应用程序正在执行 Ajax 回发导致 DOM 更改。

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

我希望这有帮助。

Cody 测试工作室支持官

于 2013-04-24T19:52:30.957 回答