与沃特一起,我';我想等待jQuery事件

与沃特一起,我';我想等待jQuery事件,jquery,automation,watin,Jquery,Automation,Watin,我希望有人做了这件事。我有一些自定义jQuery修改,它们利用jQuery事件系统来启动某些事件进行处理。我希望能够对这些问题进行自动化测试 从WatiN到jQuery,有人做过更好的搭配吗?我在jQuery选择器的passthrough上看到了一些帖子,也看到了一篇关于等待给定文本更改的帖子。。。如果有人添加jQuery选择和事件支持,那就太酷了。。。即使是document.getElementsBySelector也可能不错。我不知道这是否是您所期望的,但我花了一些时间进行调查,我找到了一个

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


从WatiN到jQuery,有人做过更好的搭配吗?我在jQuery选择器的passthrough上看到了一些帖子,也看到了一篇关于等待给定文本更改的帖子。。。如果有人添加jQuery选择和事件支持,那就太酷了。。。即使是document.getElementsBySelector也可能不错。

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

目标是用C#写:

我编写了一个测试页面(在上提供),当您单击按钮时,它会触发链接上的
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);
   }
}
此监视器使用三种javascript(jquery支持)方法启动监视、停止监视并检查事件是否已被调用

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));
   }
}
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作为字符串注入页面

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

在本测试中,当您单击“单击”按钮时,测试应直接结束,并关闭浏览器

为什么不注入一些附加到要侦听的事件的javascript呢。在事件触发时调用的javascript事件代码中,您可以向DOM添加一个元素,其中包含您感兴趣的结果。例如,创建一个Div,并使用要检查的输出设置innerHtml。给Div一个唯一的ID

基本流程:

  • RunScript(javascript\u此处\u至\u附加\u至\u您感兴趣的\u事件\u) 让我们假设在触发事件时,注入的代码创建了一个Id为=“my\u event\u result”的Div

  • 执行触发验证代码的操作(例如输入正确/错误的值) 示例:browser.TextField(textFieldIdWithValidation).Typetext(“某些值”)

  • 等待Div出现: browser.Div(“我的事件结果”).WaitUntilExists()

  • 断言div中的值: bool result=browser.Div(“我的事件结果”).Text==“预期的测试”

嗯,,
Jeroen

我不希望这是正确的答案,因为我没有时间查看WatiN,只有几条注释可以帮助您完成任务,第一个猴子补丁jQuery:

因为所有jQuery事件都是通过函数触发器触发的

var _trigger = jQuery.prototype.trigger;
jQuery.prototype.trigger = function () {
      _trigger.apply( this, arguments );
      alert( Array.prototype.join.call( arguments, '-' ) );
}
这将使您的页面在每次触发某个事件时(以带“-”分隔符的字符串形式)提醒所有给定的参数,通常第一个参数是事件。WatiN应该有一些能够捕获警报的功能,如果没有的话,我建议放弃它,使用watij或其他什么,我个人建议

此外,如果您对触发事件的原因感兴趣,则在上述函数中,
将指向:)

您应该查看的内容:


你到底想做什么?我的web测试在每个页面上都使用了一个jQuery代码,该代码允许使用两种方法扩展Watin浏览器,一种用于css选择器,另一种用于waitForAjaxComplete(在jQuery端使用了一些绑定.AjaxStart和.AjaxStart)。我相信我能帮助你。那么,您有没有一个例子来说明您想在WatiN端做什么呢?在jQuery中,我扩展了jQuery验证框架,并且有几个事件我想听听服务器端。。。。当一个表单的“validation.success”事件触发时,我想执行一个waitfor服务器端监听该事件,当它执行文件时,检查结果。。。与“验证失败”等相同。。。这将允许我从浏览器的角度测试验证结果。另一个例子是使某些自适应结果返回为JSON,而不是HTML。。。在本质上,我希望在浏览器打开、等待事件发生时,使用Assert。。。可以测试的语句。监听基于jQuery的事件。你想要的是非常酷的,你真的想要对JavaScript有一个完整的了解。我不认为WatiN现在允许这样的事情,你必须编写所有的javascript代码来做任何事情。我想,我们应该写一封信“在每个页面上注入的框架,允许深入JS并测试我们想要的任何东西。这真的很酷。。。理想情况下,我希望能够作为调用事件的侦听器,同时侦听给定事件并分析结果。在我的例子中,它不是一个浏览器事件,而是一个自定义jQuery事件。。不确定这是否可能。
var _trigger = jQuery.prototype.trigger;
jQuery.prototype.trigger = function () {
      _trigger.apply( this, arguments );
      alert( Array.prototype.join.call( arguments, '-' ) );
}