+module AssertDomEvent
+ # Yield the supplied block, then wait for an event to arrive at a
+ # DOM element.
+ def assert_triggers_dom_event events, target='body'
+ magic = 'received-dom-event-' + rand(2**30).to_s(36)
+ page.evaluate_script <<eos
+ $('#{target}').one('#{events}', function() {
+ $('body').addClass('#{magic}');
+ });
+eos
+ yield
+ assert_selector "body.#{magic}"
+ page.evaluate_script "$('body').removeClass('#{magic}');";
+ end
+end
+