Javascript 页面对象设计模式量角器
我正在尝试将我的量角器代码移动到一个页面对象设计模式,我是从我的登录测试开始的,请在下面找到我的代码 当运行我的测试时,量角器加载页面bu失败。当尝试将文本输入用户名密码输入时,我尝试使用by.id和by.input定位用户名文本区域,但两者都不起作用。 还请注意,在使用页面对象模式量角器之前运行登录测试时,可以找到文本区域 page-login.js:Javascript 页面对象设计模式量角器,javascript,angularjs,protractor,Javascript,Angularjs,Protractor,我正在尝试将我的量角器代码移动到一个页面对象设计模式,我是从我的登录测试开始的,请在下面找到我的代码 当运行我的测试时,量角器加载页面bu失败。当尝试将文本输入用户名密码输入时,我尝试使用by.id和by.input定位用户名文本区域,但两者都不起作用。 还请注意,在使用页面对象模式量角器之前运行登录测试时,可以找到文本区域 page-login.js: var loginPage = function () { this.userName = element(by.input('us
var loginPage = function ()
{
this.userName = element(by.input('userName'));
this.password = element(by.input('userPassword')) ;
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 ();
}
};
it('should not login : incorrect login details', function()
{
var loginPage = new loginPage();
loginPage.login('incorrectusername','incorrectpassword');
expect(loginPage.loginError.getText()).toContain('Access denied');
});
控制台输出:
1) Login should not login : incorrect login details
Message:
TypeError: undefined is not a function
Stacktrace:
TypeError: undefined is not a function
at null.<anonymous> (C:\Users\orsyp\DUX\k_workload_ar\ui\e2e\login.spec.js:3
1:26)
at C:\Users\orsyp\DUX\k_workload_ar\ui\node_modules\grunt-protractor-runner\
node_modules\protractor\jasminewd\index.js:54:12
at webdriver.promise.ControlFlow.runInNewFrame_ (C:\Users\orsyp\DUX\k_worklo
ad_ar\ui\node_modules\grunt-protractor-runner\node_modules\protractor\node_modul
es\selenium-webdriver\lib\webdriver\promise.js:1445:20)
at webdriver.promise.ControlFlow.runEventLoop_ (C:\Users\orsyp\DUX\k_workloa
d_ar\ui\node_modules\grunt-protractor-runner\node_modules\protractor\node_module
s\selenium-webdriver\lib\webdriver\promise.js:1310:8)
at wrapper [as _onTimeout] (timers.js:252:14)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
1)不应登录:不正确的登录详细信息
信息:
TypeError:undefined不是函数
堆栈跟踪:
TypeError:undefined不是函数
在空。(C:\Users\orsyp\DUX\k\u workload\u ar\ui\e2e\login.spec.js:3
1:26)
位于C:\Users\orsyp\DUX\k\u workload\u ar\ui\node\u modules\grunt量角器runner\
node\u modules\dragrator\jasminewd\index.js:54:12
在webdriver.promise.ControlFlow.runInNewFrame(C:\Users\orsyp\DUX\k\u worko)上
ad\U ar\ui\node\U模块\grunt量角器运行器\node\U模块\Degrator\node\U模块
es\selenium webdriver\lib\webdriver\promise.js:1445:20)
在webdriver.promise.ControlFlow.runEventLoop(C:\Users\orsyp\DUX\k\u workloa
d\U ar\ui\node\U模块\grunt量角器运行器\node\U模块\Gradutor\node\U模块
s\selenium webdriver\lib\webdriver\promise.js:1310:8)
at包装器[as_onTimeout](timers.js:252:14)
at Timer.listOnTimeout[as onttimeout](timers.js:110:15)
如果我遵循这个示例,您应该添加var loginPage=new loginPage()编码>进入it
功能
it('should not login : incorrect login details', function() {
//add this line
var loginPage = new loginPage();
loginPage.login('incorrectusername','incorrectpassword');
expect(loginPage.loginError.getText()).toContain('Access denied');
});
我不明白你的module.exports=newloginpage()代码>行。在页面对象示例中,使用var angularHomepage=new angularHomepage()
进入it
函数。很抱歉,我的测试仍然失败(忘记配置conf.js)我已经编辑了我的代码和我遇到的错误。你有stacktrace来知道哪一行抛出了这个错误吗?我想你没有复制整个login.spec.js,所以我无法确定哪一行是login.spec.js:43:25
::我想你的登录功能有问题,但我不确定。顺便说一句,在this.login=function(){…}
我添加了整个login.spec.js代码之后缺少分号。此解决方案修复了原始问题吗?:)
const log = Factory.getLogger("Page.DashDashboardPage");
export class DashDashboardPage extends PageBase{
private lblDashPageTitle : any;
private lnkDashMyDashboard : any;
private btnDashNewTeamDashboard : any;
private txtDashSearchRecord : any;
constructor(){
super();
const element = Elements.DashDashboardPage;
this.lblDashPageTitle = super.findLocators(element.lblDashPageTitle.findBy,element.lblDashPageTitle.value);
this.lnkDashMyDashboard = super.findLocators(element.lnkDashMyDashboard.findBy,element.lnkDashMyDashboard.value);
this.btnDashNewTeamDashboard= super.findLocators(element.btnDashNewTeamDashboard.findBy,element.btnDashNewTeamDashboard.value);
this.txtDashSearchRecord = super.findLocators(element.txtDashSearchRecord.findBy,element.txtDashSearchRecord.value);
}
/**
* Get: load dash-dashboard base url
* @returns {DashDashboardPage}
*/
public get(): DashDashboardPage{
ConfigRoute.visit_page('http://op.xxx-tek.com/test/');
log.info("Step: navigate to http://op.xxx-tek.com/test/ [:get:]");
return new DashDashboardPage();
}
/**
* Validate: verify dash-board page title
* @param title
* @returns {DashDashboardPage}
*/
public check_And_Validate_dash_page_title(title: string): DashDashboardPage{
this.Helper_Assertion.expectToEqual(this.lblDashPageTitle,title);
log.info("Validate: Verify dash page tile [:check_And_Validate_dash_page_title:]");
return new DashDashboardPage();
}
}