【问题标题】:Angularjs - simulate touch event in Protractor e2e testAngularjs - 在量角器 e2e 测试中模拟触摸事件
【发布时间】:2014-05-18 10:13:23
【问题描述】:

我将 Protractor 与 Jasmine 一起用于我的移动 Angularjs 应用程序。我想在特定元素上测试触摸事件(touchStart / touchEnd 等...)。比如:

it('should play video', function(){
    var poster = by.css('.video-poster');
    element(poster).??? //Simulate touch event here
});

【问题讨论】:

    标签: angularjs jasmine protractor angularjs-e2e


    【解决方案1】:

    更新:

    由于 Protractor 返回的是 Selenium 元素查找器而不是角度元素,因此您必须使用 executeScript() 函数对其调用 JavaScript 方法,例如:

    var poster = element(by.css('.video-poster'));
    browser.executeScript(
        'angular.element(arguments[0]).triggerHandler("touchstart");', poster);
    

    原文:

    您应该能够触发事件,例如:

    element(poster).triggerHandler("touchstart");
    

    如果您需要在事件对象中添加更多内容,您可以创建一个类似这样的答案:jQuery Trigger Event in AngularJS Karma Test

    注意:

    Angular 似乎没有像 jQuery 那样为你提供trigger() 方法,只有triggerHandler(),根据https://docs.angularjs.org/api/ng/function/angular.element

    【讨论】:

    • TNX 的答案。这对我不起作用。我得到: TypeError: Object # has no method 'trigger'。这可能与这是一个 Protractor 测试并且该元素不是常规 jQuery 元素这一事实有关
    • 嘿,对不起,评论不完整时我没有跟进。到目前为止,您希望已经通过它,但如果没有,请查看更新版本是否有帮助。
    • 嘿。 tnx 再次寻求答案。 triggerHandler 导致了类似的错误:TypeError: Object # has no method 'triggerHandler'。我猜 element(by.css('.video-poster')) 也不是 jqLit​​e 元素...
    • 哎呀,原谅我的无知。是的,它是一个 Selinium 元素查找器github.com/angular/protractor/blob/master/docs/…
    • 谢谢你!这是有效的(我必须在您上次更新中将“浏览器”添加到“executeScript”)。
    猜你喜欢
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多