无法使用量角器正确执行页面对象模式
Can't execute page objects pattern with protractor properly
我一直在尝试在页面对象模式中调整我的测试代码。但是我对此有些困难。
我有以下代码:
这是我的页面对象文件
PageObjects = function() {
var preenchePsafe = dvr.findElement(by.id('global-search'));
var opcaoPsafe = dvr.findElement(by.css('#search > ul > li:nth-child(1) > a'));
this.pesquisarPsafe = function(pesquisa) {
//dvr.findElement(by.id('global-search')).sendKeys(pesquisa);
preenchePsafe.sendKeys(pesquisa);
opcaoPsafe.click();
};
};
module.exports = PageObjects;
这是我的规范文件
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 preenchePsafe = dvr.findElement(by.id('global-search'));
var opcaoPsafe = dvr.findElement(by.css('#search > ul > li:nth-child(1) > a'));
preenchePsafe.sendKeys(pesquisa);
opcaoPsafe.click();
并取消注释该行
//dvr.findElement(by.id('global-search')).sendKeys(pesquisa);
我的测试工作正常。但我不想这样做,使用这样的页面对象是没有意义的。由于我是javascript和Jasmine的初学者,我认为这可能是一个代码结构问题。
我猜你的堆栈跟踪的一部分说 TypeError: object is not a function
因为在 beforeEach 函数的 spec 文件中,您尝试将 pageObject 实例化为 pageObjectsModule 函数的新实例,但 pageObjectsModule 在第一行中被定义为对象。
var pageObjectsModule = require('./page.js');
describe('PSafe Home', function () {
var pageObject;
beforeEach(function () {
pageObject = pageObjectsModule; // This line should fix the problem.
isAngularSite(false);
handlePromise = dvr.getAllWindowHandles();
});
it('Pesquisar PSafe', function () {
dvr.get('http://home.psafe.com/');
pageObject.pesquisarPsafe('PSafe');
});
});
或者,您可以这样做:
var pageObject = require('./page.js'); // define the pageObject object as soon as you require it.
describe('PSafe Home', function () {
// var pageObject;
beforeEach(function () {
// pageObject = new PageObjectsModule(); // now you don't need this line
isAngularSite(false);
handlePromise = dvr.getAllWindowHandles();
});
it('Pesquisar PSafe', function () {
dvr.get('http://home.psafe.com/');
pageObject.pesquisarPsafe('PSafe');
});
});
dvr
未在页面对象中定义。要么你需要:
var dvr = require('some/path.js')
位于页面对象文件的顶部或构造函数内部。
另外,我建议您使用element(by.css())
或$()
而不是dvr.findElement(by)。例如:
// $() is the same as element(by.css())
var preenchePsafe = $('global-search'));
// You can chain element calls.
var opcaoPsafe = $('#search > ul').$$('li').get(1).$('a');
相关文章:
- 无法在通过jQuery的ajax加载的页面中执行javascript
- JavaScript执行暂时挂起页面
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 当js函数's已执行
- 哪个先执行
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- HTML表单提交时未执行外部函数
- 在Safari执行javascript之前对其进行修改
- Amd,希望确保某个东西总是最后执行
- 在Windows 10中自动执行例行程序(主要与浏览器交互)
- 递归使用 eval() 是检查程序执行的好方法吗?
- 如何做到这一点,使代码在不传递条件后执行函数
- 如何在执行此特定onclick事件时执行JavaScript函数
- 如何在从浏览缓存加载页面时执行javascript
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- Jquery:代码在rails中的页面加载时未执行
- 如何防止jQueryonclick事件中的Ruby方法在页面刷新时执行
- JavaScript动画从不执行
- 为什么onsubmit函数似乎没有执行
- 推荐在JavaScript中执行存储为字符串的函数,而不是使用eval