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.
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
}
}
}
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.