我在视图中通过JavaScript向我的服务器提交表单,以便启动服务器端作业。视图通过调用JavaScript回调检测到作业已完成。服务器和客户端之间JavaScript通信的确切细节应该超出了这个问题的范围(我认为),但如果您需要更多详细信息,请告诉我。如果有帮助,我使用类似Comet的SignalR库,而不是标准的Ajax。
现在,我想在Watin(2.1.0)中测试这个视图。如何让Watin等到服务器端作业完成处理?我是否应该在检测到作业完成后更新视图中的属性?
答案 0 :(得分:3)
取决于你的js和html代码的外观。这不是那么简单。尝试使用WaitUntil...
方法。
假设在作业完成后,会出现ID为foo
的新div元素。等待使用此代码:
ie.Div("foo").WaitUntilExists();
但有时它并不那么简单。让我们说,在作业完成后,表格的内容会发生变化,即。将删除旧行,并显示新行。如果是这样的话:
//Get cell reference
var cell = ie.Table("bar").OwnTableRow(Find.First()).OwnTableCell(Find.First());
var cellRef = cell.GetJavascriptElementReference();
//Change text of that cell using javascript. jQuery could be used if it's used on that page
//If you are 100% sure, that something will change, just assign cell.Text to text. If so, you don't even
//need cellRef
var text = "Dummy text or random or whatever";
ie.RunScript(cellRef + ".childNodes[0].nodeValue = '" + text + "'");
//TODO:
//Do something here to fire ajax request
//Wait until table will be updated, ie. wait until first cell will not contains assigned dummy text.
//This could be done in many ways.
ie.Table("bar").WaitUntil(t => t.OwnTableRow(Find.First()).OwnTableCell(Find.First()).Text != text);
//or just:
//cell.WaitUntil(c => c.Text != text), but maybe it will not work in your case
无论如何,这只是一些提示。这几乎总是很痛苦,所以不要告诉我你的实际代码;)