情况是,我有一个页面,该页面使用一些AJAX调用从服务器检索内容,然后将这些结果放入另一个脚本生成的html块中。问题是,我无法用watin选择这块新html的任何元素。可以在浏览器中查看它,当我按F12键并浏览代码时会显示出来,但WatiN仍然看不到它。

这是因为WatiN仅扫描页面的html源,而不扫描HTML的当前版本吗?我认为类似的情况是:

html-

<script type="text/javascript">
    $('#foo').html("gak");
</script>
...
<div id="foo">bar</div>


然后当我尝试断言-

Assert.IsTrue(browser.Div("foo")).ContainsText("gak"));


它将返回false。

有什么想法吗?还是只写一堆jQuery和browser.Eval()的最佳选择?

最佳答案

我测试了AJAX页面很多。关键是要等到asnyc回发完成。如果你有

Assert.IsFalse(browser.Div("foo")).ContainsText("gak");
browser_action_that_changes_bar_to_gak
>> Here you need to wait <<
Assert.IsTrue(browser.Div("foo")).ContainsText("gak");


在“等待”部分,您可以执行System.Threading.Thread.Sleep(numberOfMilliseconds)http://pushpontech.blogspot.com/2008/04/ajax-issues-with-watin.html

我将JavaScript放在基类的辅助函数中的Eval()中,而不必像文章一样将其注入到每个页面中。



我的基本页面类包含:

public bool IsInAsyncPostBack()
{
    const string isAsyncPostBackScript = "Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()";
    return bool.Parse(this.Document.Eval(isAsyncPostBackScript));
}


然后,我的WaitForAsyncPostback与链接的帖子基本相同,但是我增加了最长等待时间。在去Page类(很棒;去做!)之前,我在其他地方做了这些静态函数,它也起作用。

关于testing - 如何让WatiN扫描动态加载的内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7276526/

10-10 16:28