0

I am in the process of learning protractor using paject object. Here is my Page object file and my test spec. files:

Page Object (file name PO_Login.js)

var ptor;
var LoginPage = function () 
{
        ptor = protractor.getInstance();
        this.login = function()
        {
            console.log("here");        
            var user=ptor.findElement(protractor.By.id("username"));
            user.sendKeys('admin');
            var pwd=ptor.findElement(protractor.By.id('password'));
            pwd.sendKeys('admin');
        }
}
module.exports = new LoginPage();

My Test spec file:

var ptor;
describe(
    'homepage', 
    function() 
    {
        var LoginPage = require('./LoginPO.js');
        beforeEach(
            function() 
            {
                ptor = protractor.getInstance();
                var driver=ptor.driver;
                ptor.driver.get('http://localhost/xxxxxxxxxx/login');
                ptor.waitForAngular();
            }
        );

        it(
            'xxxx',
            function()
            {
                ptor = protractor.getInstance();
                ptor.driver.findElement(protractor.By.tagName('html'))
                    .getAttribute('ng-app').then(function(text)
                        {
                            expect(text).toBe('xxxxxxx.sso')
                        }
                    );

                ptor.driver.findElement(
                protractor.By.tagName('body')).getAttribute('id')
                    .then(function(text)
                        {
                            expect(text).toBe('cas')
                        }
                    );
            },
            10000
        );

        it(
            'login', 
            function() 
            {       
                console.log("here...");
                LoginPage.login;
                //  var ctrlpoints_url=ptor.getCurrentUrl();
                //  expect(ctrlpoints_url).toContain('http://localhost/xxxxxxxxxxxxxxx/#/dashboard/points');
                //  expect(loginPage.header.getText()).toEqual('xxxxxx');     
             }
        );    
    }
);

I am not sure what is wrong - the login method defined in Page object is not getting called. I used console.log() to debugg the script.

Dmitri Zaitsev
  • 13,548
  • 11
  • 76
  • 110
gvhelp
  • 1
  • 1

1 Answers1

1

You are not calling the login function. Replace:

LoginPage.login;

with:

LoginPage.login();

Aside from that, instead of using ptor or protractor globally defined objects, use browser, element and by, see examples here - it would, at least, make your code cleaner.

alecxe
  • 462,703
  • 120
  • 1,088
  • 1,195
  • Thanks alecxe. I could use the example and create a page object and execute one test for that page. But, when I called another page object in my test script then protractor fails with following message: AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\atoms\error.js:113 var template = new Error(this.message); ^ UnknownError: JavaScript error in async script. (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 111 milliseconds – gvhelp Feb 16 '15 at 16:20
  • Here is some additional comments about the problem that I currently facing: I gave defined a var like var apphomepage = require('./AppHomepage_PO.js'); and I could call a few methods defined in AppHomepage_PO (Page object). But when I defined another var like var pointspage = require('./points_PO.js'); and try to call methods defined in points_PO.js (Pabe object) I am getting error as mentioned above. Any idea? – gvhelp Feb 16 '15 at 16:33