2014-02-18 27 views

回答

2

使用在你的第二个链接的例子,你可以将此转换为Javascript类类对象和自身的模块中封装:

var LoginPage = function(casper) { 
    this.casper = casper; 
}; 

LoginPage.prototype.typeUsername = function(username) { 

    this.evaluate(function() { 
     __utils__.findOne('input.username').value = username; 
    }); 
}; 

exports = LoginPage; 

,然后用它在你的测试:

var LoginPage = require("./LoginPage.js"); 
var login = new LoginPage(this); 
login.typeUsername("geoff"); 
+0

当我试图实现上述解决方案,我得到的错误:“错误:类型错误:对象不是构造函数(评估“新LoginPage (这个)')”。任何想法为什么?我完全按照它。 – user1523236

+0

首先确保'LoginPage.js'位于正确的位置(在我的示例中与需要它的脚本位于相同的目录中)。但我认为你的问题可能与CasperJS中的“补丁需求”有关。看到这个链接http://docs.casperjs.org/en/latest/upgrading/1.1.html#require-in-custom-modules。让我知道它是否有效,我会更新答案。 –

+0

嘿菲尔,不幸的是没有工作。我会玩弄它,看看我能否得到它的工作,如果没有,我会打开一个堆栈溢出的新问题,我可以发布我的测试和页面代码。 – user1523236

2

这里是页对象模式与CasperJS来测试登录功能的为例。页面对象是一个名为LoginPage.js:

function LoginPage() { 

    this.startOnLoginPage = function() { 
    casper.echo("base url is : " + casper.cli.options.baseUrl); 
    casper.start(casper.cli.options.baseUrl + '/login'); 
    }; 

    this.checkPage = function() { 
    casper.then(function() { 
     casper.test.assertUrlMatch('login', 'Is on login page'); 
     casper.test.assertExists('form[name="f"]', 'Login page form has been found'); 
    }); 
    }; 

    this.fillForm = function (username, password) { 
    casper.then(function() { 
     this.fill('form[name="f"]', { 
     'j_username': username, 
     'j_password': password 
     }, false); 
    }); 
    }; 

    this.submitForm = function() { 
    casper.then(function() { 
     this.click('form[name="f"] button[type="submit"]', 'Login submit button clicked'); 
    }); 
    }; 
} 

然后你就可以进行各种测试使用此页面对象。例如:

phantom.page.injectJs('LoginPage.js'); 
var loginPage = new LoginPage(); 

casper.test.begin('Should login', function (test) { 
    loginPage.startOnLoginPage(); 
    loginPage.checkPage(); 
    loginPage.fillForm('scott', 'rochester'); 
    loginPage.submitForm(); 
}); 

有关详细信息和完整的例子:http://jsebfranck.blogspot.fr/2014/03/page-object-pattern-with-casperjs.html