[英]Can't use page objects pattern with protractor
I'm following a few examples that i've found to start to organize my tests using page objects. 我正在跟踪一些示例,发现这些示例开始使用页面对象来组织测试。
For example: https://github.com/juliemr/ng-page-e2e/blob/master/test/angularsite_page.js http://codingsmackdown.tv/blog/2014/07/08/using-page-objects-in-angularjs-protractor/ 例如: https : //github.com/juliemr/ng-page-e2e/blob/master/test/angularsite_page.js http://codingsmackdown.tv/blog/2014/07/08/using-page-objects- in-angularjs-量角器/
This is my page object file: 这是我的页面对象文件:
var PageObjects = function() {
var preenchePsafe = browser.driver.findElement(by.id('global-search'));
var opcaoPsafe = browser.driver.findElement(by.css('#search > ul > li:nth-child(1) > a'));
this.abrirUrl = function() {
dvr.get('http://home.pp.psafe.com/');
};
this.pesquisarPsafe = function (pesquisa){
this.preenchePsafe.sendKeys(pesquisa);
this.opcaoPsafe.click();
};
};
module.exports = PageObjects;
and this is my test: 这是我的测试:
var pageObjects = require('./page.js');
describe('PSafe Home', function () {
beforeEach(function () {
var pageObjects = new page();
isAngularSite(false);
handlePromise = dvr.getAllWindowHandles();
});
it ('Pesquisar PSafe', function () {
browser.get('http://home.psafe.com/');
pageObjects.pesquisarPsafe('PSafe');
})});
Then, when i execute i get the following error: 然后,当我执行我得到以下错误:
1) PSafe Home Pesquisar PSafe Message: ReferenceError: page is not defined Stacktrace: ReferenceError: page is not defined at [object Object].
1)PSafe主页查询PSafe消息:ReferenceError:页面未定义Stacktrace:ReferenceError:页面未在[object Object]中定义。 (C:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\piloto.js:6:31) at c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\jasminewd\\index.js:94:14 at [object Object].webdriver.promise.ControlFlow.runInNewFrame_ (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\selenium-webdriver\\lib\\webdriver\\promise.js:1654:20) at [object Object].webdriver.promise.ControlFlow.runEventLoop_ (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\selenium-webdriver\\lib\\webdriver\\promise.js:1518:8) ==== async task ==== Asynchronous test function: beforeEach() at [object Object].
(C:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ piloto.js:6:31)位于c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ jasminewd \\ index.js:94:14对象]在[对象对象]处的webdriver.promise.ControlFlow.runInNewFrame_(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ selenium-webdriver \\ lib \\ webdriver \\ promise.js:1654:20)。 webdriver.promise.ControlFlow.runEventLoop_(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ selenium-webdriver \\ lib \\ webdriver \\ promise.js:1518:8)====异步任务=== =异步测试功能:[object Object]中的beforeEach()。 (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\jasminewd\\index.js:93:33) at [object Object].
(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ jasminewd \\ index.js:93:33),位于[object Object]。 (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\async-callback.js:45:37) at [object Object].jasmine.Block.execute (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:1174:17) at [object Object].jasmine.Queue.next_ (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:2209:31) at [object Object]._onTimeout (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:2199:18) Error at [object Object].
(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ minijasminenode \\ lib \\ async-callback.js:45:37)在[object Object] .jasmine.Block.execute(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ minijasminenode \\ lib \\ jasmine-1.3.1.js:1174:17)在[object Object] .jasmine.Queue.next_(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ minijasminenode \\ lib \\ jasmine-1.3.1.js:2209:31)在[object Object] ._ onTimeout(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ minijasminenode \\ lib \\ jasmine-1.3.1.js:2199:18)[对象对象]错误。 (C:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\piloto.js:5:5) at [object Object].jasmine.Env.describe_ (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:913:21) at [object Object].jasmine.Env.describe (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:898:15) at describe (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:658:27) at Object.
(C:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ piloto.js:5:5)位于[object Object] .jasmine.Env.describe_(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ minijasminenode \\ lib \\ jasmine-1.3.1.js:913:21),位于[object Object] .jasmine.Env.describe(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ minijasminenode \\ lib \\ jasmine- 1.3.1.js:898:15),位于对象的describe(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ minijasminenode \\ lib \\ jasmine-1.3.1.js:658:27)中。 (C:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\piloto.js:3:1)
(C:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ piloto.js:3:1)
Edit: 编辑:
After trying a few things, i "got it" doing the following: 尝试了几件事之后,我“明白了”执行以下操作:
this is my spec file: 这是我的规格文件:
var pageObjectsModule = require('./page.js');
describe('PSafe Home', function () {
var pageObject;
beforeEach(function () {
pageObject = new pageObjectsModule();
isAngularSite(false);
handlePromise = dvr.getAllWindowHandles();
});
it('Pesquisar PSafe', function () {
dvr.get('http://home.psafe.com/');
pageObject.pesquisarPsafe('PSafe');
})
});
this is my page object file 这是我的页面目标文件
var PageObjects = function() {
//var preenchePsafe = dvr.findElement(by.id('global-search'));
//var opcaoPsafe = dvr.findElement(by.css('#search > ul > li:nth-child(1) > a'));
this.abrirUrl = function() {
dvr.get('http://home.psafe.com/');
};
this.pesquisarPsafe = function(pesquisa) {
dvr.findElement(by.id('global-search')).sendKeys(pesquisa);
//preenchePsafe.sendKeys(pesquisa);
//this.opcaoPsafe.click();
};
};
module.exports = PageObjects;
But i had to map the desired element and use sendKeys inside pesquisarPsafe(pesquisa) instead map it outside the function (those commented lines). 但是我不得不映射所需的元素,并在pesquisarPsafe(pesquisa)内使用sendKeys,而不是在函数外部(那些注释行)映射它。 I have no clue why this happens.
我不知道为什么会这样。
It doesn't look like you are naming your variables correctly. 您似乎没有正确命名变量。 Try something like this:
尝试这样的事情:
var PageObjects = require('./page.js');
describe('PSafe Home', function () {
beforeEach(function () {
var pageObjects = new PageObjects();
isAngularSite(false);
handlePromise = dvr.getAllWindowHandles();
});
it ('Pesquisar PSafe', function () {
browser.get('http://home.psafe.com/');
pageObjects.pesquisarPsafe('PSafe');
})
});
export class CosmicNovaSelectWardPage extends PageBase
{
private btnWardList : any;
private lblHeaderTitle : any;
private btnCancel : any;
constructor() {
super();
const element = Elements.CosmicNovaSelectWardPage;
this.btnWardList = super.findLocators(element.btnWardList.findBy, element.btnWardList.value);
this.lblHeaderTitle = super.findLocators(element.lblHeaderTitle.findBy, element.lblHeaderTitle.value);
this.btnCancel = super.findLocators(element.btnCancel.findBy, element.btnCancel.value);
}
/**
* Step: select specific ward from given ward list
* @param ward
* @returns {CosmicNovaBaseWardPage}
*/
public step_selectUserWard(ward: string): CosmicNovaBasePhysicianPage
{
log.info("Step: choose "+ward+" in ward list [:step_selectUserWard:]");
this.Helper_Actions.findTextAndClick(this.btnWardList,ward);
return new CosmicNovaBasePhysicianPage();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.