我有一个选择框
<select id="myselectbox">
<option value='a'>First option</option>
<option value='b'>Second option</option>
</select>
Run Code Online (Sandbox Code Playgroud)
和jquery
$('#myselectbox').change(function() {
...
});
Run Code Online (Sandbox Code Playgroud)
还有一个WatiN测试
SelectList list = Browser.SelectList(Find.ById("myselectbox"));
list.Select("First option");
Run Code Online (Sandbox Code Playgroud)
在IE中,这会更改选择框,但不会触发jquery事件处理程序.我知道围绕IE中的change()事件处理程序的许多问题.所以我尝试在测试中添加一些东西来强制事件发生:
list.Blur();
list.Keypress('\r');
list.Click();
Run Code Online (Sandbox Code Playgroud)
我还尝试在选择框外面单击以移除焦点,希望这会触发事件.
有任何想法吗?
Mat*_*all 17
您可以手动触发事件:
$('#myselectbox').change();
Run Code Online (Sandbox Code Playgroud)
您正在触发的其他JavaScript事件不会更改值,因此它们不会触发change事件.
Rex*_*ler 15
关于Matt Ball的答案和OP的其他步骤,我将以下扩展方法添加到测试助手类中.
using WatiN.Core;
namespace Some.Test.Project
{
public static class WatiNExtensions
{
public static void ForceChange(this Element e)
{
e.DomContainer.Eval("$('#" + e.Id + "').change();");
}
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,无论如何,我已经成功地做到了:
SelectList list = Browser.SelectList(Find.ById("myselectbox"));
list.Select("First option");
list.ForceChange();
Run Code Online (Sandbox Code Playgroud)
好吧,这是一个很小的便利,但我发现它很有用.无论如何,我为OP和答案赞成!
当页面上有两个具有相同ID的元素时,使用JQuery ID Selector会产生问题.以下代码应深入到相应的WaitN元素
Element.DomContainer.Eval(String.Format("$({0}).change();", Element.GetJavascriptElementReference()));
Run Code Online (Sandbox Code Playgroud)