Tra*_*er1 7 jquery automation watin
我希望那里有人做到了这一点.我有一些使用jQuery事件系统的自定义jQuery修改,以便启动某些事件进行处理.我希望能够针对这些进行自动化测试.
有没有人在从WatiN到jQuery的更好的配合?我在jQuery选择器上看到了一些关于直通的帖子,以及关于等待给定文本更改的帖子...如果有人添加了jQuery选择和事件支持,那就太酷了...甚至是document.getElementsBySelector可能很好.
我不知道它是否符合您的期望,但我有时间进行调查,我得到了一个问题的解决方案:使用WatiN,我想等待jQuery事件.
目标是用C#编写:
Browser.WaitForEvent("#link", "onclick");
Run Code Online (Sandbox Code Playgroud)
我写了一个测试页面(可在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);
}
}
Run Code Online (Sandbox Code Playgroud)
此方法使用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));
}
}
Run Code Online (Sandbox Code Playgroud)
此监视器使用三个javascript(jquery powered)方法启动监视,停止监视并检查是否已调用该事件.
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');
};
Run Code Online (Sandbox Code Playgroud)
在这里,您需要在运行浏览器时将此javascript作为字符串注入您的页面.
[Test]
public void Test()
{
using(var browser = new IE("http://www.sp4ce.net/debug.html")
{
browser.Eval(JavaScript);
browser.WaitForEvent("#link", "onclick");
}
}
Run Code Online (Sandbox Code Playgroud)
在此测试中,当您单击"单击"按钮时,测试应直接结束并关闭浏览器;