【问题标题】:Why won't trigger events work in my phantomjs script?为什么触发事件在我的 phantomjs 脚本中不起作用?
【发布时间】:2013-05-15 18:51:18
【问题描述】:

我正在为我正在构建的单页向导样式表单编写一些自动化 ui 测试。我正在尝试在特定输入元素上模拟键,但 .trigger jquery 方法似乎不起作用。这就是我所拥有的。

var page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
page.settings.userAgent = 'SpecialAgent';



page.open('http://localhost:6543/signup', function (status) {

    if (status !== 'success') {
        console.log('Unable to access network');
    } 
    else {

        var test = page.evaluate(function () {

            //entersnumber
            $('#number').val('2223443');
            //keyup triggers ajax call validating that number is not already in the db
            $('#number').trigger('keyup');
            //the radio button is clicked
            $('input:radio[name=salesBroker]').filter('[value=0]').click();

        });

        page.render('thing.png')        
    }

    phantom.exit();
});

keyup 很重要,因为它会触发 ajax 调用来检查号码是否存在。当我查看 thing.png 图像时,没有显示验证错误。这意味着 keyup 没有被触发。

正在保存的图像:

如果 keyup 有效,应该会显示验证错误。

【问题讨论】:

  • 如果你使用原生的page.sendEvent 方法会发生什么,就像描述的here 一样?
  • 我看过了,但没有尝试过,但是 keyup 事件需要针对#number dom 元素。 page.sendEvent 似乎是针对不针对 dom 的一般事件。
  • Erm... 不能使用focus() 来定位此元素(如链接示例中所示)?
  • 谢谢,我觉得自己很笨。之前没看到链接。效果很好。
  • 好的,很高兴为您提供帮助。我应该把这个作为答案吗? )

标签: javascript phantomjs ui-testing


【解决方案1】:

看起来应该使用稍微不同的方法来触发与键盘相关的事件:首先将焦点设置在特定输入上,然后使用相关参数调用 page.sendEvent 方法:

page.evaluate(function() {
    $('#number').val('2223443').focus();
});
page.sendEvent('keyup', someKey);

顺便说一句,这是一个相当新的功能 - 它在 version 1.7 首次亮相。

【讨论】:

  • 事件触发能否在page.evaluate内完成。我需要在页面沙箱中进行多次交互,我不想每次都离开page.evaluate
猜你喜欢
  • 2017-12-23
  • 1970-01-01
  • 2011-09-19
  • 2023-03-28
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 2012-10-07
相关资源
最近更新 更多