Javascript Can';t使用量角器正确执行页面对象模式

Javascript Can';t使用量角器正确执行页面对象模式,javascript,jasmine,protractor,Javascript,Jasmine,Protractor,我一直在尝试在页面对象模式中调整我的测试代码。但这件事让我很为难 我有以下代码: 这是我的页面对象文件 这是我的规范文件 当我评论台词时 var preenchePsafe = dvr.findElement(by.id('global-search')); var opcaoPsafe = dvr.findElement(by.css('#search > ul > li:nth-child(1) > a')); preenchePsafe.sendKeys(pesq

我一直在尝试在页面对象模式中调整我的测试代码。但这件事让我很为难

我有以下代码:

这是我的页面对象文件

这是我的规范文件

当我评论台词时

 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的初学者,我认为这可能是一个代码结构问题。

dvr
未在页面对象中定义。您需要一个:

var dvr = require('some/path.js')
在页面对象文件顶部或构造函数内部

另外,我建议您使用
元素(by.css())
$()
而不是dvr.findelelement(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');

我猜你的堆栈跟踪的那部分说
TypeError:对象不是函数

因为在spec文件的beforeach函数中,您试图将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');

    });

});

你好,谢谢你的帮助。下面是我所做的:TypeError:无法调用undefinedright的方法'pesquisarPsafe',抱歉。您还应该删除声明
var pageObject的行我已经在回答中解决了这个问题。我以前看到过,我得到的是:TypeError:Object function(){}在[Object Object]没有方法'pesquisarPsafe'。(C:\Users\QARJ\webstromprojects\dragratorpiloto\piloto.js:15:20)尝试将pageObject设置为全局:
pageObject=require('./page.js')而不是
var pageObject=require('./page.js')page.js
文件中的code>:将最后一行更改为
module.exports=new PageObjects()
Hello,我已经在我的config.js中声明了
dvr
。实际上,我正在测试一个非角度应用程序,我认为
element
findElement
仅适用于角度应用程序。对不对?
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');

    });

});