Best JavaScript code snippet using appium-android-driver
Steps.js
Source:Steps.js
1import { Then, Given, When} from "cucumber";2import Payments from "../../page-objects/Payments/Payments";3import axios from 'axios'4import { Gestures } from '../../../helpers/Gestures'5//'./helpers/Gestures.js'6var chai = require('chai');7var sinon = require('sinon-chai');8chai.use(require('sinon-chai'));9Given(/^Usuario realiza login (.*)$/, 10function (email) {11 console.log(" USUARIO REALIZA LOGIN");12 13var deviceId = Payments.getText("//*[contains(@content-desc, 'deviceId:')]");14var linkAccountTokenPath = Payments.getText("//*[contains(@content-desc, 'magicLinkBaseUrl:')]")15var actionToken16var appBundleId17var environment18var urlLinkAccount19console.log("getCurrentDevice id: "+deviceId);20appBundleId = driver.getCurrentPackage();21console.log("getCurrentPackage id: "+appBundleId);22// ar.com.bdsol.bds.squads.yellow23environment= appBundleId.slice(17,20)24console.log("getCurrent Environment: "+environment);25// urlLinkAccount= "https://bff-mobile-"+environment+".bdsdigital.com.ar/api/auth/link-account-token";26urlLinkAccount= "https://bff-mobile-int.bdsdigital.com.ar/api/auth/link-account-token";27console.log("getCurrent urlLinkAccount: "+urlLinkAccount);28 axios.post(urlLinkAccount, { // auth-int.bdsdigital29 deviceId,30 email,31 appBundleId //: "ar.com.bdsol.bds.integration"//"ar.com.bdsol.bds.uat"//32 }).then(resp => {33 actionToken =resp.data.actionToken;34 console.log("action token : "+actionToken);35 console.log("getCurrent resp.data: "+resp.data);36 browser.url(linkAccountTokenPath+"/link-account?token="+actionToken);// open-uat37 // driver.url("https://open-int.bdsdigital.com.ar/link-account?token="+actionToken);38 });39});40Given(/^usuario swipea (.*)$/, 41function (elemento) {42 var label='~';43 // var selector =label+element44 // driver.touchScroll(10, 100, element);45 // AppiumDriver.performTouch() with args: [[46 // {"action":"press","options":{"x":1034,"y":1188}},{"action":"wait","options":{"ms":500}},{"action":"moveTo","options":{"x":677,"y":1177}},{"action":"release","options":{}}],"13019aae-2e08-49f1-b4fe-4dfb12d2b4b3"]47 // driver.touchPerform([48 // { action: 'press', options: { x: 1034, y: 1188 }},49 // { action: 'moveTo', options: { x: 677, y: 1177 }},50 // { action: 'release' }51 // { action: 'press', options: [Object] },52 // { action: 'moveTo', options: [Object] },53 // { action: 'release' }54 // ]);55 // Payments.sistemaIndica(label.concat(fileName));56 Payments.sistemaIndica(elemento)57 58 // $(elemento).touchAction([59 // 'press',60 // { action: 'moveTo', x: 0, y: 632 },61 // 'release'62 // ])63 // browser.touchAction([64 // { action: 'press', x: 600, y: 600 },65 // { action: 'moveTo', x: 100, y: 600 },66 // 'release'67 // ])68 69 console.log('Localization x: '+$(elemento).getLocation('x'));70 let xpos = $(elemento).getLocation('x') +10071 console.log('Localization y: '+$(elemento).getLocation('y')); 72 let ypos = $(elemento).getLocation('y') +10073 driver.touchPerform([74 { action: 'press', options: { x: xpos, y: ypos }},75 {76 action: "wait",77 options: { ms: 1000 }78 },79 { action: 'moveTo', options: { x: xpos-100, y: ypos }},80 { action: 'release' }81 ]);82 driver.pause(1000);83});84// Given(/^Login con usuario (.*)$/, mail => {85// Payments.sistemaIndica('~¡Bienvenido!')86// deviceId = $('~deviceId').getText().trim();87// magicLinkBaseUrl = $('~magicLinkBaseUrl').getText().trim()88// const actionToken = browser.call(() => linkAccountToken(mail, deviceId));89// browser.url(`${magicLinkBaseUrl}/link-account?token=${actionToken}`);90// });91Given(/^Usuario selecciona (.*)$/, 92function (fileName) {93 var label='~';94 label.concat(fileName);95 Payments.usuarioSelecciona(label.concat(fileName));96});97Given(/^Usuario recibe notificacion beneficios (.*)$/, 98function (nroBenef) {99 var customerId="16"100 var campaignId="LOYALTY_PROGRAM_20"101 var completedStepId="TRANSFERS"102 var completedStepsCount=nroBenef103 var payload={campaignId,completedStepId,completedStepsCount}104 105 axios.post('https://notifications-yellow.bdsdigital.com.ar/campaigns/notify-completed-step', { 106 customerId,107 payload108 }).then();109});110Given(/^Sistema indica (.*)$/, 111function (fileName) {112 var label='~';113 label.concat(fileName);114 Payments.sistemaIndica(label.concat(fileName));115});116Given(/^Wait (.*) seconds$/, 117function (time) {118 Payments.waitTIme(time);119});120Given(/^usuario abre notificaciones$/, 121function () {122 driver.openNotifications();123 124});125 126When(/^usuario selecciona (.*)$/, 127function (fileName) {128 var label='~';129 label.concat(fileName); 130 // Agendar servicio131 if(fileName=='Agendar servicio')132 {133 if(browser.config.capabilities.browserName=='iOS')134 {135 Payments.usuarioPresiona('(//XCUIElementTypeOther[@name="Agendar servicio"])[2]/XCUIElementTypeOther'); 136 } else {137 Payments.usuarioPresiona('/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup[2]/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.widget.FrameLayout/android.view.ViewGroup/android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[1]/android.view.ViewGroup[4]/android.view.ViewGroup'); 138 }139 } else {140 Payments.usuarioSelecciona(label.concat(fileName)); 141 }142 143});144Given(/^usuario cierra notificaciones$/, 145 function () {146 driver.pressKeyCode(4);147 148 });149When(/^usuario copia el valor (.*)$/, 150function (valorCopiado) {151 var clipboard =driver.getClipboard().trim();;152console.log(clipboard)153 if(valorCopiado==clipboard)154 {155 } else {156 new Error('oh no' + driver.getClipboard())157 }158});159When(/^usuario presiona Xpath (.*)$/, 160function (fileName) {161 Payments.usuarioPresiona(fileName);162});163When(/^sistema muestra Xpath (.*)$/, 164function (fileName) {165 Payments.sistemaIndicaXpath(fileName);166});167When(/^sistema no muestra Xpath (.*)$/, 168function (fileName) {169 Payments.sistemaNOIndicaXpath(fileName);170});171When(/^sistema indica Xpath (.*)$/, 172function (fileName) {173 Payments.sistemaIndicaXpath(fileName);174});175When(/^sistema muestra xpath (.*) con texto (.*)$/, 176function (fileName,texto) {177 Payments.sistemaIndicaXpathConTexto(fileName, texto);178});179When(/^sistema indica (.*)$/, 180function (fileName) {181 var label='~';182 label.concat(fileName);183 Payments.sistemaIndica(label.concat(fileName));184});185When(/^sistema no muestra el valor (.*)$/, 186function (fileName) {187 var label='~';188 label.concat(fileName);189 Payments.sistema_no_muestra_el_valor(label.concat(fileName));190});191Then(/^Usuario selecciona (.*)$/, 192function (fileName) {193 var label='~';194 label.concat(fileName);195 Payments.usuarioSelecciona(label.concat(fileName));196});197Then(/^usuario verifica monto a pagar (.*) en el campo (.*)$/, 198function (factura, montoAPagar) {199 Payments.usuarioVerificaMonto(factura, );200});201Then(/^Sistema indica (.*)$/, 202function (fileName) {203 var label='~';204 label.concat(fileName);205 Payments.sistemaIndica(label.concat(fileName));206});207 208When(/^usuario completa el campo (.*) con el valor (.*)$/, 209function (fileName, valor) {210 var label='~';211 label.concat(fileName);212 Payments.usuario_completa_el_campo(label.concat(fileName), valor);213});214When(/^usuario completa campo xpath (.*) con el valor (.*)$/, 215function (fileName, valor) {216 Payments.usuario_completa_el_campo(fileName, valor);217});218When(/^usuario presiona borrar (.*) veces$/, 219function (cant) {220 if(browser.config.capabilities.browserName=='iOS')221 {222 console.log("ESTA EN IOS");223 var label='~';224 for (var i = 0; i < cant; i++) {225 Payments.usuario_completa_el_campo(label.concat('Ingresa el monto a pagar'), '\b');226 }227 228 } else {229 console.log("ESTA EN ANDROID");230 for (var i = 0; i < cant; i++) {231 driver.pressKeyCode(67);232 }233 }234 235});236When(/^usuario swipea elemento (.*) a la izquierda$/, 237function (element) {238 $("~"+element).touchAction({239 action: 'tap', x: 30, y:20240 })241 242});243Given(/^CloseSystemUIisntResponding$/, 244 function () {245 var fileName ="android:id/aerr_close"246 var label='~';247 try {248 Payments.usuarioSelecciona(label.concat(fileName));249 Payments.usuarioSelecciona(label.concat(fileName));250 Payments.usuarioSelecciona(label.concat(fileName));251 } catch (error) {252 console.log(error);253 }254 255 });256 257When(/^usuario presiona Boton Volver Atras$/, 258function () {259 driver.pressKeyCode(4); 260});261When(/^usuario ingresa el valor (.*) al campo (.*)$/, 262function (value, label) {263 // console.log(driver.sessionCapabilities());264 console.log(browser.config.capabilities.browserName);265 // iOS266 // Android267 if(browser.config.capabilities.browserName=='iOS')268 {269 console.log("ESTA EN IOS");270 var labelTag='~';271 Payments.usuario_completa_el_campo(labelTag.concat(label), value);272 } else {273 console.log("ESTA EN ANDROID");274 var labelTag='~';275 Payments.usuarioSelecciona(labelTag.concat(label));276 for (var i = 0; i < value.length; i++) { 277 switch (value.charAt(i)) {278 case '0':279 driver.pressKeyCode(7);280 break; 281 case '1':282 driver.pressKeyCode(8);283 break;284 case '2':285 driver.pressKeyCode(9);286 break;287 case '3':288 driver.pressKeyCode(10);289 break;290 case '4':291 driver.pressKeyCode(11);292 break;293 case '5':294 driver.pressKeyCode(12);295 break;296 case '6':297 driver.pressKeyCode(13);298 break;299 case '7':300 driver.pressKeyCode(14);301 break;302 case '8':303 driver.pressKeyCode(15);304 break;305 case '9':306 driver.pressKeyCode(16);307 break;308 default: 309 } }310 }311 312});313When(/^Reset wiremock$/, 314function () {315 316 if(browser.config.capabilities.browserName=='iOS')317 {318 console.log("ESTA EN IOS");319 axios.post("http://localhost:9999/__admin/mappings/reset").then(resp => {320 console.log(resp.data);321 });322 } else {323 console.log("ESTA EN ANDROID");324 axios.post("http://localhost:8080/__admin/mappings/reset ").then(resp => {325 console.log(resp.data);326 });327 }328 driver.reset();329});330When(/^sistema muestra elemento (.*) con texto (.*)$/, 331function (field, valor) {332 var label='~';333 Payments.sistema_muestra_elemento_con_texto(label.concat(field), valor);334 335});336When(/^usuario scrolea hacia (.*)$/, 337function (element) {338 // var label='~';339 driver.touchScroll(10, 100, element);340 341});342// @Given("^Get to wiremock (.*)$")343// public void reset_wiremock(String url){344// //__admin/reset345// given().when().get("http://localhost:8080"+url).then().statusCode(200);346// }347When(/^Get to wiremock (.*)$/, 348 function (url) {349 if(browser.config.capabilities.browserName=='iOS')350 {351 console.log("ESTA EN IOS");352 axios.get("http://localhost:9999"+url).then(resp => {353 console.log(resp.data);354 });355 } else {356 console.log("ESTA EN ANDROID");357 axios.get("http://localhost:8080"+url).then(resp => {358 console.log(resp.data);359 });360 }361 362 });...
image-element.js
Source:image-element.js
...181 action: 'tap',182 options: {x, y}183 };184 if (driver.performTouch) {185 return await driver.performTouch([action]);186 }187 throw new Error("Driver did not implement the 'performTouch' command. " +188 'For drivers to support finding image elements, they ' +189 "should support 'performTouch' and 'performActions'");190 }191 /**192 * Handle various Appium commands that involve an image element193 *194 * @param {BaseDriver} driver - the driver to use for commands195 * @param {string} cmd - the name of the driver command196 * @param {string} imgElId - the id of the ImageElement to work with197 * @param {Array} args - Rest of arguments for executeScripts198 *199 * @returns {Object} - the result of running a command...
unlock-helpers.js
Source:unlock-helpers.js
...70 {action: 'press', options: {element: null, x: x0, y: y0}},71 {action: 'moveTo', options: {element: null, x: x0, y: yP}},72 {action: 'release'}73 ];74 await driver.performTouch(actions);75};76helpers.encodePassword = function encodePassword (key) {77 return key.replace(/\s/ig, '%s');78};79helpers.stringKeyToArr = function stringKeyToArr (key) {80 return key.trim().replace(/\s+/g, '').split(/\s*/);81};82helpers.fingerprintUnlock = async function fingerprintUnlock (adb, driver, capabilities) {83 if (await adb.getApiLevel() < 23) {84 throw new Error('Fingerprint unlock only works for Android 6+ emulators');85 }86 await adb.fingerprint(capabilities.unlockKey);87 await sleep(UNLOCK_WAIT_TIME);88};89helpers.pinUnlock = async function pinUnlock (adb, driver, capabilities) {90 logger.info(`Trying to unlock device using pin ${capabilities.unlockKey}`);91 await helpers.dismissKeyguard(driver, adb);92 let keys = helpers.stringKeyToArr(capabilities.unlockKey);93 if (await adb.getApiLevel() >= 21) {94 let els = await driver.findElOrEls('id', 'com.android.systemui:id/digit_text', true);95 if (_.isEmpty(els)) {96 throw new Error('Error finding unlock pin buttons!');97 }98 let pins = {};99 for (let el of els) {100 let text = await driver.getAttribute('text', util.unwrapElement(el));101 pins[text] = el;102 }103 for (let pin of keys) {104 let el = pins[pin];105 await driver.click(util.unwrapElement(el));106 }107 } else {108 for (let pin of keys) {109 let el = await driver.findElOrEls('id', `com.android.keyguard:id/key${pin}`, false);110 if (el === null) {111 throw new Error(`Error finding unlock pin '${pin}' button!`);112 }113 await driver.click(util.unwrapElement(el));114 }115 }116 // Some devices accept entering the code without pressing the Enter key117 // When I rushed commands without this wait before pressKeyCode, rarely UI2 sever crashed118 await sleep(UNLOCK_WAIT_TIME);119 if (await adb.isScreenLocked()) {120 await driver.pressKeyCode(KEYCODE_NUMPAD_ENTER);121 await sleep(UNLOCK_WAIT_TIME);122 }123};124helpers.passwordUnlock = async function passwordUnlock (adb, driver, capabilities) {125 logger.info(`Trying to unlock device using password ${capabilities.unlockKey}`);126 await helpers.dismissKeyguard(driver, adb);127 let key = capabilities.unlockKey;128 // Replace blank spaces with %s129 key = helpers.encodePassword(key);130 // Why adb ? It was less flaky131 await adb.shell(['input', 'text', key]);132 // Why sleeps ? Avoid some flakyness waiting for the input to receive the keys133 await sleep(INPUT_KEYS_WAIT_TIME);134 await adb.shell(['input', 'keyevent', KEYCODE_NUMPAD_ENTER]);135 // Waits a bit for the device to be unlocked136 await sleep(UNLOCK_WAIT_TIME);137};138helpers.getPatternKeyPosition = function getPatternKeyPosition (key, initPos, piece) {139 /*140 How the math works:141 We have 9 buttons divided in 3 columns and 3 rows inside the lockPatternView,142 every button has a position on the screen corresponding to the lockPatternView since143 it is the parent view right at the middle of each column or row.144 */145 const cols = 3;146 const pins = 9;147 let xPos = (key, x, piece) => {148 return Math.round(x + ((key % cols) || cols) * piece - piece / 2);149 };150 let yPos = (key, y, piece) => {151 return Math.round(y + (Math.ceil(((key % pins) || pins) / cols) * piece - piece / 2));152 };153 return {x: xPos(key, initPos.x, piece), y: yPos(key, initPos.y, piece)};154};155helpers.getPatternActions = function getPatternActions (keys, initPos, piece) {156 let actions = [];157 let lastPos;158 for (let key of keys) {159 let keyPos = helpers.getPatternKeyPosition(key, initPos, piece);160 if (key === keys[0]) {161 actions.push({action: 'press', options: {element: null, x: keyPos.x, y: keyPos.y}});162 lastPos = keyPos;163 continue;164 }165 let moveTo = {x: 0, y: 0};166 let diffX = keyPos.x - lastPos.x;167 if (diffX > 0) {168 moveTo.x = piece;169 if (Math.abs(diffX) > piece) {170 moveTo.x += piece;171 }172 } else if (diffX < 0) {173 moveTo.x = -1 * piece;174 if (Math.abs(diffX) > piece) {175 moveTo.x -= piece;176 }177 }178 let diffY = keyPos.y - lastPos.y;179 if (diffY > 0) {180 moveTo.y = piece;181 if (Math.abs(diffY) > piece) {182 moveTo.y += piece;183 }184 } else if (diffY < 0) {185 moveTo.y = -1 * piece;186 if (Math.abs(diffY) > piece) {187 moveTo.y -= piece;188 }189 }190 actions.push({action: 'moveTo', options: {element: null, x: moveTo.x + lastPos.x, y: moveTo.y + lastPos.y}});191 lastPos = keyPos;192 }193 actions.push({action: 'release'});194 return actions;195};196helpers.patternUnlock = async function patternUnlock (adb, driver, capabilities) {197 logger.info(`Trying to unlock device using pattern ${capabilities.unlockKey}`);198 await helpers.dismissKeyguard(driver, adb);199 let keys = helpers.stringKeyToArr(capabilities.unlockKey);200 /* We set the device pattern buttons as number of a regular phone201 * | ⢠⢠⢠| | 1 2 3 |202 * | ⢠⢠⢠| --> | 4 5 6 |203 * | ⢠⢠⢠| | 7 8 9 |204 The pattern view buttons are not seeing by the uiautomator since they are205 included inside a FrameLayout, so we are going to try clicking on the buttons206 using the parent view bounds and math.207 */208 let apiLevel = await adb.getApiLevel();209 let el = await driver.findElOrEls('id',210 `com.android.${apiLevel >= 21 ? 'systemui' : 'keyguard'}:id/lockPatternView`,211 false212 );213 let initPos = await driver.getLocation(util.unwrapElement(el));214 let size = await driver.getSize(util.unwrapElement(el));215 // Get actions to perform216 let actions = helpers.getPatternActions(keys, initPos, size.width / 3);217 // Perform gesture218 await driver.performTouch(actions);219 // Waits a bit for the device to be unlocked220 await sleep(UNLOCK_WAIT_TIME);221};222helpers.PIN_UNLOCK = PIN_UNLOCK;223helpers.PASSWORD_UNLOCK = PASSWORD_UNLOCK;224helpers.PATTERN_UNLOCK = PATTERN_UNLOCK;225helpers.FINGERPRINT_UNLOCK = FINGERPRINT_UNLOCK;226export { PIN_UNLOCK, PASSWORD_UNLOCK, PATTERN_UNLOCK, FINGERPRINT_UNLOCK, helpers };...
touch-specs.js
Source:touch-specs.js
...13 } catch (ign) {}14 if (!map) {15 let buttons = await driver.findElements('class name', 'UIAButton');16 let gestures = [{action: 'tap', options: {element: buttons[5].ELEMENT}}];17 await driver.performTouch(gestures);18 await B.delay(500);19 await okIfAlert(driver);20 await B.delay(500);21 }22 }23 describe('tap', function () {24 it('should tap on a specified element', async function () {25 let buttons = await driver.findElements('class name', 'UIAButton');26 let gestures = [{action: 'tap', options: { element: buttons[1].ELEMENT}}];27 await driver.performTouch(gestures);28 await B.delay(1000);29 await okIfAlert(driver);30 });31 });32 describe('wait', function () {33 it('should move the page and wait a bit', async function () {34 await goToMap();35 let map = await driver.findElement('xpath', '//UIAMapView');36 let gestures = [37 {action: 'press', options: {element: map.ELEMENT}},38 {action: 'moveTo', options: {element: map.ELEMENT, x: 0, y: 100}},39 {action: 'wait', options: {ms: 5000}},40 {action: 'moveTo', options: {element: map.ELEMENT, x: 0, y: 0}},41 {action: 'release'}42 ];43 await driver.performTouch(gestures);44 });45 });46 describe('pinch', function () {47 it('should do some pinching', async function () {48 await goToMap();49 let map = await driver.findElement('xpath', '//UIAMapView');50 let actions = [51 [52 {action: 'press', options: {element: map.ELEMENT}},53 {action: 'moveTo', options: {element: map.ELEMENT, x: 0, y: 0}},54 {action: 'release'}55 ],56 [57 {action: 'press', options: {element: map.ELEMENT}},58 {action: 'moveTo', options: {element: map.ELEMENT, x: 100, y: 100}},59 {action: 'release'}60 ],61 ];62 await driver.performMultiAction(actions);63 await B.delay(1000);64 });65 it('should do more involved pinching in and out', async function () {66 await goToMap();67 let map = await driver.findElement('xpath', '//UIAMapView');68 let actions = [69 [70 {action: 'press', options: {element: map.ELEMENT}},71 {action: 'moveTo', options: {element: map.ELEMENT, x: 25, y: 25}},72 {action: 'wait', options: {ms: 3000}},73 {action: 'moveTo', options: {element: map.ELEMENT, x: 100, y: 100}},74 {action: 'release'}75 ],76 [77 {action: 'press', options: {element: map.ELEMENT}},78 {action: 'moveTo', options: {element: map.ELEMENT, x: 100, y: 0}},79 {action: 'wait', options: {ms: 3000}},80 {action: 'moveTo', options: {element: map.ELEMENT, x: 0, y: 0}},81 {action: 'release'}82 ],83 ];84 await driver.performMultiAction(actions);85 await B.delay(1000);86 });87 });88});89describe('testapp - swipe actions', function () {90 let session = setup(this, desired);91 let driver = session.driver;92 describe('swipe', function () {93 let slider, target, loc;94 let leftPos = { x: 0, y: 0 },95 rightPos = { x: 0, y: 0 },96 centerPos = { x: 0, y: 0 };97 let getNumericValue = function (pctVal) {98 pctVal = pctVal.replace('%', '');99 pctVal = parseInt(pctVal, 10);100 return pctVal;101 };102 let testSliderValueNot0or100 = function (value) {103 value = getNumericValue(value);104 // should be ~50105 value.should.be.above(15);106 value.should.be.below(85);107 };108 let getSliderValue = async function () {109 return await driver.getAttribute('value', slider);110 };111 before(async function () {112 slider = await driver.findElement('class name', 'UIASlider');113 loc = await driver.getLocation(slider);114 let size = await driver.getSize(slider);115 leftPos.x = loc.x - 5;116 centerPos.x = loc.x + (size.width * 0.5);117 rightPos.x = loc.x + size.width + 5;118 leftPos.y = rightPos.y = centerPos.y = loc.y + (size.height * 0.5);119 target = await driver.findElement('accessibility id', "Access'ibility");120 testSliderValueNot0or100(await getSliderValue());121 });122 // TODO: For some reason it does not swipe to 100% in ci env, investigate123 it('should work with: press {element}, moveTo {destEl} @skip-ci', async function () {124 let origValue = await getSliderValue();125 let gestures = [126 {action: 'press', options: {element: slider.ELEMENT}},127 {action: 'wait', options: {ms: 500}},128 {action: 'moveTo', options: {element: target.ELEMENT}},129 {action: 'release'}130 ];131 await driver.performTouch(gestures);132 (await getSliderValue()).should.not.equal(origValue);133 await B.delay(1000);134 // TODO: in ios84 the destEl is in a weird place, so we don't test value135 //(await getSliderValue()).should.equal("100%")136 });137 it('should work with: press {element, x, y}, moveTo {element, x, y}', async function () {138 let gestures = [139 {action: 'press', options: {element: slider.ELEMENT, x: 0.8665, y: 0.5}},140 {action: 'wait', options: {ms: 500}},141 {action: 'moveTo', options: {element: slider.ELEMENT, x: 0.5, y: 0.5}},142 {action: 'release'}143 ];144 await driver.performTouch(gestures);145 testSliderValueNot0or100(await getSliderValue());146 await B.delay(1000);147 });148 it('should work with: press {x, y}, moveTo {x, y}', async function () {149 let gestures = [150 {action: 'press', options: {x: centerPos.x, y: centerPos.y}},151 {action: 'wait', options: {ms: 500}},152 {action: 'moveTo', options: {x: leftPos.x - centerPos.x, y: leftPos.y - centerPos.y}},153 {action: 'release'}154 ];155 await driver.performTouch(gestures);156 (await getSliderValue()).should.equal('0%');157 });158 it('should work with: {element, x, y}, moveTo {destEl, x, y} @skip-ci', async function () {159 let gestures = [160 {action: 'press', options: {element: slider.ELEMENT, x: 0, y: 0.5}},161 {action: 'wait', options: {ms: 500}},162 {action: 'moveTo', options: {element: target.ELEMENT, x: 50, y: 0.5}},163 {action: 'release'}164 ];165 await driver.performTouch(gestures);166 testSliderValueNot0or100(await getSliderValue());167 });168 // TODO: Crashes in ci env, investigate169 // TODO: For some reason it does not swipe to 100% in ci env, investigate170 it('should work with press {x, y}, moveTo {destEl} @skip-ci', async function () {171 let origValue = await getSliderValue();172 let gestures = [173 {action: 'press', options: {x: centerPos.x, y: centerPos.y}},174 {action: 'wait', options: {ms: 500}},175 {action: 'moveTo', options: {element: target.ELEMENT}},176 {action: 'release'}177 ];178 await driver.performTouch(gestures);179 (await getSliderValue()).should.not.equal(origValue);180 // TODO: weird element position in iOS 8.4 so not checking exact value.181 //.then(getSliderValue).should.become("100%")182 });183 });...
drag-e2e-specs.js
Source:drag-e2e-specs.js
...52 let endEle = await driver.findElement("id", "io.appium.android.apis:id/drag_dot_2");53 let gestures = [{action: "longPress", options: {element: startEle.ELEMENT}},54 {action: "moveTo", options: {element: endEle.ELEMENT}},55 {action: "release", options: {}}];56 await driver.performTouch(gestures);57 let resultEle = await driver.findElement("id", "io.appium.android.apis:id/drag_result_text");58 await driver.getText(resultEle.ELEMENT).should.eventually.equal("Dropped!");59 });60 it('should drag by element by offset', async () => {61 let startEle = await driver.findElement("id", "io.appium.android.apis:id/drag_dot_3");62 let endEle = await driver.findElement("id", "io.appium.android.apis:id/drag_dot_2");63 let gestures = [{action: "longPress",64 options: {element: startEle.ELEMENT, x: 5, y: 5}},65 {action: "moveTo", options:66 {element: endEle.ELEMENT, x: 5, y: 5}},67 {action: "release", options: {}}];68 await driver.performTouch(gestures);69 let element3 = await driver.findElement("id", "io.appium.android.apis:id/drag_result_text");70 await driver.getText(element3.ELEMENT).should.eventually.equal("Dropped!");71 });72 it('should drag by absolute position', async () => {73 let startEle = await driver.findElement("id", "io.appium.android.apis:id/drag_dot_3");74 let startLoc = await driver.getLocationInView(startEle.ELEMENT);75 let startSize = await driver.getSize(startEle.ELEMENT);76 let endEle = await driver.findElement("id", "io.appium.android.apis:id/drag_dot_2");77 let endLoc = await driver.getLocationInView(endEle.ELEMENT);78 let endSize = await driver.getSize(endEle.ELEMENT);79 let gestures = [{action: "longPress",80 options: {x: startLoc.x + (startSize.width / 2),81 y: startLoc.y + (startSize.height / 2)}},82 {action: "moveTo",83 options: {x: endLoc.x + (endSize.width / 2),84 y: endLoc.y + (endSize.height / 2)}},85 {action: "release", options: {}}];86 await driver.performTouch(gestures);87 let resultEle = await driver.findElement("id", "io.appium.android.apis:id/drag_result_text");88 await driver.getText(resultEle.ELEMENT).should.eventually.equal("Dropped!");89 });90 });...
gesture-specs.js
Source:gesture-specs.js
...10 it('should send POST request to /tap on WDA when no element is given', async () => {11 let actions = [12 {action: 'tap'}13 ];14 await driver.performTouch(actions);15 proxySpy.calledOnce.should.be.true;16 proxySpy.firstCall.args[0].should.eql('/tap/0');17 proxySpy.firstCall.args[1].should.eql('POST');18 });19 it('should send POST request to /tap/element on WDA', async () => {20 let actions = [21 {action: 'tap', options: {element: 42}}22 ];23 await driver.performTouch(actions);24 proxySpy.calledOnce.should.be.true;25 proxySpy.firstCall.args[0].should.eql('/tap/42');26 proxySpy.firstCall.args[1].should.eql('POST');27 });28 it('should send POST request to /tap/element with offset on WDA', async () => {29 let actions = [30 {action: 'tap', options: {element: 42, x: 1, y: 2}}31 ];32 await driver.performTouch(actions);33 proxySpy.calledOnce.should.be.true;34 proxySpy.firstCall.args[0].should.eql('/tap/42');35 proxySpy.firstCall.args[1].should.eql('POST');36 });37 });38 describe('mobile methods', () => {39 describe('anything other than scroll', () => {40 it('should throw an error', async () => {41 await driver.execute('mobile: somesuch').should.be.rejected;42 });43 });44 describe('scroll', () => {45 it('should throw an error if no scroll type is specified', async () => {46 await driver.execute('mobile: scroll', {element: 4})...
Using AI Code Generation
1var wd = require('wd');2var assert = require('assert');3var desired = {4};5wd.addPromiseChainMethod('performTouch', function() {6 .execute("mobile: performTouch", [{action: 'press', options: {x: 100, y: 100}}])7 .sleep(1000)8 .execute("mobile: performTouch", [{action: 'moveTo', options: {x: 100, y: 200}}])9 .sleep(1000)10 .execute("mobile: performTouch", [{action: 'release'}])11 .sleep(1000)12 .execute("mobile: performTouch", [{action: 'tap', options: {x: 100, y: 100}}])13 .sleep(1000)14 .execute("mobile: performTouch", [{action: 'tap', options: {x: 100, y: 100, count: 2}}])15 .sleep(1000)16 .execute("mobile: performTouch", [{action: 'tap', options: {element: "1"}}])17 .sleep(1000)18 .execute("mobile: performTouch", [{action: 'tap', options: {element: "1", count: 2}}])19 .sleep(1000)20 .execute("mobile: performTouch", [{action: 'wait', options: {ms: 1000}}])21 .sleep(1000)22 .execute("mobile: performTouch", [{action: 'longPress', options: {x: 100, y: 100}}])23 .sleep(1000)24 .execute("mobile: performTouch", [{action: 'longPress', options: {element: "1"}}])25 .sleep(1000)26 .execute("mobile: performTouch", [{action: 'longPress', options: {element: "1", duration: 2}}])27 .sleep(1000)28 .execute("mobile: performTouch", [{action: 'cancel'}])29 .sleep(1000)
Using AI Code Generation
1driver.performTouch({2 options: {3 }4});5driver.performTouch({6 options: {7 }8});9driver.performTouch({10 options: {11 }12});13driver.performTouch({14 options: {15 }16});17driver.performTouch({18 options: {19 }20});21driver.performTouch({22 options: {23 }24});25driver.performTouch({26 options: {27 }28});29driver.performTouch({30 options: {31 }32});33driver.performTouch({34 options: {35 }36});37driver.performTouch({38 options: {39 }40});41driver.performTouch({42 options: {
Using AI Code Generation
1var wd = require('wd');2var assert = require('assert');3var desired = {4};5var driver = wd.remote('localhost', 4723);6driver.init(desired, function(err) {7 if (err) throw err;8 driver.performTouch([9 {10 options: {11 }12 },13 {14 options: {15 }16 },17 {18 }19 ], function(err) {20 if (err) throw err;21 driver.quit();22 });23});24at Object.wrappedLogger.errorAndThrow (C:\Users\test\AppData\Roaming25at AndroidDriver.performTouch (C:\Users\test\AppData\Roaming26at AndroidDriver.performTouch (C:\Users\test\AppData\Roaming27at AndroidDriver.performTouch (C:\Users\test\AppData\Roaming28at Object.async.series (C:\Users\test\AppData\Roaming29at Controller.performTouch (C:\Users\test\AppData\Roaming
Using AI Code Generation
1var webdriver = require('selenium-webdriver');2 withCapabilities({3 build();4driver.findElement(webdriver.By.name('q')).sendKeys('Appium');5driver.findElement(webdriver.By.name('btnG')).click();6driver.sleep(2000);7 {action: 'press', options: {element: '1'}},8 {action: 'moveTo', options: {element: '2'}},9 {action: 'release'}10];11driver.performTouch(actions);12 {action: 'press', options: {x: 100, y: 500}},13 {action: 'moveTo', options: {x: 100, y: 100}},14 {action: 'release'}15];16driver.performTouch(actions);17 {action: 'tap', options: {element: '1'}},18 {action: 'tap', options: {x: 100, y: 500}},19 {action: 'longPress', options: {element: '2'}},20 {action: 'longPress', options: {x: 100, y: 500}}21];22driver.performTouch(actions);23 {action: 'press', options: {x: 100, y: 500}},24 {action: 'wait', options: {ms: 1000}},25 {action: 'moveTo', options: {x: 100, y: 100}},26 {action: 'release'}27];28driver.performTouch(actions);
Using AI Code Generation
1driver.performTouch({2 options: {3 }4});5driver.performTouch({6 options: {7 }8});9driver.performTouch({10 options: {11 }12});13driver.performTouch({14 options: {15 }16});17driver.performTouch({18 options: {19 }20});21driver.performTouch({22 options: {23 }24});25driver.performTouch({26 options: {27 }28});
Using AI Code Generation
1var wd = require("wd");2var assert = require("assert");3var desiredCaps = {4};5var driver = wd.promiseChainRemote("localhost", 4723);6 .init(desiredCaps)7 .sleep(5000)8 .elementByAccessibilityId("buttonStartWebview")9 .click()10 .sleep(5000)11 .elementByAccessibilityId("buttonStartWebView")12 .click()13 .sleep(5000)14 .sendKeys("Hello World")15 .sleep(5000)16 .elementByAccessibilityId("buttonStartWebView")17 .click()18 .sleep(5000)19 .click()20 .sleep(5000)21 .performTouchAction('press', {element: '1'})22 .performTouchAction('moveTo', {x: 200, y: 200})23 .performTouchAction('release')24 .sleep(5000)25 .quit();
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!