Library Usage with JS (WebdriverIO)

 

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

 

image-20240310-194041.png

 

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

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

wdioExample.js library is used to store your elements, selenium actions, recorded codes with recorder. You can create ….wdioExample.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_wdio.js” and upload as a library file (Case Management → Library → Upload File → Coding Language:Javascript)

var isStepFailed = false; var assert = require('assert'); var windowSize = null; var STOP_ON_ERROR = true; var DEFAULT_TIMEOUT=8000; var DEFAULT_TIMEOUT_MID=3000; var DEFAULT_TIMEOUT_MIN=1000; exports.setCommonMethods = (driver) => { function swipe1(startX, startY, endX, endY, duration) { // Use the touchAction method to perform a swipe gesture driver.touchAction([ { action: 'press', x: startX, y: startY }, { action: 'wait', ms: duration }, { action: 'moveTo', x: endX, y: endY }, 'release' ]); } // An example of a custom function. function login(username, password) { // Entering values ​​in the username and password fields. driver.$('~Allow').setValue(username); driver.$('#Allow').setValue(password); // Giriş yap butonuna tıklama driver.$('#Allow').click(); } function tap(elementSelector) { const element = driver.$(elementSelector); // Use the touchAction method to perform a tap gesture on the specified element driver.touchAction([ { action: 'press', element }, 'release' ]); } driver.addCommand('tapElem', (elementSelector) => { const element = driver.$(elementSelector); driver.touchAction([ { action: 'press', element }, 'release' ]); }); driver.addCommand('tapClick', (tapX,tapY) => { driver.touchAction([ { action: 'tap', x: tapX, y: tapY }, 'release', ]); }); driver.addCommand('swipe', (startX, startY, endX, endY, duration) => { driver.touchAction([ { action: 'press', x: startX, y: startY }, { action: 'wait', ms: duration }, { action: 'moveTo', x: endX, y: endY }, 'release' ]); }); driver.addCommand('swipeUp', () => { const {width,height} = driver.getWindowSize(); const startX = width /4; const startY = height * 5/6; const endX = width /4; const endY = height * 2/6; }) driver.addCommand('performTouchAction',(startX,startY,endX,endY) => { driver.touchAction([ { action: 'press',options:{ x: startX, y: startY }}, { action: 'moveTo',options:{ x: endX, y: endY }}, { action: 'release', options:{} } ]); }) driver.addCommand('save', () => { return driver.saveScreen() }); driver.addCommand('randomNumber', (min,max) => { return Math.floor(Math.random() * (max - min)) + min }); driver.addCommand('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 “wdioExample.js” and upload as a library file (Case Management → Library → Upload File → Coding Language:Javascript)

const { setCommonMethods } = require("./common_wdio.js"); const { DATA } = require("./data.js"); var isStepFailed = false; const axios = require('axios').default; var expect = require('chai'); var assert = require('assert'); var windowSize = null; var STOP_ON_ERROR = true; var DEFAULT_TIMEOUT=8000; var DEFAULT_TIMEOUT_MID=3000; var DEFAULT_TIMEOUT_MIN=500; /********* ELEMENTS ********/ var ELEMENT = { ///////LOGIN EKRANI///////// Atla: "(//*[contains(@value,'Atla') or contains(@name,'Atla') or contains(@label,'Atla')])[1]", //TxtCountry: "XCUIElementTypeButton[1]", //ülke kodu alanın tıklama Devam:"//XCUIElementTypeButton[@name=\"Devam Et\"]", Kaydol: "//XCUIElementTypeButton[@name=\"Kaydol\"]", Text: "~7/24 HIZLI VE GÜVENLİ PARA GÖNDER", KaydolID : "Kaydol", ButonXpath : "//XCUIElementTypeApplication[@name='ZiraatPay Test']/XCUIElementTypeWindow/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeScrollView/XCUIElementTypeOther[1]/XCUIElementTypeOther[3]/XCUIElementTypeOther/XCUIElementTypeOther[1]/XCUIElementTypeOther[2]/XCUIElementTypeTextField", ButonXpath1 :"//*[contains(@type,'XCUIElementTypeTextField')]" } var currentRandomGsmNo ="5"+(Math.floor(Math.random() * (999999999 - 100000000) + 100000000)); var currentGsmNo_1 = "90" + currentRandomGsmNo; exports.setLoginMethods = (driver) => { driver.addCommand('test',() => { return driver.log("test denemem"); }); driver.addCommand('exam', () => { try { driver.login(1123,12321) driver.log(randomNumber(5,100)) driver.pause(DEFAULT_TIMEOUT_MID) driver.swipeDownClubDetail() driver.swipe(100,200,250,500,1000) driver.log('Starting test suite 1...') driver.$("~Allow").click() driver.save() }catch(err){ driver.log("**********************************") } /* const elem = driver.$("(//*[contains(@value,'Atla') or contains(@name,'Atla') or contains(@label,'Atla')])[1]") expect(elem).toBeDisplayed() */ var degs=driver.$("") if(degs){ driver.$(ELEMENT.Atla).click() driver.pause(1500) driver.log('Starting test suite 2...') driver.performTouchAction(100,200,300,600) driver.saveScreen() clickIfExists(ELEMENT.Devam) driver.$(ELEMENT.Devam, DEFAULT_TIMEOUT).click() driver.pause(1500) driver.saveScreen() driver.$(ELEMENT.Kaydol, DEFAULT_TIMEOUT).click() driver.pause(1500) driver.saveScreen() driver.log("rerererererere") driver.$(ELEMENT.Kaydol, DEFAULT_TIMEOUT) .setValue("test") driver.pause(1500) driver.saveScreen() driver.$(ELEMENT.Text, DEFAULT_TIMEOUT) .click() driver.pause(1500) driver.saveScreen() driver.$(ELEMENT.Text, DEFAULT_TIMEOUT) .setValue("test") driver.pause(1500) driver.save() driver.udid() }else{ driver.log("************************") } // driver .log(randomNumber(15000,15000000)) // driver .log(randomName()) }); driver.addCommand('udid', () => { //var randomGsm = currentGsmNo; //----------SET DATA---------- var currentGsmNo1 = "90" + currentRandomGsmNo; return new Promise((resolve, reject) => { var accessToken = 0; //----------SET REQUEST BODY---------- var requestBody = { 'GSM_NO': currentGsmNo1, } driver.log("API Request Body: " + JSON.stringify(requestBody)); //----------SET REQUEST HEADERS---------- var config = { headers: { 'Content-Type': 'application/json', } } driver.log("API Request Headers: " + JSON.stringify(config)); //----------API CALL-1 - GET CUSTOMER ---------- return axios.post("https://mobiltest.ziraatpay.com.tr/test_mGetCustomer", requestBody, config) .then(function(response) { driver.log(response.status); driver.log(response.data.RESPONSECODE); driver.log(response.data.RESPONSECODEDESC); driver.log(currentGsmNo1+":"+" / "+"UDID "+": "+response.data.DATA.PROFILE[0].UDID); driver.log(currentGsmNo1+":"+" / "+"WALLET NO "+": "+response.data.DATA.WALLET[0].WALLET_NO); driver.log(currentGsmNo1+":"+" / "+"TOKEN "+": "+response.data.DATA.TOKEN); resolve(response); var token = response.data.DATA.TOKEN; var walletNo = response.data.DATA.WALLET[0].WALLET_NO; //----------SET REQUEST BODY 2---------- var requestBody1 = { "WALLET_NO": walletNo, "AMOUNT":"99000", "TRX_TYPE_CODE" : "072", "TRX_TYPE_SUBCODE" : "1" } driver.log("API Request Body Cüzdan Para Yükleme: " + JSON.stringify(requestBody1)); //----------SET REQUEST HEADERS- 2--------- var config1 = { headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + token } } driver.log("API Request Headers Cüzdan Para Yükleme: " + JSON.stringify(config1)); //----------API CALL-2 - WALLET ---------- return axios.post("https://mobiltest.ziraatpay.com.tr/test_mCustomerGetAuthorization", requestBody1, config1) .then(function(response) { driver.log("CÜZDANA PARA YÜKLEME: " + JSON.stringify(response.data)); //----------SET REQUEST BODY 3---------- var requestBody2 = { "GSM_NO": currentGsmNo1, "STEP_NO": 4 } driver.log("API Request Body Kimlik Doğrulama: " + JSON.stringify(requestBody2)); //----------SET REQUEST HEADERS 3---------- var config2 = { headers: { 'Content-Type': 'application/json' } } driver.log("API Request Headers Kimlik Doğrulama: " + JSON.stringify(config2)); //----------API CALL-3 - WALLET ---------- return axios.post("https://mobiltest.ziraatpay.com.tr/testSetVerificationStep", requestBody2, config2) .then(function(response) { driver.log("Kimlik doğrulama: " + JSON.stringify(response.data)); }) .catch((error) => { driver.log("API ERROR response: " + error); resolve(null); }); }) .catch((error) => { driver.log("API ERROR response: " + error); resolve(null); }); }) .catch((error) => { driver.log("API ERROR response: " + error); resolve(null); }); }) }); function clickIfExists(selector) { var elementExists = driver.$(selector).isExisting(); if (elementExists) { driver.log(`Clicking on element with selector: ${selector}`); driver.$(selector).click(); // You can add additional actions after clicking the element } else { driver.log(`Element with selector ${selector} is not present.`); // Take another action if the element is not present } } }

 

image-20240310-194857.png

 

4-Create a new Case with Javascript - WebdriverIO 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

 

New view in console log in test results with WebdriverIO.