Commit de48f66c by Akila Mendis Committed by nilu

Committing automation testcases

parent 19ff47fd
/allure-report/
/allure-results/
/dist/
/node_modules/
/reports/
/testresults/
FROM httpd:2.4
VOLUME ./allure-report/ /usr/local/apache2/htdocs/
version: "3"
services:
apache:
image: httpd:2.4
ports:
- 3000:80
volumes:
- ./allure-report:/usr/local/apache2/htdocs/
restart: always
\ No newline at end of file
{
"name": "matchdprotractor",
"version": "1.0.0",
"description": "Automated testing for Matchd",
"main": "protractor.conf.js",
"scripts": {
"webdriver-manager": "./node_modules/.bin/webdriver-manager",
"webdriver-update": "webdriver-manager update",
"pretest": "tsc",
"pretestw": "tsc -w",
"posttest": "allure generate allure-results --clean -o allure-report || true",
"test": "protractor ./dist/protractor.conf.js & npm run posttest"
},
"author": "Akila Mendis",
"license": "ISC",
"dependencies": {
"@types/jasmine": "^3.4.0",
"@types/node": "^12.7.7",
"jasmine-allure-reporter": "^1.0.2",
"jasmine-fail-fast": "^2.0.0",
"jasmine-reporters": "^2.3.2",
"jasmine-spec-reporter": "^4.2.1",
"jasminewd2": "^2.2.0",
"protractor": "^5.4.2",
"protractor-html-reporter-2": "^1.0.4",
"ts-node": "^8.4.1",
"typescript": "3.6.4"
},
"devDependencies": {
"allure-commandline": "^2.13.0"
}
}
import { browser } from 'protractor';
import { Config } from "protractor";
declare const allure: any;
export let Credentials = {
url: "http://vm4.qa03.oneit.com.au/matchd/editor",
username : "oneit",
password : "oneit2cms"
}
export let config: Config = {
framework: 'jasmine2', //Type of Framework used
directConnect: true,
capabilities: {
browserName: "chrome",
chromeOptions: {
args: ["--headless", "--disable-gpu", "--window-size=1366,768","--disable-dev-shm-usage",'--no-sandbox',"--log-level=3"]
}
},
stopSpecOnExpectationFailure: true, // Not working
specs: ['./src/*.spec.js'], //Name of the Specfile,
showColors: true,
allScriptsTimeout: 10 * 10000,
jasmineNodeOpts: {
defaultTimeoutInterval: 10 * 10000
},
onPrepare(){
browser.manage().window().maximize();
const jasmineReporters = require('jasmine-reporters');
jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
consolidateAll: true,
savePath: 'testresults',
filePrefix: 'xmlresults'
}));
const failFast = require('jasmine-fail-fast');
jasmine.getEnv().addReporter(failFast.init());
//Allure reporter
let AllureReporter = require('jasmine-allure-reporter');
jasmine.getEnv().addReporter(new AllureReporter({
resultsDir: 'allure-results'
}));
jasmine.getEnv().afterEach(function(done){
browser.takeScreenshot().then(function (png) {
allure.createAttachment('Screenshot', function () {
return new Buffer(png, 'base64')
}, 'image/png')();
done();
})
});
},
onComplete(){
let browserName, browserVersion;
const capsPromise = browser.getCapabilities();
capsPromise.then((caps)=>{
browserName = caps.get('browserName');
browserVersion = caps.get('version');
const platform = caps.get('platform');
let HTMLReport = require('protractor-html-reporter-2');
const testConfig = {
reportTitle: 'Protractor Test Execution Report',
outputPath: './reports',
outputFilename: 'ProtractorTestReport',
screenshotPath: './screenshots',
testBrowser: browserName,
browserVersion: browserVersion,
modifiedSuiteName: false,
screenshotsOnlyOnFailure: true,
testPlatform: platform
};
new HTMLReport().from('./testresults/xmlresults.xml', testConfig);
});
}
}
\ No newline at end of file
import {LoginPage} from "./pages/login.po";
import {Credentials} from "../protractor.conf";
import { CustomersPage } from "./pages/customers.po";
import { AdminHomePage } from "./pages/adminHome.po";
import { browser } from "protractor";
import { CreateJobPage } from "./pages/createjob.po";
import { async } from "q";
let loginPage:LoginPage;
let customersPage:CustomersPage;
let adminPage:AdminHomePage;
let createJobPage:CreateJobPage;
describe("Customers",()=>{
beforeAll(() => {
loginPage = new LoginPage();
});
it("Login user",async ()=>{
await loginPage.navigateToLogin();
await loginPage.setUsername(Credentials.username);
await loginPage.setPassword(Credentials.password);
customersPage = await loginPage.clickOnLoginButton();
});
it("Login to a customer",async()=>{
adminPage = await customersPage.loginAsAdmin("Lone Star Gold");
// await browser.sleep(5000);
});
it("Clicking Create Job button should show 'Create a new Job' option selected",async ()=>{
// adminPage = new AdminHomePage();
await browser.sleep(1000);
createJobPage = await adminPage.clickCreateJobBtn();
// createJobPage = new CreateJobPage();
let jobOption:string = await createJobPage.getSelectedJobOption();
expect(jobOption).toBe("Create a new job");
});
it("Clicking on 'Get Started' button should load Job Detail tab",async ()=>{
await createJobPage.clickGetStartedBtn();
let selectedTabText = await createJobPage.getSelectedTabName();
expect(selectedTabText).toContain("Job Detail");
});
it("Job Detail page should have 'Job Title','Abot the Job' and 'ILO Standard Job Title' ans mandatory fields",async ()=>{
await createJobPage.clickProceedToRequirementsBtn();
let errorsList = await createJobPage.getErrorMessages();
console.log(errorsList.toString());
expect(errorsList.toString()).toBe("Errors occurred, please correct them and try again,Please enter a value for Job Title,Please enter a value for Job Description,Please enter a value for ILO Standard Job Title");
});
});
\ No newline at end of file
import {browser, by, element, ElementFinder, WebElementPromise} from 'protractor';
import {CreateJobPage} from "./createjob.po";
export class AdminHomePage {
createJobBtn:ElementFinder;
createJobIframe:ElementFinder;
constructor(){
}
async clickCreateJobBtn():Promise<CreateJobPage>{
await this.waitTillIframeLoads();
for(let i=0;i<10;i++){
try{
console.log("trying move to iframe 0. retry "+i);
let myIframe = await element.all(by.tagName("iframe")).get(0).getWebElement();
await browser.switchTo().frame(myIframe);
console.log("moved to iframe 0. retry "+i);
console.log("trying to find d-create-job-btn. retry "+i);
this.createJobBtn = await element(by.css('a[class~="d-create-job-btn"]'));
console.log("found d-create-job-btn. retry "+i);
console.log("trying to click d-create-job-btn. retry "+i);
await this.createJobBtn.click();
console.log("clicked d-create-job-btn. retry "+i);
break;
}catch(e){
console.log("err");
console.log(e);
await browser.sleep(1000);
}
console.log("retry "+ i);
await browser.sleep(1000);
}
// await browser.sleep(10000);
return new Promise<CreateJobPage>(resolve => resolve(new CreateJobPage()));
}
async waitTillIframeLoads(){
for(let i =0 ; i<10 ;i++){
try{
console.log("trying to load Iframe. retry "+i);
await element(by.tagName("iframe")).getWebElement();
console.log("Iframe loaded");
break;
}catch(e){
console.log("err");
await browser.sleep(1000);
}
console.log("retry "+ i);
await browser.sleep(1000);
}
}
}
\ No newline at end of file
import {browser, by, element, ElementFinder, ElementArrayFinder} from 'protractor';
import { async } from 'q';
export class CreateJobPage {
jobOptions:ElementFinder[];
getStartedBtn = element(by.buttonText('Get Started'));
jobMainTab = element(by.css('ul[class~="nav-justified"]'));
proceedToRequirementsBtn = element(by.buttonText('Proceed to Requirements'));
errorMessages:ElementFinder[] = null;
constructor(){}
async getSelectedJobOption(){
await this.waittillJobOptionsLoad();
let noOfOptions = this.jobOptions.length;
console.log("noOfOptions "+noOfOptions);
let selecedOption = null;
for(let i=0;i<noOfOptions;i++){
let jobClass = await this.jobOptions[i].getWebElement().getAttribute("class");
console.log("jobClass "+jobClass);
if(jobClass.includes("checked")){
selecedOption = await this.jobOptions[i].element(by.tagName("h3")).getText();
}
}
return selecedOption;
}
async waittillJobOptionsLoad(){
for(let i=0;i<10;i++){
try{
this.jobOptions = await element.all(by.css('label[class~="create-job-selector"]'));
if(this.jobOptions.length>0){
break;
}
}catch(e){
console.log("err");
console.log(e);
await browser.sleep(1000);
}
console.log("retry waittillJobOptionsLoad"+ i);
await browser.sleep(1000);
}
}
async waitTillProceedToRequirementsBtn(){
for(let i=0;i<10;i++){
try{
let proceedToRegBtns = await element.all(by.buttonText('Proceed to Requirements'));
if(proceedToRegBtns.length>0){
this.proceedToRequirementsBtn = proceedToRegBtns[0];
break;
}
}catch(e){
console.log("err");
console.log(e);
await browser.sleep(1000);
}
console.log("retry waitTillProceedToRequirementsBtn"+ i);
await browser.sleep(1000);
}
}
async clickGetStartedBtn(){
try{
console.log("trying to click getStartedBtn");
await this.getStartedBtn.click();
console.log("clicked getStartedBtn");
}catch(e){
console.log("err");
console.log(e);
await browser.sleep(1000);
}
await browser.sleep(10000);
}
async getSelectedTabName(){
let selectedTab:ElementFinder = await this.jobMainTab.element(by.css('li[class~="active"]'));
let tabText = await selectedTab.getText();
return tabText.trim();
}
async clickProceedToRequirementsBtn(){
try{
await this.waitTillProceedToRequirementsBtn();
await this.proceedToRequirementsBtn.click();
}catch(e){
console.log("proceedToRequirementsBtn");
console.log(e);
await browser.sleep(1000);
}
}
async getErrorMessages(){
await this.waitTillErrorsOccurs();
let errorsList:string[] = [];
if(this.errorMessages.length>0){
for(let i =0; i<this.errorMessages.length;i++){
let error = await this.errorMessages[i].getText();
errorsList.push(error);
}
}
return errorsList;
}
async waitTillErrorsOccurs(){
for(let i =0 ; i<10 ;i++){
try{
console.log("trying to find message-txt. retry "+ i);
this.errorMessages = await element.all(by.css('span[class="message-txt"]'));
console.log("found message-txt");
console.log("Try to get count");
let count = this.errorMessages.length;
console.log("Count is "+count);
if(count>0){
break;
}
}catch(e){
console.log("err");
await browser.sleep(1000);
}
console.log("retry "+ i);
await browser.sleep(1000);
}
}
}
\ No newline at end of file
import {browser, by, element,ElementArrayFinder, ElementFinder} from 'protractor';
import {AdminHomePage} from "./adminHome.po";
export class CustomersPage{
clientList:ElementArrayFinder= element.all(by.css('[class="client-list"]'));
constructor(){
}
async getNoOfCustomers():Promise<number>{
await browser.waitForAngularEnabled(false);
let noOfClients = await this.clientList.count();
console.log("No of Clients are "+noOfClients);
return noOfClients;
}
async getCustomerByName(name:string):Promise<ElementFinder>{
let numBerOfClients = await this.getNoOfCustomers();
let client:ElementFinder;
for(let i=0; i<numBerOfClients; i++){
let clientTemp:ElementFinder = await this.clientList.get(i);
let clientName = await clientTemp.all(by.css('[class="client-name"]')).get(0).getText();
if(name==clientName){
client = clientTemp;
}
}
return client;
}
async loginAsAdmin(name:string):Promise<AdminHomePage>{
let customer:ElementFinder = await this.getCustomerByName(name);
await customer.element(by.css('button[name="_assume"]')).click();
return new Promise<AdminHomePage>(resolve => resolve(new AdminHomePage()));
}
}
\ No newline at end of file
import {browser, by, element} from 'protractor';
import {Credentials } from "../../protractor.conf";
import {CustomersPage} from "./customers.po";
export class LoginPage{
userName = element(by.css('input[name="username"]'));
password = element(by.css('input[name="password"]'));
loginButton = element(by.css('button[name="_performlogin"]'));
errorDom = element(by.css('.small_error_placeholder'));
constructor() {
}
async navigateToLogin() {
await browser.waitForAngularEnabled(false);
await browser.driver.get(Credentials.url);
await browser.driver.sleep(2000);
}
async setUsername(user) {
expect(await this.userName.isPresent()).toBe(true, 'Username field not exist');
await this.userName.clear();
await this.userName.sendKeys(user);
}
async setPassword(password) {
expect(await this.password.isPresent()).toBe(true, 'Password field not exist');
await this.password.clear();
await this.password.sendKeys(password);
}
async clickOnLoginButton():Promise<CustomersPage>{
await this.loginButton.click();
await browser.driver.sleep(2000);
await browser.waitForAngularEnabled(true);
return new Promise<CustomersPage>(resolve => resolve(new CustomersPage()));
}
}
\ No newline at end of file
{
"compileOnSave": true,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/",
"mapRoot": "./dist/",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2017",
"dom"
]
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment