Watin触发的onchange事件中的对话框 - c#

我有一个带有下拉菜单的网站。当用户更改下拉列表时,将出现一个确认对话框,询问他们是否要更改它。如果他们单击“是”,它将继续,否则保持不变。很标准的东西。

但是,当我要编写Watin单元测试时,这很痛苦。

我的html是ID为_stateList的简单选择列表

这是我的javascript:

$(function() {
    $('#_stateList').change(function() {
        if(confirm('Are you sure you wish to change your state?'))
            //do something 
    });
});

因此,在Watin中,我有一个扩展方法来触发change事件:

public static void SelectWithChangeEvent(this SelectList selectList, string text)
{
    selectList.Select(text);
    string js = string.Format("$('#{0}').change();", selectList.Id);
    InternetExplorer.Browser.Eval(js); //This is where it hangs
}

该扩展方法在这里称为:

ConfirmDialogHandler dialogHandler = new ConfirmDialogHandler();
using (new UseDialogOnce(InternetExplorer.Browser.DialogWatcher, dialogHandler))
{
    PageMapping.StateDropdown.SelectWithChangeEvent(stateName); //It never gets past here
    dialogHandler.WaitUntilExists(5);
    if(dialogHandler.Exists())
        dialogHandler.OKButton.Click();
    else
        Assert.Fail("No Dialog Appeared");
}

我真的希望这不是太多的代码,但是我根本无法弄清楚如何处理在更改事件而不是单击事件中触发的对话框。在Watin中,按钮具有ClickNoWait()。 Select有类似的东西吗?还是评估?还是说根本不等待的设置?

任何帮助表示赞赏。

参考方案

将您的JavaScript包装在setTimeout(function(){})中;将允许Eval异步返回。

public static void SelectWithChangeEvent(this SelectList selectList, string text) 
{ 
    selectList.Select(text); 
    string js = string.Format("setTimeout(function() {{$('#{0}').change();}}, 5);", selectList.Id); 
    InternetExplorer.Browser.Eval(js); //This is where it hangs 
} 

https://developer.mozilla.org/en/DOM/window.setTimeout

jQuery val函数在隐藏字段上不起作用? - javascript

这是我的HTML代码:<div style='display:none;' id='allformid'> <div> <form action='#'> <input type='text' name='name' …

jQuery UI模式窗体对话框将数据保存到数据库 - c#

我正在使用JQuery UI Modal Form Dialog 并尝试将旧数据和新数据保存到数据库中。我正在使用C#(后端)和ASP.NET前端。我可以删除新条目,只是不知道如何保存数据。我尝试过搜索拉入HTML数据的方法,但无法消除错误。还不确定是否有更好的方法吗?这是我的JSFiddlefunction addUser() { 我需要找出一种从表中获取…

jQuery Json + jQuery onChange - php

我正在使用php与mysql数据库进行通讯,然后使用json_encode对关联数组进行编码。我知道这很有效,我可以直接调用php并查看json结果。使用jQuery时,我在下拉菜单上使用onChange来调用php函数并获取结果。我认为我在使用jQuery和json时遇到问题,但是我浏览了多个帖子,但找不到很好的答案。这是我正在使用的代码。我如何到达jso…

jQuery File Upload插件-空文件上传结果 - php

在过去的几天里,我一直在使用this插件进行自定义,并将其设置为可以完全按照我的站点要求工作。我在本地服务器上一切正常,没有错误/错误。但是,当我尝试将其上传到我的Plesk服务器时,没有文件显示在加载状态(即使目标文件夹中有图像),并且当我尝试上传im时,出现“空文件上传结果”错误。奇怪的是,即使显示了错误,文件上传似乎仍然起作用,并且相关的图像出现在文件…

jquery.post()和php - php

我正在使用$()。post和php来更改的内容。脚本成功执行-萤火虫清楚地表明textarea标记之间的文本已更改,并且我的小警报触发。但是,用户看不到更改。在Firefox中根本不会发生更改,而在IE中,textarea最多可延迟10秒更新。这是我正在使用的jQuery:$(document).ready(function() { $('#pv_…