2

I'm working with Protractor and I create a page object.

This is my page object:

'use strict';

var CreateAgent = function () {
this.agentEmail = element(by.model('agent.email'));
this.janrainConsoleAgent = by.xpath(".//*[@value='ccp_agent']");
this.janrainConsoleAgentManager = by.xpath(".//* .[@value='ccp_agent_manager']");
this.saveButton = by.className('md-primary md-raised md-button md-ink-ripple');

this.addEmail = function(email){
    this.agentEmail.sendKeys(email);
};

this.selectRole = function(role){
    switch(role){
        case 'ccp agent':
            this.janrainConsoleAgent.click();
        case 'ccp agent manager':
            this.janrainConsoleAgentManager.click();
        default:
            break;
    }
};

this.saveAgent = function(){
    this.saveButton.click();
};
};
module.exports = CreateAgent;

This functions are calling in a spec

Here is the spec:

var createAgent = require('../page/create_agent_page');

 describe('Protractor Demo Janrain - Create Agent', function(){

    it('should fill out information to create agent', function(){

      createAgent.addEmail('jburquez+auto001@janrain.com');
      browser.sleep(3000);
      createAgent.selectRole('ccp agent manage');
      browser.sleep(3000);
      createAgent.saveAgent();
      browser.sleep(7000);

   });
});

but when I execute my test is giving me an error:

Failures:
1) Protractor Demo Janrain - Create Agent should fill out information  to create agent
Message:
  Failed: createAgent.addEmail is not a function
Stack:
  TypeError: createAgent.addEmail is not a function

I'm not sure if something is missing in the page object or in other place.

Hope you can help me and thanks.

burq24
  • 279
  • 1
  • 5
  • 18
  • PageObject pattern: `https://www.thoughtworks.com/insights/blog/using-page-objects-overcome-protractors-shortcomings` – Barney Mar 23 '17 at 20:18

3 Answers3

7

change module.exports = CreateAgent; to module.exports = new CreateAgent();. You need to create a new instance of CreateAgent function to access all methods inside the function.

Sudharsan Selvaraj
  • 4,792
  • 3
  • 14
  • 22
3

Exporting an object of page module.exports = new CreateAgent(); is NOT a best practice as an object alive even you do not use it(example-When executing other test spec)

BEST WAY IS: Export only Object function module.exports = CreateAgent; and create an object on Spec() where you need that page object. Follow below code:

var createAgent = require('../page/create_agent_page');


describe('Protractor Demo Janrain - Create Agent', function(){
var createAgenPageObj;

  beforeAll(function(){
  //create an object for page
  createAgenPageObj=new createAgent ();

    });
  it('should fill out information to create agent', function(){

   });
})
Optimworks
  • 2,537
  • 17
  • 20
0

Create an instance in your spec file.

For example:

var createAgent = new CreateAgent();

And access functions using:

createAgent.addEmail();
Al Foиce ѫ
  • 4,195
  • 12
  • 39
  • 49
Harish G
  • 31
  • 5