人们如何编写涉及触发一系列UI事件的角度e2e测试?场景的异步性质似乎使其变得困难。
详:我正在为一个应用程序编写测试,该应用程序具有许多键处理功能,以帮助加快专业表单的编辑速度。我已经将键盘扩展组合到场景 dsl(见下文),但只有测试的第一个键事件有任何影响。即
keyboard().keydown(null, 'keydown', 40, false, true); // ctrl-down
expect(element('*:focus').text()).toEqual('00:04');
keyboard().keydown(null, 'keydown', 40, false, true); // ctrl-down
expect(element('*:focus').text()).toEqual(''); // but equals 00:04
第二个键控不执行任何操作,因为它找不到将键路由到的 *:focus(尽管屏幕上有一个)。混乱。
angular.scenario.dsl('keyboard', function() {
var chain = {};
chain.keydown = function(selector, keyEvent, keyCode, shift, ctrl) {
return this.addFutureAction("keyEvent", function($window, $document, done) {
var jQuery = $window.$;
var e = jQuery.Event(keyEvent);
e.keyCode = keyCode; // # Some key code value
e.altKey = false;
e.ctrlKey = ctrl;
e.shiftKey = shift;
if (selector == null) selector = '*:focus';
var j = jQuery(selector);
if (j == null) j = jQuery('body');
j.trigger(e);
done();
});
};
return function() {
return chain;
};
});
用户似乎已经放弃了这个问题,但正如我所说,这可能是他的keydown
事件处理程序的问题。
在这里用完全相同的代码制作了一个 Plnker,一切都按预期工作。