I am trying to use the Page Object model for my browser automation testing. The below code works, but it is contained within the it(){} block which is not what I want.
describe('"Re Submit Staging" button should create a pop-up within the', () => {
it('products tab', ()=>{
browser.sleep(base.sleepAmount());
expect(managementProductsPage.returnPreviewHeaderText().isPresent()).toBe(false);
managementProductsPage.clickReSubmitStagingButton();
browser.wait(function(){
return element(by.css('.bs-callout.bs-callout-danger')).isPresent();//wait for the growl to appear
},10000).then(function(){//waiting 10 seconds for the growl to appear
this.getReSubmitNotificationText = element(by.css('.bs-callout.bs-callout-danger')).getText();
expect(this.getReSubmitNotificationText).toContain('Resubmit Reference Document');
browser.sleep(base.sleepAmount());
});
});
When I attempt to use the Page Object model, and run the code (below), protractor throws the following error: "Failed: managementProductsPage.getReSubmitNotificationText is not a function".
browser.wait(function(){
return managementProductsPage.getReSubmitNotificationText().isPresent();//wait for the growl to appear
},10000).then(function(){//waiting 10 seconds for the growl to appear
this.getReSubmitNotificationText = managementProductsPage.getReSubmitNotificationText();
this.getReSubmitNotificationText1 = this.getReSubmitNotificationText.getText();
expect(this.getReSubmitNotificationText1).toContain('Resubmit Reference Document');
browser.sleep(base.sleepAmount());
});
The above functions are contained within a separate .js page as follows:
class ManagementProductsPage extends NavbarManagementPage{
constructor(){
super();
this.getReSubmitNotificationText = element(by.css('.bs-callout.bs-callout-danger'));
}
getReSubmitNotificationText() {
return this.getReSubmitNotificationText;
}
}
module.exports = ManagementProductsPage
This function is then called in my test.js file with the following: var ManagementProductsPage = require('../pages/managementProducts.page.js');
describe('Dashboard management page', () => {
var managementProductsPage = new ManagementProductsPage();
I do not understand why this would not work? Also, I am not using waitForAngular as the website has some trouble and tends to 'hang', causing protractor to timeout.