casperjs测试登记表

时间:2014-04-21 10:14:26

标签: javascript testing casperjs

我的页面中有一个表单,用户希望在网站内注册。注册后,我在数据库中插入用户创建激活密钥并发送电子邮件,直到用户没有点击电子邮件内的链接,并且他无法在网站内登录。

使用CasperJS我想测试这个功能,fillForm还可以,但是如何测试激活密钥?

我曾想过用激活密钥创建隐藏的输入(只有在TEST模式下才生成!)并使用getFieldValue函数检索此值。

这是正确的方法还是有更好的模式?

这是我的casperjs测试,用于在注册后检索激活密钥(我创建了一个隐藏激活码的输入):

view            = 'users/registered';

casper
.start(webroot + view)
.then(function() {
    __utils__.log("Retrieving data from input activation-key");
    activationKey = __utils__.getFieldValue('activation-key');
}).then(function() {
    __utils__.log("Activating account with the key " + activationKey);

}).then(function(){
    this.evaluate(function() {
        __utils__.log("Activating account with the key " + activationKey);
        window.location = webroot + 'users/activate/' + activationKey;
    }); 
}).then(function(){
    this.echo(this.getCurrentUrl());
});

casper.run(function() {
    this.echo('test registeration successful!').exit();
});

casper.viewport(page.width, page.height);

casper.test.done();

1 个答案:

答案 0 :(得分:1)

我设法做了我想要的注册,它可以帮助你:CasperJS- Register on a site and validate the mail sent on Gmail -for both slimer and phantom-

在我使用激活码进行一些抓取之前,对于手动激活(纯JS,这里没有jQuery,我不想在gmail DOM环境中注入JQuery):

this.waitForSelector("div.msg",function(){
            this.test.assertSelectorHasText("a","Activation message");
            //var code declared in the main scope
            code = this.evaluate(function(){
                var strongs = document.getElementsByTagName('strong')
                    ,i
                    ,l = strongs.length
                    ;
                    for (i = 0; i < l; ++i) {
                        if(strongs[i].textContent === "activation code:"){
                            //get back the code in DOM context -> split to get back only what I want
                            return (strongs[i].parentNode.textContent.split(' ')[2]);
                        }
                    }
            });
            this.echo("code : " + code,"INFO");
        });