【发布时间】:2014-11-25 20:12:21
【问题描述】:
我正在按照我发现的几个示例开始使用页面对象来组织我的测试。
例如: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/
这是我的页面对象文件:
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;
这是我的测试:
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');
})});
然后,当我执行时,我收到以下错误:
1) PSafe Home Pesquisar PSafe 消息: ReferenceError:页面未定义堆栈跟踪: ReferenceError:页面未定义 在 [对象对象]。 (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) ==== 异步任务 ==== 异步测试函数:beforeEach() 在 [对象对象]。 (c:\Users\QARJ\WebstormProjects\ProtractorPiloto\node_modules\protractor\node_modules\jasminewd\index.js:93:33) 在 [对象对象]。 (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) 在 [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) 在描述 (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)
编辑:
在尝试了一些事情之后,我“明白了”做了以下事情:
这是我的规范文件:
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');
})
});
这是我的页面对象文件
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;
但我必须映射所需的元素并在 pesquisarPsafe(pesquisa) 内使用 sendKeys,而不是将其映射到函数之外(那些注释行)。我不知道为什么会这样。
【问题讨论】:
标签: javascript angularjs