Best JavaScript code snippet using appium-android-driver
element-specs.js
Source:element-specs.js
...23 });24 describe('getAttribute', () => {25 it('should get element attribute', async () => {26 driver.bootstrap.sendAction.withArgs('element:getAttribute').returns('attr_value');27 await driver.getAttribute('attr', 'el1').should.become('attr_value');28 driver.bootstrap.sendAction29 .calledWithExactly('element:getAttribute', {attribute: 'attr', elementId: 'el1'})30 .should.be.true;31 });32 });33 describe('getName', () => {34 it('should get element name', async () => {35 sandbox.stub(driver, 'getAttribute');36 driver.getAttribute.returns('el_name');37 await driver.getName('el1').should.become('el_name');38 driver.getAttribute.calledWithExactly('className', 'el1').should.be.true;39 });40 });41 describe('elementDisplayed', () => {...
image-element-specs.js
Source:image-element-specs.js
1import _ from 'lodash';2import chai from 'chai';3import chaiAsPromised from 'chai-as-promised';4import BaseDriver, { ImageElement } from '../..';5import { makeImageElementCache, getImgElFromArgs } from '../../lib/basedriver/image-element';6import { IMAGE_ELEMENT_PREFIX } from '../../lib/constants';7import sinon from 'sinon';8chai.should();9chai.use(chaiAsPromised);10const defRect = {x: 100, y: 110, width: 50, height: 25};11const defTemplate = 'iVBORasdf';12describe('ImageElement', function () {13 const driver = new BaseDriver();14 describe('.size', function () {15 it('should return the width and height of the image el', function () {16 const el = new ImageElement(defTemplate, defRect);17 el.size.should.eql({width: defRect.width, height: defRect.height});18 });19 });20 describe('.location', function () {21 it('should return the location of the image el', function () {22 const el = new ImageElement(defTemplate, defRect);23 el.location.should.eql({x: defRect.x, y: defRect.y});24 });25 });26 describe('.center', function () {27 it('should return the center location of the image el', function () {28 const el = new ImageElement(defTemplate, defRect);29 el.center.should.eql({30 x: defRect.x + defRect.width / 2,31 y: defRect.y + defRect.height / 232 });33 });34 });35 describe('.asElement', function () {36 it('should get the webdriver object representation of the element', function () {37 const el = new ImageElement(defTemplate, defRect);38 el.asElement('ELEMENT').ELEMENT.should.match(/^appium-image-el/);39 });40 });41 describe('.equals', function () {42 it('should say two image elements with same rect are equal', function () {43 const el1 = new ImageElement('foo', defRect);44 const el2 = new ImageElement('bar', defRect);45 el1.equals(el2).should.be.true;46 el2.equals(el1).should.be.true;47 });48 it('should say two image elements with different rect are not equal', function () {49 const el1 = new ImageElement(defTemplate, {...defRect, x: 0});50 const el2 = new ImageElement(defTemplate, defRect);51 el1.equals(el2).should.be.false;52 el2.equals(el1).should.be.false;53 });54 });55 describe('.click', function () {56 it('should reject an invalid tap strategy', async function () {57 const d = new BaseDriver();58 const el = new ImageElement(defTemplate, defRect);59 await d.settings.update({imageElementTapStrategy: 'bad'});60 await el.click(d).should.eventually.be.rejectedWith(/Incorrect imageElementTapStrategy/);61 });62 it('should try to check for image element staleness, and throw if stale', async function () {63 const d = new BaseDriver();64 sinon.stub(d, 'findByImage').throws();65 const el = new ImageElement(defTemplate, defRect);66 // we need to check for staleness if explicitly requested to do so67 await d.settings.update({68 checkForImageElementStaleness: true,69 autoUpdateImageElementPosition: false70 });71 await el.click(d).should.eventually.be.rejectedWith(/no longer attached/);72 // and also if we are updating the element position73 await d.settings.update({74 checkForImageElementStaleness: false,75 autoUpdateImageElementPosition: true76 });77 await el.click(d).should.eventually.be.rejectedWith(/no longer attached/);78 });79 it('should auto-update element position if requested', async function () {80 const d = new BaseDriver();81 d.performActions = _.noop;82 sinon.stub(d, 'performActions');83 const el = new ImageElement(defTemplate, defRect);84 const newRect = {...defRect, x: defRect.x + 10, y: defRect.y + 5};85 const elPos2 = new ImageElement(defTemplate, newRect);86 sinon.stub(d, 'findByImage').returns(elPos2);87 await d.settings.update({88 autoUpdateImageElementPosition: true,89 });90 el.rect.should.not.eql(newRect);91 await el.click(d);92 el.rect.should.eql(newRect);93 });94 it('should tap the center of an element using w3c actions by default', async function () {95 const d = new BaseDriver();96 d.performActions = _.noop;97 const actionStub = sinon.stub(d, 'performActions');98 const el = new ImageElement(defTemplate, defRect);99 // skip the staleness check for this test100 await d.settings.update({101 checkForImageElementStaleness: false,102 });103 await el.click(d);104 const pointerMoveAction = actionStub.args[0][0][0].actions[0];105 pointerMoveAction.x.should.equal(el.center.x);106 pointerMoveAction.y.should.equal(el.center.y);107 });108 it('should fall back to touchactions if w3c actions do not exist on driver', async function () {109 const d = new BaseDriver();110 d.performTouch = _.noop;111 const actionStub = sinon.stub(d, 'performTouch');112 const el = new ImageElement(defTemplate, defRect);113 // skip the staleness check for this test114 await d.settings.update({115 checkForImageElementStaleness: false,116 });117 await el.click(d);118 const action = actionStub.args[0][0][0].options;119 action.x.should.equal(el.center.x);120 action.y.should.equal(el.center.y);121 });122 it('should use touchactions if requested', async function () {123 const d = new BaseDriver();124 d.performActions = _.noop;125 const w3cStub = sinon.stub(d, 'performActions');126 d.performTouch = _.noop;127 const touchStub = sinon.stub(d, 'performTouch');128 const el = new ImageElement(defTemplate, defRect);129 // skip the staleness check for this test130 await d.settings.update({131 checkForImageElementStaleness: false,132 imageElementTapStrategy: 'touchActions',133 });134 await el.click(d);135 const action = touchStub.args[0][0][0].options;136 action.x.should.equal(el.center.x);137 action.y.should.equal(el.center.y);138 w3cStub.callCount.should.eql(0);139 });140 it('should throw if driver does not implement any type of action', async function () {141 const d = new BaseDriver();142 const el = new ImageElement(defTemplate, defRect);143 // skip the staleness check for this test144 await d.settings.update({145 checkForImageElementStaleness: false,146 });147 await el.click(d).should.eventually.be.rejectedWith(/did not implement/);148 });149 });150 describe('#execute', function () {151 // aGFwcHkgdGVzdGluZw== is 'happy testing'152 const imgEl = new ImageElement(defTemplate, defRect, 0, 'aGFwcHkgdGVzdGluZw==');153 const clickStub = sinon.stub(imgEl, 'click');154 before(function () {155 driver._imgElCache.set(imgEl.id, imgEl);156 clickStub.returns(true);157 });158 after(function () {159 driver._imgElCache.reset();160 clickStub.restore();161 });162 it('should reject executions on elements not in the cache', async function () {163 await ImageElement.execute(driver, 'click', 'appium-image-element-foo')164 .should.eventually.be.rejectedWith(/element could not be located/);165 });166 it('should reject executions for unsupported commands', async function () {167 await ImageElement.execute(driver, 'foobar', imgEl.id)168 .should.eventually.be.rejectedWith(/not yet been implemented/);169 });170 it('should get displayed status of element', async function () {171 await ImageElement.execute(driver, 'elementDisplayed', imgEl.id)172 .should.eventually.be.true;173 });174 it('should get size of element', async function () {175 await ImageElement.execute(driver, 'getSize', imgEl.id)176 .should.eventually.eql({width: defRect.width, height: defRect.height});177 });178 it('should get location of element', async function () {179 await ImageElement.execute(driver, 'getLocation', imgEl.id)180 .should.eventually.eql({x: defRect.x, y: defRect.y});181 });182 it('should get location in view of element', async function () {183 await ImageElement.execute(driver, 'getLocation', imgEl.id)184 .should.eventually.eql({x: defRect.x, y: defRect.y});185 });186 it('should get rect of element', async function () {187 await ImageElement.execute(driver, 'getElementRect', imgEl.id)188 .should.eventually.eql(defRect);189 });190 it('should get score of element', async function () {191 await ImageElement.execute(driver, 'getAttribute', imgEl.id, 'score')192 .should.eventually.eql(0);193 });194 it('should get visual of element', async function () {195 await ImageElement.execute(driver, 'getAttribute', imgEl.id, 'visual')196 .should.eventually.eql('aGFwcHkgdGVzdGluZw==');197 });198 it('should get null as visual of element by default', async function () {199 const imgElement = new ImageElement(defTemplate, defRect);200 driver._imgElCache.set(imgElement.id, imgElement);201 await ImageElement.execute(driver, 'getAttribute', imgElement.id, 'visual')202 .should.eventually.eql(null);203 });204 it('should not get other attribute', async function () {205 await ImageElement.execute(driver, 'getAttribute', imgEl.id, 'content-desc')206 .should.eventually.rejectedWith('Method has not yet been implemented');207 });208 it('should click element', async function () {209 await ImageElement.execute(driver, 'click', imgEl.id)210 .should.eventually.be.true;211 });212 });213});214describe('image element LRU cache', function () {215 it('should accept and cache image elements', function () {216 const el1 = new ImageElement(defTemplate, defRect);217 const el2 = new ImageElement(defTemplate, defRect);218 const cache = makeImageElementCache();219 cache.set(el1.id, el1);220 el1.equals(cache.get(el1.id)).should.be.true;221 _.isUndefined(cache.get(el2.id)).should.be.true;222 cache.has(el1.id).should.be.true;223 cache.has(el2.id).should.be.false;224 });225 it('once cache reaches max size, should eject image elements', function () {226 const el1 = new ImageElement(defTemplate, defRect);227 const el2 = new ImageElement(defTemplate, defRect);228 const cache = makeImageElementCache(defTemplate.length + 1);229 cache.set(el1.id, el1);230 cache.has(el1.id).should.be.true;231 cache.set(el2.id, el2);232 cache.has(el2.id).should.be.true;233 cache.has(el1.id).should.be.false;234 });235});236describe('getImgElFromArgs', function () {237 it('should return the image element id from json obj in args', function () {238 const imgEl = `${IMAGE_ELEMENT_PREFIX}foo`;239 const args = [1, 'foo', imgEl];240 getImgElFromArgs(args).should.eql(imgEl);241 });242 it('should not return anything if image element id not in args', function () {243 const args = [1, 'foo'];244 _.isUndefined(getImgElFromArgs(args)).should.be.true;245 });246 it('should not find image element id in anything but prefix', function () {247 const notImgEl = `foo${IMAGE_ELEMENT_PREFIX}`;248 const args = [1, 'foo', notImgEl];249 _.isUndefined(getImgElFromArgs(args)).should.be.true;250 });...
localstorage.js
Source:localstorage.js
1/*2localStorage3IE 8+4Firefox 3.5+5Safari 4+6Chrome 4+7Opera 10.5+8iPhone 2+9Android 2+10sessionStorage11IE 8+12Firefox 2+13Safari 4+14Chrome15Opera 10.5+16iPhone 2+17Android 2+18globalStorage19Firefox 2+20Firefox 2.x 21Firefox 3.0.x22Database Storage23Safari 3.1 24Safari 3.225userData26IE 5 - 727https://github.com/rgrove/storage-lite28http://amplifyjs.com/api/store/29author yao.zhou@dianping.com 30*/31(function (WIN) {32 var NOOP = function () { },33 DOC = document,34 DB_NAME = 'html5_storage',35 DB_DISPLAYNAME = 'html5 storage data',36 DB_MAXSIZE = 1048576,37 DB_VERSION = '1.0',38 USERDATA_PATH = 'html5_storage',39 USERDATA_NAME = 'data',40 MODE_NOOP = 0,41 MODE_HTML5 = 1,42 MODE_GECKO = 2,43 MODE_DB = 3,44 MODE_USERDATA = 445 ;46 var 47 data = {},48 readys = [],49 storageDriver,50 storageMode51 ;52 function _mix(r, s) {53 var key;54 for (key in s) {55 r[key] = s[key];56 }57 return r;58 };59 try {60 if (WIN.localStorage) {61 storageMode = MODE_HTML5;62 } else if (WIN.globalStorage) {63 // Gecko globalStorage methods. Supported by Firefox 2 and 3.0.64 storageMode = MODE_GECKO;65 } else if (WIN.openDatabase && navigator.userAgent.indexOf('Chrome') === -1) {66 // Database storage methods. Supported by Safari 3.1 and 3.2.67 storageMode = MODE_DB;68 } else if (D.UA.ie >= 5) {69 // userData storage methods. Supported by IE5, 6, and 7.70 storageMode = MODE_USERDATA;71 } else {72 storageMode = MODE_NOOP;73 };74 } catch (ex) {75 storageMode = MODE_NOOP;76 };77 var Storage = {78 /**79 * @public80 * @method clear81 * @description å
¨é¨æ¸
é¤82 */83 clear: NOOP,84 /**85 * @public86 * @method length87 * @description è·åå¨æ°é88 * @return {Number}89 */90 length: function () { return 0; },91 /**92 * @public93 * @method getItem94 * @param key {string}95 * @param json {bool}96 * @description è·åå¼97 * @return {Object}98 */99 getItem: NOOP,100 /**101 * @public102 * @method removeItem103 * @param key {string}104 * @description 移é¤å¼105 */106 removeItem: NOOP,107 /**108 * @public109 * @method setItem110 * @param key {string}111 * @param value {object}112 * @description åå¨å¼113 */114 setItem: NOOP,115 /**116 * @public117 * @method ready118 * @description ç»ä»¶åå¤å®æ¯119 */120 ready: function (fn) {121 if (Storage.isReady) {122 fn();123 } else {124 readys.push(fn);125 };126 },127 isReady: false128 };129 function _doReady() {130 DOC.body.appendChild(storageDriver);131 storageDriver.load(USERDATA_PATH);132 try {133 data = JSON.parse(storageDriver.getAttribute(USERDATA_NAME) || '{}');134 } catch (ex) {135 data = {};136 };137 Storage.isReady = true;138 };139 if (storageMode === MODE_HTML5 || storageMode === MODE_GECKO) {140 _mix(Storage, {141 length: function () {142 return storageDriver.length;143 },144 removeItem: function (key) {145 storageDriver.removeItem(key);146 },147 setItem: function (key, value, json) {148 if (value === undefined || value === null) {149 Storage.removeItem(key);150 } else {151 storageDriver.setItem(key, json ? JSON.stringify(value) : value);152 };153 }154 });155 if (storageMode === MODE_HTML5) {156 storageDriver = WIN.localStorage;157 _mix(Storage, {158 clear: function () {159 storageDriver.clear();160 },161 getItem: function (key, json) {162 try {163 return json ? JSON.parse(storageDriver.getItem(key)) :164 storageDriver.getItem(key);165 } catch (ex) {166 return null;167 };168 }169 });170 } else if (storageMode === MODE_GECKO) {171 storageDriver = WIN.globalStorage[WIN.location.hostname];172 _mix(Storage, {173 clear: function () {174 for (var key in storageDriver) {175 if (storageDriver.hasOwnProperty(key)) {176 storageDriver.removeItem(key);177 delete storageDriver[key];178 };179 };180 },181 getItem: function (key, json) {182 try {183 return json ? JSON.parse(storageDriver[key].value) :184 storageDriver[key].value;185 } catch (ex) {186 return null;187 };188 }189 });190 };191 Storage.isReady = true;192 } else if (storageMode === MODE_DB || storageMode === MODE_USERDATA) {193 _mix(Storage, {194 clear: function () {195 data = {};196 Storage._save();197 },198 getItem: function (key, json) {199 return data.hasOwnProperty(key) ? data[key] : null;200 },201 length: function () {202 var count = 0, key;203 for (key in data) {204 if (data.hasOwnProperty(key)) {205 count += 1;206 }207 };208 return count;209 },210 removeItem: function (key) {211 delete data[key];212 Storage._save();213 },214 setItem: function (key, value, json) {215 if (value === undefined || value === null) {216 Storage.removeItem(key);217 } else {218 data[key] = value.toString();219 Storage._save();220 };221 }222 });223 if (storageMode === MODE_DB) {224 storageDriver = WIN.openDatabase(DB_NAME, DB_VERSION, DB_DISPLAYNAME, DB_MAXSIZE);225 _mix(Storage, {226 _save: function () {227 storageDriver.transaction(function (t) {228 t.executeSql("REPLACE INTO " + DB_NAME + " (name, value) VALUES ('data', ?)", [JSON.stringify(data)]);229 });230 }231 });232 storageDriver.transaction(function (t) {233 t.executeSql("CREATE TABLE IF NOT EXISTS " + DB_NAME + "(name TEXT PRIMARY KEY, value TEXT NOT NULL)");234 t.executeSql("SELECT value FROM " + DB_NAME + " WHERE name = 'data'", [], function (t, results) {235 if (results.rows.length) {236 try {237 data = JSON.parse(results.rows.item(0).value);238 } catch (ex) {239 data = {};240 };241 };242 Storage.isReady = true;243 });244 });245 } else if (storageMode === MODE_USERDATA) {246 storageDriver = DOC.createElement('span');247 storageDriver.addBehavior('#default#userData');248 _mix(Storage, {249 _save: function () {250 var _data = JSON.stringify(data);251 try {252 storageDriver.setAttribute(USERDATA_NAME, _data);253 storageDriver.save(USERDATA_PATH);254 } catch (ex) { };255 }256 });257 if ($.isReady) {258 _doReady();259 } else {260 $(document).ready(_doReady);261 };262 };263 } else {264 Storage.isReady = true;265 };266 var interval = WIN.setInterval(function () {267 if (Storage.isReady) {268 readys.forEach(function (fn) {269 try { fn() } catch (e) { };270 });271 WIN.clearInterval(interval);272 interval = null;273 readys = [];274 };275 }, 100);276 WIN.Storage = Storage;...
find-specs.js
Source:find-specs.js
1import sinon from 'sinon';2import XCUITestDriver from '../../..';3describe('general commands', function () {4 const driver = new XCUITestDriver();5 const proxySpy = sinon.stub(driver, 'proxyCommand');6 afterEach(function () {7 proxySpy.reset();8 });9 describe('findNativeElementOrElements', function () {10 async function verifyFind (strategy, selector, modSelector, modStrategy = null, mult = false) {11 try {12 await driver.findNativeElementOrElements(strategy, selector, mult);13 } catch (ign) {}14 proxySpy.calledOnce.should.be.true;15 proxySpy.firstCall.args[0].should.eql(`/element${mult ? 's' : ''}`);16 proxySpy.firstCall.args[1].should.eql('POST');17 proxySpy.firstCall.args[2].should.eql({18 using: modStrategy || strategy,19 value: modSelector20 });21 proxySpy.reset();22 }23 it('should convert class names from UIA to XCUI', async function () {24 await verifyFind('class name', 'UIAButton', 'XCUIElementTypeButton');25 await verifyFind('class name', 'UIAMapView', 'XCUIElementTypeMap');26 await verifyFind('class name', 'UIAScrollView', 'XCUIElementTypeScrollView');27 await verifyFind('class name', 'UIACollectionView', 'XCUIElementTypeCollectionView');28 await verifyFind('class name', 'UIATextView', 'XCUIElementTypeTextView');29 await verifyFind('class name', 'UIAWebView', 'XCUIElementTypeWebView');30 });31 it('should convert xpaths from UIA to XCUI', async function () {32 await verifyFind('xpath', '//UIAButton', '//XCUIElementTypeButton');33 await verifyFind('xpath',34 '//UIAButton/UIATextField',35 '//XCUIElementTypeButton/XCUIElementTypeTextField');36 await verifyFind('xpath',37 'UIAButton//UIATextField',38 'XCUIElementTypeButton//XCUIElementTypeTextField');39 await verifyFind('xpath',40 '//UIAButton[@name="foo"]',41 '//XCUIElementTypeButton[@name="foo"]');42 await verifyFind('xpath',43 '//UIAButton/Weird',44 '//XCUIElementTypeButton/Weird');45 await verifyFind('xpath',46 '//UIAMapView/UIAScrollView',47 '//XCUIElementTypeMap/XCUIElementTypeScrollView');48 await verifyFind('xpath',49 '//UIAMapView/UIAScrollView[@name="UIADummyData"]',50 '//XCUIElementTypeMap/XCUIElementTypeScrollView[@name="UIADummyData"]');51 await verifyFind('xpath',52 '//XCUIElementTypeMap[@name="UIADummyData"]',53 '//XCUIElementTypeMap[@name="UIADummyData"]');54 });55 it('should reject request for first visible child with no context', async function () {56 await driver.findNativeElementOrElements(57 'xpath', '/*[@firstVisible="true"]', false)58 .should.eventually.be.rejectedWith(/without a context element/);59 });60 it('should reject request for multiple first visible children', async function () {61 await driver.findNativeElementOrElements(62 'xpath', '/*[@firstVisible="true"]', true)63 .should.eventually.be.rejectedWith(/Cannot get multiple/);64 });65 it('should convert magic first visible child xpath to class chain', async function () {66 const variants = [67 '/*[@firstVisible="true"]',68 "/*[@firstVisible='true']",69 "/*[@firstVisible = 'true']"70 ];71 let attribSpy = sinon.stub(driver, 'getAttribute');72 for (const variant of variants) {73 proxySpy.withArgs(74 '/element/ctx/element',75 'POST',76 {using: 'class chain', value: '*[1]'}77 ).returns({ELEMENT: 1});78 proxySpy.withArgs(79 '/element/ctx/element',80 'POST',81 {using: 'class chain', value: '*[2]'}82 ).returns({ELEMENT: 2});83 attribSpy.withArgs('visible', {ELEMENT: 1}).returns('false');84 attribSpy.withArgs('visible', {ELEMENT: 2}).returns('true');85 let el = await driver.findNativeElementOrElements('xpath',86 variant, false, {ELEMENT: 'ctx'});87 proxySpy.calledTwice.should.be.true;88 proxySpy.firstCall.args[2].should.eql({89 using: 'class chain',90 value: '*[1]',91 });92 proxySpy.secondCall.args[2].should.eql({93 using: 'class chain',94 value: '*[2]',95 });96 attribSpy.calledTwice.should.be.true;97 el.should.eql({ELEMENT: 2});98 proxySpy.reset();99 attribSpy.reset();100 }101 });102 it('should convert magic is scrollable xpath to class chain', async function () {103 const multSel = '**/*[`type == "XCUIElementTypeScrollView" OR ' +104 'type == "XCUIElementTypeTable" OR ' +105 'type == "XCUIElementTypeCollectionView" OR ' +106 'type == "XCUIElementTypeWebView"`]';107 const singleSel = `${multSel}[1]`;108 await verifyFind('xpath',109 '//*[@scrollable="true"]',110 singleSel,111 'class chain');112 await verifyFind('xpath',113 `//*[@scrollable='true']`,114 singleSel,115 'class chain');116 await verifyFind('xpath',117 `//*[@scrollable = 'true']`,118 singleSel,119 'class chain');120 await verifyFind('xpath',121 '//*[@scrollable="true"]',122 multSel,123 'class chain',124 true);125 });126 });...
webpage.selenium.test.js
Source:webpage.selenium.test.js
1import Browser from '../../src/browsers/selenium'2describe('selenium/webpage', () => {3 let browser4 let webpage5 let spy6 beforeAll(() => {7 browser = new Browser()8 spy = jest.fn()9 browser.constructor.webdriver = {10 By: {11 css: (...args) => spy('By.css', ...args)12 },13 until: {14 elementIsVisible: (...args) => spy('until.elementIsVisible', ...args),15 elementLocated: (...args) => spy('until.elementLocated', ...args)16 }17 }18 const getAttribute = jest.fn()19 const findElement = jest.fn().mockReturnValue({ getAttribute })20 const findElements = jest.fn().mockReturnValue([{ getAttribute }, { getAttribute }])21 browser.driver = {22 get: (...args) => spy('get', ...args),23 wait: (...args) => spy('wait', ...args),24 getPageSource: (...args) => spy('getPageSource', ...args),25 getAttribute,26 findElement,27 findElements,28 executeScript: (...args) => spy('executeScript', ...args),29 executeAsyncScript: (...args) => spy('executeAsyncScript', ...args)30 }31 })32 afterEach(() => jest.clearAllMocks())33 test('should open page', async () => {34 const webPath = '/'35 webpage = await browser.page(webPath)36 expect(spy).toHaveBeenCalledTimes(4)37 expect(spy).toHaveBeenCalledWith('get', webPath)38 expect(spy).toHaveBeenCalledWith('until.elementLocated', undefined)39 expect(spy).toHaveBeenCalledWith('By.css', 'body')40 expect(spy).toHaveBeenCalledWith('until.elementIsVisible', undefined)41 })42 test('should implement getHtml', () => {43 webpage.getHtml()44 expect(spy).toHaveBeenCalledWith('getPageSource')45 })46 test('should implement runScript', () => {47 const fn = () => true48 webpage.runScript(fn)49 expect(spy).toHaveBeenCalledWith('executeScript', expect.stringMatching('return true;'))50 })51 test('should run sync script in runAsyncScript and fix blockless bodies', () => {52 // runAsync fixes blockless bodies & sync scripts in async53 const callback = jest.fn()54 const fn = () => true55 webpage.runAsyncScript(fn, true)56 expect(spy).toHaveBeenCalledWith('executeAsyncScript', expect.any(String), true)57 expect(spy.mock.calls[0][1]).toContain('then(callback)')58 expect(spy.mock.calls[0][1]).toMatchSnapshot();59 (function runEval() {60 expect(() => eval(spy.mock.calls[0][1])).not.toThrow() // eslint-disable-line no-eval61 })(callback)62 expect(callback).toHaveBeenCalledTimes(1)63 })64 test('should run async script in runAsyncScript', async () => {65 const callback = jest.fn()66 const fn = () => { return Promise.resolve(true) }67 webpage.runAsyncScript(fn, true)68 expect(spy).toHaveBeenCalledWith('executeAsyncScript', expect.any(String), true)69 expect(spy.mock.calls[0][1]).toContain('then(callback)')70 expect(spy.mock.calls[0][1]).toMatchSnapshot()71 await new Promise((resolve) => {72 (function runEval() {73 expect(() => eval(spy.mock.calls[0][1])).not.toThrow() // eslint-disable-line no-eval74 })(() => { callback(); resolve() })75 })76 expect(callback).toHaveBeenCalledTimes(1)77 })78 test('should implement getWebElement', async () => {79 await webpage.getWebElement()80 expect(browser.driver.findElement).toHaveBeenCalledTimes(1)81 })82 test('should implement getWebElements', async () => {83 await webpage.getWebElements()84 expect(browser.driver.findElements).toHaveBeenCalledTimes(1)85 })86 test('should implement getWebAttribute', async () => {87 await webpage.getWebAttribute()88 expect(browser.driver.findElement).toHaveBeenCalledTimes(1)89 expect(browser.driver.getAttribute).toHaveBeenCalledTimes(1)90 })91 test('should implement getWebAttributes', async () => {92 await webpage.getWebAttributes()93 expect(browser.driver.findElements).toHaveBeenCalledTimes(1)94 expect(browser.driver.getAttribute).toHaveBeenCalledTimes(2)95 })...
attribute-e2e-specs.js
Source:attribute-e2e-specs.js
...16 after(async () => {17 await driver.deleteSession();18 });19 it('should be able to find resourceId attribute', async () => {20 await driver.getAttribute('resourceId', animationEl).should.eventually.become('android:id/text1');21 });22 it('should be able to find text attribute', async () => {23 await driver.getAttribute('text', animationEl).should.eventually.become('Animation');24 });25 it('should be able to find name attribute', async () => {26 await driver.getAttribute('name', animationEl).should.eventually.become('Animation');27 });28 it('should be able to find name attribute, falling back to text', async () => {29 await driver.click(animationEl);30 let textView = await driver.findElOrEls('class name', 'android.widget.TextView', true);31 let textViewEl = textView[1].ELEMENT;32 await driver.getAttribute('name', textViewEl).should.eventually.become('Bouncing Balls');33 await driver.back();34 });35 it('should be able to find content description attribute', async () => {36 await driver.getAttribute('contentDescription', animationEl).should.eventually.become("Animation");37 });38 it('should be able to find displayed attribute', async () => {39 await driver.getAttribute('displayed', animationEl).should.eventually.become('true');40 });41 it('should be able to find displayed attribute through normal func', async () => {42 await driver.elementDisplayed(animationEl).should.eventually.become(true);43 });44 it('should be able to get element location using getLocation', async () => {45 let location = await driver.getLocation(animationEl);46 location.x.should.be.at.least(0);47 location.y.should.be.at.least(0);48 });49 it('should be able to get element location using getLocationInView', async () => {50 let location = await driver.getLocationInView(animationEl);51 location.x.should.be.at.least(0);52 location.y.should.be.at.least(0);53 });...
driver.js
Source:driver.js
...14const btn_toggle_driver = document.querySelector("#btn_toggle_driver")15if (btn_toggle_driver) {16 btn_toggle_driver.addEventListener('click', (e) => {17 e.preventDefault()18 const id = btn_toggle_driver.getAttribute("data")19 deleteSwalUser(id, saveData)20 .then((result) => {21 if (result.value) {22 const data = result.value23 swal.fire({24 type: "success",25 titleText: data.msg,26 showConfirmButton: false,27 timer: 100028 })29 window.location.reload()30 }31 })32 })...
getLabel.js
Source:getLabel.js
1import helper from 'tipsi-appium-helper'2helper.extend('getLabel', async (id) => {3 const { driver, platform } = helper4 const attributeName = platform('ios') ? 'label' : 'text'5 const label = await driver.getAttribute(id, attributeName)6 return label.trim()...
Using AI Code Generation
1var webdriver = require('selenium-webdriver');2driver.findElement(webdriver.By.name('q')).sendKeys('webdriver');3driver.findElement(webdriver.By.name('btnG')).click();4driver.wait(function() {5 return driver.getTitle().then(function(title) {6 return title === 'webdriver - Google Search';7 });8}, 1000);9driver.quit();10[Appium] Welcome to Appium v1.6.0-beta3 (REV 6e1d1f7c6e4d1d8b6b0a6f7c6b4d6d8f6e3f6c2e)
Using AI Code Generation
1var webdriver = require('selenium-webdriver');2var AndroidDriver = require('appium-android-driver');3var driver = new AndroidDriver();4driver.getAttribute('testElement', 'text').then(function (text) {5 console.log(text);6});7driver.quit();8var webdriver = require('selenium-webdriver');9var AndroidDriver = require('appium-android-driver');10var driver = new AndroidDriver();11driver.getAttribute('testElement', 'text').then(function (text) {12 console.log(text);13});14driver.quit();15var webdriver = require('selenium-webdriver');16var AndroidDriver = require('appium-android-driver');17var driver = new AndroidDriver();18driver.getCssProperty('testElement', 'color').then(function (color) {19 console.log(color);20});21driver.quit();22Method Description getLocation(loc
Using AI Code Generation
1var webdriver = require('selenium-webdriver');2var driver = new webdriver.Builder()3 .forBrowser('chrome')4 .build();5driver.findElement(webdriver.By.id('lst-ib')).sendKeys('test');6driver.findElement(webdriver.By.id('lst-ib')).getAttribute('value').then(function(text){7 console.log(text);8});9driver.quit();
Using AI Code Generation
1driver.getAttribute("myText", "text").then(function(text) {2 console.log(text);3});4driver.getText("myText").then(function(text) {5 console.log(text);6});7driver.getText("myText").then(function(text) {8 console.log(text);9});10driver.getTagName("myText").then(function(tagName) {11 console.log(tagName);12});13driver.getLocation("myText").then(function(location) {14 console.log(location);15});16driver.getSize("myText").then(function(size) {17 console.log(size);18});19driver.getRect("myText").then(function(rect) {20 console.log(rect);21});22driver.isDisplayed("myText").then(function(displayed) {23 console.log(displayed);24});25driver.isEnabled("myText").then(function(enabled) {26 console.log(enabled);27});28driver.isSelected("myText").then(function(selected) {29 console.log(selected);30});
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!!