我正在使用量角器来测试Angular JS应用程序。 我想使用页面对象模式,我需要将一个函数导出到另一个模块。
这是我的page-login.js文件:
require("./login.spec.js");
var LoginPage = function ()
{
this.userName = element(by.id('login_form_user_input'));
this.password = element(by.id('login_form_password_input')) ;
this.loginButton = element(by.id('login_form_signin_button'));
this.loginText = element(by.css('#mainGlobalSearchBtn'));
this.loginError = element(by.xpath('html/body/div[1]/div[1]/div[1]/form/div/p'));
this.login = function (userName, password)
{
LoginPage.userName.sendKeys(userName);
LoginPage.password.sendKeys(password);
LoginPage.loginButton.click ();
browser.waitForAngular ();
};
};
exports.LoginPage = LoginPage;
现在在另一个名为login.spec.js的js文件中,我希望在同一个文件夹中调用login这个方法:
var util = require ('util');
require("./myconfig.js");
describe('Login', function() {
var loginPage = require("./login-page.js");
var ptor;
beforeEach (function ()
{
ptor = protractor.getInstance();
ptor.get(settings.winURL);
waits(2000);
//Delete cookies to avoid saving password or username
});
it('should not login : incorrect login details', function()
{
loginPage.login('incorrectusername','incorrectpassword');
expect(loginPage.loginError.getText()).toContain('Access denied');
});
当启动此代码时,量角器没有输入用户名并在相应的字段中进行了passwoed,我得到了这个控制台输出:
1) Login should not login : incorrect login details
Message:
TypeError: Object #<Object> has no method 'login'
Stacktrace:
TypeError: Object #<Object> has no method 'login'
at null.<anonymous> (C:\******\login.spec.js:34:20)
这是第34行抛出错误:
loginPage.login('incorrectusername','incorrectpassword');
如何在另一个模块中使用登录页面功能中的登录功能?
答案 0 :(得分:0)
require( './login-page.js' )
返回“class”函数。这意味着,要调用login
模块的loginPage
方法,您可以使用new
。例:
it('should not login : incorrect login details', function()
{
var page = new loginPage();
page.login('incorrectusername','incorrectpassword');
expect(page.loginError.getText()).toContain('Access denied');
});
答案 1 :(得分:0)
删除模块开头的require("./login.spec.js");
。测试在模块创建之前运行。
答案 2 :(得分:0)
量角器有一个叫做onPrepare的很棒的选项。你把它放在你的config.js文件中。您的onPrepare可以引用文件。
在此文件中,您可以拥有所需的所有变量和功能!
而不是&#34;这个&#34;你使用全球。
global.userName = element(by.id('login_form_user_input'));
global.password = element(by.id('login_form_password_input')) ;
global.loginButton = element(by.id('login_form_signin_button'));
global.loginText = element(by.css('#mainGlobalSearchBtn'));
global.loginError = element(by.xpath('html/body/div[1]/div[1]/div[1]/form/div/p'));
global.login = function (user, pw)
{
userName.sendKeys(user);
password.sendKeys(pw);
loginButton.click ();
browser.waitForAngular ();
};
然后在您的配置中执行:
//other config settings,
onPrepare: myvariables.js
在你的规范中,你不需要任何东西!
只需拨打你需要的东西(减去全球)
beforeEach (function () {
ptor = protractor.getInstance();
ptor.get(settings.winURL);
waits(2000);
//Delete cookies to avoid saving password or username
});
it('should not login : incorrect login details', function()
{
login('incorrectusername','incorrectpassword');
expect(loginError.getText()).toContain('Access denied');
});
你也可能想要为你的userName变量和userName arg和密码命名不同的东西。 (上面已修复)