Skip to content

Instantly share code, notes, and snippets.

@wlsf82
Created November 22, 2017 21:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wlsf82/4e96daf41ed77cf96a037244e98675ac to your computer and use it in GitHub Desktop.
Save wlsf82/4e96daf41ed77cf96a037244e98675ac to your computer and use it in GitHub Desktop.
// .gitignore
node_modules
// package.json
{
"name": "protractor-tests",
"version": "0.0.2",
"devDependencies": {
"jasmine-spec-reporter": "^2.4.0",
"protractor": "5.2.0",
"protractor-helper": "^3.2.2"
},
"scripts": {
"test": "webdriver-manager update && protractor"
}
}
// protractor.conf.js
var SpecReporter = require('./node_modules/jasmine-spec-reporter');
exports.config = {
baseUrl: 'http://choko.org/',
specs: [
'specs/*.spec.js'
],
capabilities: {
'browserName': 'chrome',
'chromeOptions': {'args': ['--disable-extensions']}
},
onPrepare() {
jasmine.getEnv().addReporter(new SpecReporter({
displayFailuresSummary: true,
displayFailedSpec: true,
displaySuiteNumber: true,
displaySpecDuration: true
}));
browser.driver.manage().window().maximize();
},
jasmineNodeOpts: {
onComplete: null,
isVerbose: false,
showColors: true,
includeStackTrace: true
}
};
// page-objects/choko-org.po.js
class ChokoOrg {
constructor() {
// Navbar top links
this.gettingStartedLink = element(by.css('.navbar-nav .ng-scope:nth-child(1) .ng-binding'));
this.demoLink = element(by.css('.navbar-nav .ng-scope:nth-child(2) .ng-binding'));
this.contributeLink = element(by.css('.navbar-nav .ng-scope:nth-child(3) .ng-binding'));
this.aboutLink = element(by.css('.navbar-nav .ng-scope:nth-child(4) .ng-binding'));
this.blogLink = element(by.css('.navbar-nav .ng-scope:nth-child(5) .ng-binding'));
// Body's link
this.learnMoreLink = element(by.linkText('Learn more'));
//Navbar authentication's links
this.signInLink = element(by.className('btn-link'));
this.createAccountLink = element.all(by.className('btn-primary')).first();
}
};
module.exports = ChokoOrg;
// page-objects/learn-more.po.js
class LearnMore {
constructor() {
this.sidebar = element(by.className('col-md-3'));
this.leftNavItems = this.sidebar.all(by.repeater('item in data.items'));
}
};
module.exports = LearnMore;
// specs/choko-org.spec.js
const protractorHelper = require('protractor-helper');
const ChokoOrg = require('../page-objects/choko-org.po');
describe('Choko.org', () => {
const chokoOrg = new ChokoOrg();
beforeEach(() => {
browser.get('');
});
it('navigate to Getting started', () => {
const expectedUrl = `${browser.baseUrl}getting-started`;
protractorHelper.clickWhenClickable(chokoOrg.gettingStartedLink);
browser.getCurrentUrl().then((url) => {
protractorHelper.waitForUrlToBeEqualToExpectedUrl(expectedUrl);
expect(url).toEqual(expectedUrl);
});
});
it('navigate to Demo', () => {
const expectedUrl = 'http://demo.choko.org/'
protractorHelper.clickWhenClickable(chokoOrg.demoLink);
browser.getCurrentUrl().then((url) => {
protractorHelper.waitForUrlToBeEqualToExpectedUrl(expectedUrl);
expect(url).toEqual(expectedUrl);
});
});
it('navigate to Contribute', () => {
const expectedUrl = `${browser.baseUrl}contribute`;
protractorHelper.clickWhenClickable(chokoOrg.contributeLink);
browser.getCurrentUrl().then((url) => {
protractorHelper.waitForUrlToBeEqualToExpectedUrl(expectedUrl);
expect(url).toEqual(expectedUrl);
});
});
it('navigate to About', () => {
const expectedUrl = `${browser.baseUrl}about`;
protractorHelper.clickWhenClickable(chokoOrg.aboutLink);
browser.getCurrentUrl().then((url) => {
protractorHelper.waitForUrlToBeEqualToExpectedUrl(expectedUrl);
expect(url).toEqual(expectedUrl);
});
});
it('navigate to Blog', () => {
const expectedUrl = `${browser.baseUrl}blog`;
protractorHelper.clickWhenClickable(chokoOrg.blogLink);
browser.getCurrentUrl().then((url) => {
protractorHelper.waitForUrlToBeEqualToExpectedUrl(expectedUrl);
expect(url).toEqual(expectedUrl);
});
});
});
// specs/learn-more.spec.js
const protractorHelper = require('protractor-helper');
const ChokoOrg = require('../page-objects/choko-org.po');
const LearnMore = require('../page-objects/learn-more.po');
describe('Learn more', () => {
const chokoOrg = new ChokoOrg();
const learnMore = new LearnMore();
it('navigate through the sidebar items', () => {
browser.get('');
protractorHelper.clickWhenClickable(chokoOrg.learnMoreLink);
const currentUrl = browser.getCurrentUrl();
const expectedUrl = `${browser.baseUrl}getting-started`;
protractorHelper.waitForUrlToBeEqualToExpectedUrl(expectedUrl)
expect(currentUrl).toEqual(expectedUrl);
learnMore.leftNavItems.count().then((counter) => {
for (let i = 1; i < counter; i++) {
protractorHelper.clickWhenClickable(learnMore.leftNavItems.get(i));
learnMore.leftNavItems.get(i).getText().then((text) => {
const transformedText = text.replace(/ /g, '-').toLowerCase();
const currentUrl = browser.getCurrentUrl();
const expectedUrl = `${browser.baseUrl}documentation/${transformedText}`;
protractorHelper.waitForUrlToBeEqualToExpectedUrl(expectedUrl)
expect(currentUrl).toEqual(expectedUrl);
});
}
});
protractorHelper.clickWhenClickable(learnMore.leftNavItems.get(0));
learnMore.leftNavItems.get(0).getText().then((text) => {
const transformedText = text.replace(/ /g, '-').toLowerCase();
const currentUrl = browser.getCurrentUrl();
const expectedUrl = `${browser.baseUrl}${transformedText}`;
protractorHelper.waitForUrlToBeEqualToExpectedUrl(expectedUrl)
expect(currentUrl).toEqual(expectedUrl);
});
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment