gpt4 book ai didi

jquery - 使用 WatiN,我想等待 jQuery 事件

转载 作者:行者123 更新时间:2023-12-03 22:38:52 26 4
gpt4 key购买 nike

我希望有人已经做到了这一点。我有一些自定义 jQuery 修改,它们利用 jQuery 事件系统来启动某些事件进行处理。我希望能够针对这些问题进行自动化测试。

有没有人研究过从 WatiN 到 jQuery 的更好的结合?我看过一些关于 jQuery 选择器传递的帖子,以及这里关于等待给定文本更改的帖子...如果有人添加 jQuery 选择和事件支持,那就太酷了...甚至 document.getElementsBySelector可能会很好。

最佳答案

我不知道这是否是您所期望的,但我花了一些时间进行调查,并找到了问题的解决方案:有了 WatiN,我想等待 jQuery 事件。

目标是用 C# 编写:

Browser.WaitForEvent("#link", "onclick");

我编写了一个测试页面(在 http://www.sp4ce.net/debug.html 上提供),当您单击按钮时,它会触发链接上的 onclick 事件。

然后我写了扩展方法.WaitForEvent

public static void WaitForEvent(this Browser browser, string selector, string eventname)
{
using (EventMonitorWatcher monitor = new EventMonitorWatcher(browser, selector, eventname))
{
int timeWaited = 0;
var maxTimeWait = Settings.WaitForCompleteTimeOut * 1000;
do
{
Thread.Sleep(Settings.SleepTime);
timeWaited += Settings.SleepTime;
}
while (!monitor.IsEventCalled() && timeWaited < maxTimeWait);
}
}

此方法使用 EventMonitorWatcher 来检查事件是否已被调用。

public class EventMonitorWatcher : IDisposable
{
private readonly Browser _browser;
private readonly string _selector;
private readonly string _eventname;

public EventMonitorWatcher(Browser browser, string selector, string eventname)
{
_browser = browser;
_selector = selector;
_eventname = eventname;
_browser.Eval(string.Format("startEventMonitor('{0}', '{1}')", _selector, _eventname));
}

public bool IsEventCalled()
{
string result = _browser.Eval(string.Format(
"isEventCalled('{0}', '{1}')", _selector, _eventname));
return result == "true";
}

public void Dispose()
{
_browser.Eval(string.Format("stopEventMonitor('{0}', '{1}')", _selector, _eventname));
}
}

此监视器使用三个 javascript(jquery 支持)方法来启动监视、停止监视并检查事件是否已被调用。

startEventMonitor = function(selector, event) {
$(selector).data('eventMonitorResult', false);
var eventMonitorHandler = function() {
$(selector).data('eventMonitorResult', true)
};
$(selector).data('eventMonitorHandler', eventMonitorHandler);
$(selector).bind(event, eventMonitorHandler);
};

stopEventMonitor = function(selector, event) {
$(selector).undbind(event, $(selector).data('eventMonitorHandler'));
$(selector).data('eventMonitorResult', false);
};

isEventCalled = function(selector, event) {
return $(selector).data('eventMonitorResult');
};

现在,您需要在运行浏览器时将此 JavaScript 作为字符串注入(inject)您的页面。

[Test]
public void Test()
{
using(var browser = new IE("http://www.sp4ce.net/debug.html")
{
browser.Eval(JavaScript);
browser.WaitForEvent("#link", "onclick");
}
}

在这个测试中,当你点击“click”按钮时,测试应该直接结束,并且你的浏览器被关闭;

关于jquery - 使用 WatiN,我想等待 jQuery 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4742279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com