使用PhantomJS在Angular.js应用程序中填写表单

时间:2014-05-16 14:19:56

标签: javascript angularjs forms testing phantomjs

我想使用PhantomJS测试AngularJS应用程序。第一步是用username字段填写登录表单(假设没有其他字段) 通常(在实际浏览器中)此字段由Angular控制(它具有ng-model属性),整个表单具有ng-submit属性。

所以在PhantomJS脚本中我做

  1. 输入用户名

    page.evaluate(function () {
        document.getElementsByName('username')[0].value = 'tester';
    });
    
  2. 截取屏幕截图,看看“测试人员”出现在输入

    page.render('myfile.jpg');
    
  3. 点击提交按钮:

    page.evaluate(function () {
        document.getElementById('go').click();
    });
    
  4. 再拍一张截图。

  5. 我看到的是点击按钮,但会显示消息,表明username的值为空。所以我猜模型没有正确更新 我还尝试使用jQuery设置这些值 - 结果相同。

    如何正确地将值输入到由angular?

    控制的字段中

1 个答案:

答案 0 :(得分:6)

PhantomJS提供sendEvent函数,可用于实现基本的sendKeys,但您需要首先关注元素:

function sendKeys(page, selector, keys){
    page.evaluate(function(selector){
        // focus on the text element before typing
        var element = document.querySelector(selector);
        element.click();
        element.focus();
    }, selector);
    page.sendEvent("keypress", keys);
}
sendKeys(page, "*[name=username]", "tester");

你可能想要查看似乎为Angular.js测试而定制的protractor或者使用更好的API在PhantomJS之上构建的CasperJS