Library Usage with JS (Mocha)

 

This is a dummy Android Javascript Mocha project and explains how to develop mobile application automation using libraries with javascript.

 

data.js library is used to store your test data.

common.js library is used to store your common actions / functions, the aim is no duplication.

loginScreen.js library is used to store your elements, selenium actions, recorded codes with recorder. You can create ….Screen.js file as you need.

1- Save this library file on your computer as “data.js” and upload as a library file on your mobile project (Case Management → Library → Upload File → Coding Language:Javascript)

var DATA = { PASSWORD : '123456', WRONG_PASSWORD : '123456', ACCOUNT_NUMBER : { hasCreditCard: ['5300000004','5300000005','5300000006','5300000007','5300000008','5300000009'], hasInvestmentAccount: ['5300000004','5300000005','5300000006','5300000007','5300000008','5300000009'], noAccount: ['5399999994','5399999995','5399999996','5399999997','5399999998','5399999999'], corporateAccount:'112233' }, CREDITCARD : { SuccessVisa: '5406670000000009', SuccessMaster: '5504720000000003', SuccessDebit: '4910050000000006', NotSufficientFunds: '4111111111111129', StolenCard: '4126111111111114' }, } ; exports.DATA = DATA;

2- Save this library file on your computer as “common.js” and upload as a library file (Case Management → Library → Upload File → Coding Language:Javascript)

const { wd } = require("../setup/v2setup"); var assert = require('assert'); var should = require('should'); exports.setCommonMethods = (driver) => { wd.addPromiseChainMethod('swipeLeft', () => { return driver .getWindowSize() .then((size) => { return driver .swipe({ startX: size.width-10, endX: size.width / 20, startY: size.height / 2, endY: size.height / 2, duration: 400 }) }) .sleep(1000) .save() }) wd.addPromiseChainMethod('swipeUp', () => { return driver .getWindowSize() .then((size) => { return driver .swipe({ startX: size.width / 2, endX: size.width / 2, startY: size.height * 2 / 7, endY: size.height * 6 / 7, duration: 400 }) }) .sleep(1000) .save() }) wd.addPromiseChainMethod('swipeDown', () => { return driver .getWindowSize() .then((size) => { return driver .swipe({ startX: size.width / 2, endX: size.width / 2, startY: size.height * 6 / 7, endY: size.height * 3 / 7, duration: 400 }) }) .sleep(1000) .save() }) wd.addPromiseChainMethod('save', () => { return driver.saveScreen() }); wd.addPromiseChainMethod('randomNumber', (min,max) => { return Math.floor(Math.random() * (max - min)) + min }); wd.addPromiseChainMethod('resetApplication', () => { return driver.resetApplication(); }); wd.addPromiseChainMethod('randomName', (length) => { var charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var text = ""; for (var i = 0; i < length; i++) { result += charset[Math.floor(Math.random() * charset.length)]; } return text; }); }

3- Save this library file on your computer as “loginScreen.js” and upload as a library file (Case Management → Library → Upload File → Coding Language:Javascript)

const { wd } = require("../setup/v2setup"); const { setCommonMethods } = require("./common.js"); const { DATA } = require("./data.js"); var assert = require('assert'); var should = require('should'); var DEFAULT_TIMEOUT=8000; var DEFAULT_TIMEOUT_MID=3000; var DEFAULT_TIMEOUT_MIN=1000; var BUNDLE_ID="com.bundle.android.app.dev:id/"; /********* ELEMENTS ********/ var ELEMENT = { UserName: BUNDLE_ID + "accountTxtField", // with bundleId variable Password: BUNDLE_ID + "passTxtField", // with bundleId variable SubmitButton: BUNDLE_ID + "btn_start", // with bundleId variable TxtCountry: "com.myapp.android.app.dev:id/text_country", //without bundleId variable /////////////////////COMMENT/////////////////// Female:"//*[contains(@text , 'I am female')]", //Xpath with text propery contains specified text DatePicker:"//android.view.View[@content-desc='01 Aralık 1985']", ButtonEnabledControl:"//*[contains(@enabled , 'false')]" // Xpath expression with enabled property of the element } exports.setLoginMethods = (driver) => { wd.addPromiseChainMethod ('doLogin', (accountNumber,password,assertText) => { return driver .waitForElementById(ELEMENT.UserName, DEFAULT_TIMEOUT) .clear() .waitForElementById(ELEMENT.UserName, DEFAULT_TIMEOUT) .sendKeys(accountNumber) //.sendKeys(randomNumber("537",1000000,9999999,"")) //function usage in same js file .waitForElementById(ELEMENT.Password, DEFAULT_TIMEOUT) .clear() .waitForElementById(ELEMENT.Password, DEFAULT_TIMEOUT) .sendKeys(DATA.PASSWORD) //.sendKeys(password) //data.js usage .waitForElementById(ELEMENT.SubmitButton, DEFAULT_TIMEOUT) .sleep(DEFAULT_TIMEOUT_MIN) .save() //take custom screenshot .elementByIdIfExists(ELEMENT.DatePicker,DEFAULT_TIMEOUT) .then(function (myFunction) { if (myFunction) { return driver .elementByIdIfExists(ELEMENT.DatePicker, DEFAULT_TIMEOUT) .click() .sleep(1500) .save() } }) .sleep(DEFAULT_TIMEOUT_MIN) .waitForElementById(ELEMENT.TxtCountry, DEFAULT_TIMEOUT) .getAttribute("text") .then((text)=> { if(text == assertText){ return true; }else{ return assert.fail("","","Failure"); } }) .sleep(DEFAULT_TIMEOUT_MID) .save() }); wd.addPromiseChainMethod ('forgottenPassword', () => { //YOUR CODE }); } function randomNumber(prefix, min, max, suffix) { return prefix + (Math.floor(Math.random() * (max - min)) + min) + suffix; } function randomName(prefix, min, max ) { return prefix + (Math.floor(Math.random() * (max - min)) + min); }

4-Create a new Case with Javascript - Mocha framework

Step code usage examples:

*Data.js usage example code

*Momentum system variable usage example code.

*Momentum environment variable usage example code.

 

5- Importing Libraries example Hooks.

Header section code

Before section code

After Each section code