How to use driver.elementByAccessibilityId method in Appium

Best JavaScript code snippet using appium

basic.e2e.js

Source:basic.e2e.js Github

copy

Full Screen

...12 afterAll(async () => driver.quit());13 it('check Search', async () => { // Поиск14 expect(await driver.waitForElementById('openSearchInputID'));15 // console.log("Поиск есть")16 await driver.elementByAccessibilityId('openSearchInputID').click();17 // console.log("Поиск открыт")18 expect(await driver.waitForElementById('searchInput_TitleID'));19 // console.log("Строка ввода есть")20 expect(await driver.waitForElementById('searchFocus_mainID'));21 // console.log("Боковая лупа есть")22 expect(await driver.waitForElementById('search_closeID'));23 // console.log("Закрытие поиска есть")24 await driver.elementByAccessibilityId('searchInput_TitleID').type("CHF/JPY");25 expect(await driver.waitForElementById("CHF/JPYID"))26 // console.log("Элемент найден")27 let element = await driver.elementByAccessibilityId("CHF/JPYFullNameID");28 let text = await element.text();29 // console.log(text);30 expect(text).toEqual('CHF/JPY');31 // console.log("Текст соответствует")32 await driver.elementByAccessibilityId('search_closeID').click();33 });34 it('check Autorization', async () => { //Войти в авторизации35 expect(await driver.waitForElementById('ButtonMenuID'));36 // console.log("Меню есть!")37 await driver.elementByAccessibilityId('ButtonMenuID').click();38 // console.log("Меню открыто")39 expect(await driver.waitForElementById('LogInMenuID'));40 // console.log("Войти есть!")41 await driver.elementByAccessibilityId('LogInMenuID').click();42 // console.log("Войти открыто")43 expect(await driver.waitForElementById('LoginAuthorizationID'));44 // console.log("Поле логин есть!")45 expect(await driver.waitForElementById('PasswordInputAuthorizationID'));46 // console.log("Поле пароль есть!")47 await driver.elementByAccessibilityId('LoginAuthorizationID').type("testviktoriya@gmail.com");48 // console.log("Логин введён")49 await driver.elementByAccessibilityId('PasswordInputAuthorizationID').type("123qwe");50 // console.log("Пароль введён")51 expect(await driver.waitForElementById('BtnShowPassAuthorizationID'));52 // console.log("Скрыть пароль Есть")53 await driver.elementByAccessibilityId('BtnShowPassAuthorizationID').click();54 // console.log("Пароль скрыт!")55 await driver.elementByAccessibilityId('BtnShowPassAuthorizationID').click();56 // console.log("Пароль показан")57 expect(await driver.waitForElementById('BtnLoginAuthorizationID'));58 // console.log('Кнопка "Войти" есть')59 await driver.elementByAccessibilityId('BtnLoginAuthorizationID').click();60 // console.log("Авторизировано")61 await driver.sleep(3000) // Костыль62 expect(await driver.waitForElementById('ButtonMenuID'));63 // console.log("Меню есть!")64 expect(await driver.waitForElementById('openSearchInputID'));65 // console.log("Поиск есть")66 expect(await driver.waitForElementById('TabTitleID'));67 // console.log("Заголовок есть")68 // Проверка popup69 let element = await driver.elementByAccessibilityId("TabTitleID");70 let text = await element.text();71 // console.log(text);72 expect(text).toEqual('Валюты');73 // console.log("Текст соответствует")74 });75 it('check Autorization', async () => { //Выход из авторизированого пользователя76 expect(await driver.waitForElementById('ButtonMenuID'));77 // console.log("Меню есть!")78 await driver.elementByAccessibilityId('ButtonMenuID').click();79 // console.log("Меню открыто")80 expect(await driver.waitForElementById('LogInMenuID'));81 // console.log("Войти есть!")82 await driver.elementByAccessibilityId('LogInMenuID').click();83 // console.log("Войти открыто")84 expect(await driver.waitForElementById('LoginAuthorizationID'));85 // console.log("Поле логин есть!")86 expect(await driver.waitForElementById('PasswordInputAuthorizationID'));87 // console.log("Поле пароль есть!")88 await driver.elementByAccessibilityId('LoginAuthorizationID').type("testviktoriya@gmail.com");89 // console.log("Логин введён")90 await driver.elementByAccessibilityId('PasswordInputAuthorizationID').type("123qwe");91 // console.log("Пароль введён")92 expect(await driver.waitForElementById('BtnShowPassAuthorizationID'));93 // console.log("Скрыть пароль Есть")94 await driver.elementByAccessibilityId('BtnShowPassAuthorizationID').click();95 // console.log("Пароль скрыт!")96 await driver.elementByAccessibilityId('BtnShowPassAuthorizationID').click();97 // console.log("Пароль показан")98 expect(await driver.waitForElementById('BtnLoginAuthorizationID'));99 // console.log('Кнопка "Войти" есть')100 await driver.elementByAccessibilityId('BtnLoginAuthorizationID').click();101 // console.log("Авторизировано")102 await driver.sleep(3000) // Костыль103 expect(await driver.waitForElementById('ButtonMenuID'));104 // console.log("Меню есть!")105 expect(await driver.waitForElementById('openSearchInputID'));106 // console.log("Поиск есть")107 expect(await driver.waitForElementById('TabTitleID'));108 // console.log("Заголовок есть")109 expect(await driver.waitForElementById('ButtonMenuID'));110 // console.log("Меню есть!")111 await driver.elementByAccessibilityId('ButtonMenuID').click();112 // console.log("Меню открыто")113 expect(await driver.waitForElementById('BtnExitMenuID'));114 // console.log("Выход есть!")115 await driver.elementByAccessibilityId('BtnExitMenuID').click();116 // console.log("Выход нажато")117 expect(await driver.waitForElementById('BtnRegistrationPopupID'));118 // console.log("Кнопка 'ДА' есть!")119 await driver.elementByAccessibilityId('BtnRegistrationPopupID').click();120 // console.log("Выйдено")121 });122 it('check Invalid data', async () => { // Проверка ошибки окна Авторизации123 expect(await driver.waitForElementById('ButtonMenuID'));124 // console.log("Меню есть!")125 await driver.elementByAccessibilityId('ButtonMenuID').click();126 // console.log("Меню открыто")127 expect(await driver.waitForElementById('BtnEnMenuID')); // Переключение на английский128 // console.log("Переключение на английский язык есть")129 await driver.elementByAccessibilityId('BtnEnMenuID').click();130 // console.log("Приложение на английском")131 expect(await driver.waitForElementById('LogInMenuID'));132 // console.log("Войти есть!")133 await driver.elementByAccessibilityId('LogInMenuID').click();134 // console.log("Войти открыто")135 expect(await driver.waitForElementById('LoginAuthorizationID'));136 // console.log("Поле логин есть!")137 expect(await driver.waitForElementById('PasswordInputAuthorizationID'));138 // console.log("Поле пароль есть!")139 await driver.elementByAccessibilityId('LoginAuthorizationID').type("testviktoriya@gmail.com");140 // console.log("Логин введён")141 await driver.elementByAccessibilityId('PasswordInputAuthorizationID').type("123qwerty");142 // console.log("Пароль введён")143 expect(await driver.waitForElementById('BtnShowPassAuthorizationID'));144 // console.log("Скрыть пароль Есть")145 await driver.elementByAccessibilityId('BtnShowPassAuthorizationID').click();146 // console.log("Пароль скрыт!")147 await driver.elementByAccessibilityId('BtnShowPassAuthorizationID').click();148 // console.log("Пароль показан")149 expect(await driver.waitForElementById('BtnLoginAuthorizationID'));150 // console.log('Кнопка "Войти" есть')151 await driver.elementByAccessibilityId('BtnLoginAuthorizationID').click();152 expect(await driver.waitForElementById('AuthorizationBtnId'));153 // console.log('Ошибка валидация показана')154 // Проверка popup155 let element = await driver.elementByAccessibilityId("AuthorizationTextId");156 let text = await element.text();157 // console.log(text);158 expect(text).toEqual('Incorrect email address or password.');159 // console.log("Текст соответствует")160 await driver.elementByAccessibilityId('AuthorizationBtnId').click();161 // console.log("Ошибка скрыта")162 });163 it('check Validation Autorization', async () => { // Проверка валидации авторизации164 expect(await driver.waitForElementById('ButtonMenuID'));165 // console.log("Меню есть!")166 await driver.elementByAccessibilityId('ButtonMenuID').click();167 // console.log("Меню открыто")168 expect(await driver.waitForElementById('BtnEnMenuID')); // Переключение на английский169 // console.log("Переключение на английский язык есть")170 await driver.elementByAccessibilityId('BtnEnMenuID').click();171 // console.log("Приложение на английском")172 expect(await driver.waitForElementById('LogInMenuID'));173 // console.log("Войти есть!")174 await driver.elementByAccessibilityId('LogInMenuID').click();175 // console.log("Войти открыто")176 expect(await driver.waitForElementById('LoginAuthorizationID'));177 // console.log("Поле логин есть!")178 expect(await driver.waitForElementById('PasswordInputAuthorizationID'));179 // console.log("Поле пароль есть!")180 await driver.elementByAccessibilityId('LoginAuthorizationID').type("123");181 // console.log("Логин введён")182 await driver.elementByAccessibilityId('PasswordInputAuthorizationID').type("123");183 // console.log("Пароль введён")184 expect(await driver.waitForElementById('LoginErrorAuthorizationID'));185 // console.log("Ошибка логина есть")186 await driver.elementByAccessibilityId('BtnShowPassAuthorizationID').click();187 expect(await driver.waitForElementById('PasswordInputAuthorizationID'));188 // console.log("Ошибка пароля есть")189 await driver.elementByAccessibilityId('LoginAuthorizationID').click();190 let LogInError = await driver.elementByAccessibilityId("LoginErrorAuthorizationID"); // Проверка popup191 let textLogIn = await LogInError.text();192 // console.log(textLogIn);193 expect(textLogIn).toEqual('Email-entry error');194 // console.log("Текст соответствует") 195 let PasswordError = await driver.elementByAccessibilityId("PasswordErrorAuthorizationID"); //Провека popup196 let textPassword = await PasswordError.text();197 // console.log(textPassword);198 expect(textPassword).toEqual('Password failed');199 // console.log("Текст соответствует")200 // console.log("Валидация работает")201 });202 it('check Registration', async () => { // Регистрация с существующей почтой 203 await driver.sleep(5000)204 expect(await driver.waitForElementById('ButtonMenuID'));205 // console.log("Меню есть!")206 await driver.elementByAccessibilityId('ButtonMenuID').click();207 // console.log("Меню открыто")208 expect(await driver.waitForElementById('LogInMenuID'));209 // console.log("Войти есть!")210 expect(await driver.waitForElementById('BtnEnMenuID')); // Переключение на английский211 // console.log("Переключение на английский язык есть")212 await driver.elementByAccessibilityId('BtnEnMenuID').click();213 // console.log("Приложение на английском")214 await driver.elementByAccessibilityId('LogInMenuID').click();215 // console.log("Войти открыто")216 expect(await driver.waitForElementById('BtnRegistrationAuthorizationID'));217 // console.log("Зарегестрироваться есть!")218 await driver.elementByAccessibilityId('BtnRegistrationAuthorizationID').click();219 // console.log("Пользователь в меню регистрации")220 expect(await driver.waitForElementById('InputFirstNameRegistrationID')); //Имя221 // console.log("Строка Имя есть")222 expect(await driver.waitForElementById('InputLastNameRegistrationID')); // Фамилия223 // console.log("Строка Фамилия есть")224 expect(await driver.waitForElementById('InputEmailRegistrationID')); // Почта225 // console.log("Строка E-mail есть")226 expect(await driver.waitForElementById('BtnCountryListRegistrationID')); // Страна227 // console.log("Страны есть")228 expect(await driver.waitForElementById('InputPhoneRegistrationID')); // Телефон229 // console.log("Ввод телефона есть")230 await driver.elementByAccessibilityId('BtnCountryListRegistrationID').click();231 // console.log("В меню выбора страны")232 await driver.sleep(3000) //костыль233 await driver.elementByAccessibilityId('SearchInputCountryID').click();234 await driver.elementByAccessibilityId('SearchInputCountryID').type("russ");235 expect(await driver.waitForElementById('RUID'));236 await driver.elementByAccessibilityId('RUID').click();237 // console.log("Россия есть")238 await driver.sleep(3000) //костыль239 // console.log(" Выбор страны = Россия")240 await driver.elementByAccessibilityId('InputFirstNameRegistrationID').type("Barak");241 await driver.elementByAccessibilityId('InputLastNameRegistrationID').type("O'Bama");242 await driver.elementByAccessibilityId('InputEmailRegistrationID').type("test-rn-qfx@gmail.com");243 driver.hideKeyboard();244 await driver.elementByAccessibilityId('InputPhoneRegistrationID').type("14881488");245 driver.hideKeyboard();246 // console.log("Зарегестрировано есть")247 expect(await driver.waitForElementById('BtnCheckBoxRegistrationID'));248 await driver.elementByAccessibilityId('BtnCheckBoxRegistrationID').click();249 expect(await driver.waitForElementById('BtnRegistrationInRegistrationID'));250 // console.log("Кнопка Зарегестрироваться есть")251 await driver.elementByAccessibilityId('BtnRegistrationInRegistrationID').click();252 let RegPopup = await driver.elementByAccessibilityId("RegistrationTextId"); // Регистрация с одной и той же почтой будет выдавать ошибку253 let textPopup = await RegPopup.text();254 // console.log(textPopup);255 expect(textPopup).toEqual('Unfortunately, the account with this email already exists.');256 // console.log("Текст соответстует")257 expect(await driver.waitForElementById('RegistrationBtnId'));258 // console.log("Popup о том что такая почта уже есть появился")259 await driver.elementByAccessibilityId('RegistrationBtnId').click()260 });261 it('check Registration Пустые поля', async () => { // Валидация регистрации262 expect(await driver.waitForElementById('ButtonMenuID'));263 // console.log("Меню есть!")264 await driver.elementByAccessibilityId('ButtonMenuID').click();265 // console.log("Меню открыто")266 expect(await driver.waitForElementById('BtnEnMenuID'));267 // console.log("Переключение на английский язык есть")268 await driver.elementByAccessibilityId('BtnEnMenuID').click();269 // console.log("Приложение на английском")270 expect(await driver.waitForElementById('LogInMenuID'));271 // console.log("Войти есть!")272 await driver.elementByAccessibilityId('LogInMenuID').click();273 // console.log("Войти открыто")274 expect(await driver.waitForElementById('BtnRegistrationAuthorizationID'));275 // console.log("Зарегестрироваться есть!")276 await driver.elementByAccessibilityId('BtnRegistrationAuthorizationID').click();277 // console.log("Пользователь в меню регистрации")278 expect(await driver.waitForElementById('InputFirstNameRegistrationID')); //Имя279 // console.log("Строка Имя есть")280 expect(await driver.waitForElementById('InputLastNameRegistrationID')); // Фамилия281 // console.log("Строка Фамилия есть")282 expect(await driver.waitForElementById('InputEmailRegistrationID')); // Почта283 // console.log("Строка E-mail есть")284 expect(await driver.waitForElementById('BtnCountryListRegistrationID')); // Страна285 // console.log("Страны есть")286 expect(await driver.waitForElementById('InputPhoneRegistrationID')); // Телефон287 await driver.elementByAccessibilityId('InputFirstNameRegistrationID').type("$");288 await driver.elementByAccessibilityId('InputLastNameRegistrationID').type("$");289 await driver.elementByAccessibilityId('InputEmailRegistrationID').type("barak_obama$prisident.cherniy");290 driver.hideKeyboard();291 await driver.elementByAccessibilityId('InputPhoneRegistrationID').type(";");292 driver.hideKeyboard();293 await driver.elementByAccessibilityId('BtnRegistrationInRegistrationID').click();294 expect(await driver.waitForElementById('FirstNameErrorRegostrationID'))295 expect(await driver.waitForElementById('LastNameErrorRegostrationID'))296 expect(await driver.waitForElementById('EmailErrorRegostrationID'))297 expect(await driver.waitForElementById('PasswordErrorRegistrationID'))298 // console.log("Все ошибки появились")299 let FirstNameError = await driver.elementByAccessibilityId("FirstNameErrorRegostrationID"); // Проверка ошибки в Поле "Имя"300 let textFirstName = await FirstNameError.text();301 // console.log(textFirstName);302 expect(textFirstName).toEqual('Name-entry error');303 // console.log("Валидация поля 'Имя' есть")304 let LastNameError = await driver.elementByAccessibilityId("LastNameErrorRegostrationID"); // Проверка ошибки в Поле "Фамилия"305 let textLastName = await LastNameError.text();306 // console.log(textLastName);307 expect(textLastName).toEqual('Last name-entry error');308 // console.log("Валидация поля 'Фамилия' есть")309 let emailError = await driver.elementByAccessibilityId("EmailErrorRegostrationID"); // Проверка ошибки в Поле "Почта"310 let textEmail = await emailError.text();311 // console.log(textEmail);312 expect(textEmail).toEqual('Email-entry error');313 // console.log("Валидация поля 'Email' есть")314 let TelError = await driver.elementByAccessibilityId("PasswordErrorRegistrationID"); // Проверка ошибки в Поле "Пароль"315 let textTel = await TelError.text();316 // console.log(textTel);317 expect(textTel).toEqual('Invalid phone number');318 // console.log("Валидация поля 'Телефона' есть")319 });320 it('check Password recovery', async () => { // Восстановлеине пароля321 expect(await driver.waitForElementById('ButtonMenuID'));322 // console.log("Меню есть!")323 await driver.elementByAccessibilityId('ButtonMenuID').click();324 // console.log("Меню открыто")325 expect(await driver.waitForElementById('BtnEnMenuID')); // Переключение на английский326 // console.log("Переключение на английский язык есть")327 await driver.elementByAccessibilityId('BtnEnMenuID').click();328 // console.log("Приложение на английском")329 expect(await driver.waitForElementById('LogInMenuID'));330 // console.log("Войти есть!")331 await driver.elementByAccessibilityId('LogInMenuID').click();332 // console.log("Войти открыто")333 expect(await driver.waitForElementById('ForgotPasswordAuthorizationID'));334 // console.log("Забыли пароль есть!")335 await driver.elementByAccessibilityId('ForgotPasswordAuthorizationID').click();336 // console.log("Окно восстнановления открыто")337 expect(await driver.waitForElementById('ForgotPasswordInputID'));338 // console.log("Строка ввода почты есть!")339 await driver.elementByAccessibilityId('ForgotPasswordInputID').type("testviktoriya@gmail.com");340 driver.hideKeyboard();341 await driver.elementByAccessibilityId('ForgotPasswordSubmitID').click();342 await driver.elementByAccessibilityId('ForgotPasswordSubmitID').click();343 expect(await driver.waitForElementById('BtnForgotPasswordPopUpID'));344 // console.log("Popup появился")345 let RecPopup = await driver.elementByAccessibilityId("TextRecoveryPopupID"); // Проверка popup 346 let textPopup = await RecPopup.text(); 347 // console.log(textPopup);348 expect(textPopup).toEqual("Instructions\n\r for password recovery have been sent to the user's email");349 // console.log("Текст соответстует")350 await driver.elementByAccessibilityId('BtnForgotPasswordPopUpID').click()351 expect(await driver.waitForElementById('LoginAuthorizationID')); // Перекидывание на поле авторизации352 // console.log("Поле логин есть!")353 expect(await driver.waitForElementById('PasswordInputAuthorizationID'));354 // console.log("Поле пароль есть!")355 // console.log("Восстановление пароля сработало успешно")356 });357 it('check Password recovery non valid', async () => { // Невалидное восстановлеин пароля358 expect(await driver.waitForElementById('ButtonMenuID'));359 // console.log("Меню есть!")360 await driver.elementByAccessibilityId('ButtonMenuID').click();361 // console.log("Меню открыто")362 expect(await driver.waitForElementById('BtnEnMenuID'));363 // console.log("Переключение на английский язык есть")364 await driver.elementByAccessibilityId('BtnEnMenuID').click();365 // console.log("Приложение на английском")366 expect(await driver.waitForElementById('LogInMenuID'));367 // console.log("Войти есть!")368 await driver.elementByAccessibilityId('LogInMenuID').click();369 // console.log("Войти открыто")370 expect(await driver.waitForElementById('ForgotPasswordAuthorizationID'));371 // console.log("Забыли пароль есть!")372 await driver.elementByAccessibilityId('ForgotPasswordAuthorizationID').click();373 // console.log("Окно восстнановления открыто")374 expect(await driver.waitForElementById('ForgotPasswordInputID'));375 // console.log("Строка ввода почты есть!")376 await driver.elementByAccessibilityId('ForgotPasswordInputID').type("nevalidnii@gmail.com");377 driver.hideKeyboard();378 await driver.elementByAccessibilityId('ForgotPasswordSubmitID').click();379 await driver.elementByAccessibilityId('ForgotPasswordSubmitID').click();380 expect(await driver.waitForElementById('ForgotPasswordBtnId'));381 // console.log("Popup появился")382 let element = await driver.elementByAccessibilityId("ForgotPasswordTextId"); // Проверка popup383 let textError = await element.text();384 // console.log(textError);385 expect(textError).toEqual('Incorrect email address.');386 // console.log("Ошибка соответствует")387 await driver.elementByAccessibilityId('ForgotPasswordBtnId').click();388 });389 it('check Minimize all open charts', async () => { // Свернуть все окна390 expect(await driver.waitForElementById('AUD/CADID'));391 expect(await driver.waitForElementById('AUD/CHFID'));392 expect(await driver.waitForElementById('AUD/JPYID'));393 expect(await driver.waitForElementById('AUD/NZDID'));394 expect(await driver.waitForElementById('AUD/USDID'));395 await driver.elementByAccessibilityId('AUD/CADID').click();396 await driver.elementByAccessibilityId('AUD/CHFID').click();397 await driver.elementByAccessibilityId('AUD/JPYID').click();398 // console.log("Открыты ячейки")399 await driver.elementByAccessibilityId('ButtonMenuID').click();400 // console.log("В меню")401 await driver.elementByAccessibilityId('BtnTurnAll').click();402 // console.log("Скрыты ячейки")403 driver.back();404 expect(await driver.waitForElementById('AUD/CADID'));405 expect(await driver.waitForElementById('AUD/CHFID'));406 expect(await driver.waitForElementById('AUD/JPYID'));407 expect(await driver.waitForElementById('AUD/NZDID'));408 expect(await driver.waitForElementById('AUD/USDID'));409 });...

Full Screen

Full Screen

sanity.e2e.js

Source:sanity.e2e.js Github

copy

Full Screen

...73 const dismissWarnings = async () => {74 let isErrorDismissVisible = await driver.hasElementByAccessibilityId(ID_ERROR_DISMISS);75 let isDismissAllVisible = await driver.hasElementByAccessibilityId(ID_DISMISS_ALL);76 if (isErrorDismissVisible) {77 await driver.elementByAccessibilityId(ID_ERROR_DISMISS).click();78 }79 if (isDismissAllVisible) {80 await driver.elementByAccessibilityId(ID_DISMISS_ALL).click();81 }82 };83 describe('Tab Bar', () => {84 beforeAll(async () => {85 dismissWarnings();86 });87 it('should show all the tabs', async () => {88 // expect(await driver.hasElementById('Home Tab')).toBe(true);89 if (IS_TV) {90 expect(await driver.hasElementByAccessibilityId(ID_ON_DEMAND)).toBe(true);91 expect(await driver.hasElementByAccessibilityId(ID_LIVE_TV)).toBe(true);92 } else {93 expect(await driver.hasElementByAccessibilityId(ID_HOME_TAB)).toBe(true);94 }95 expect(await driver.hasElementByAccessibilityId(ID_SEARCH_TAB)).toBe(true);96 expect(await driver.hasElementByAccessibilityId(ID_SETTINGS_TAB)).toBe(true);97 });98 });99 describe('Search Screen', () => {100 let searchBar;101 beforeAll(async () => {102 // Select Search Tab103 // Skipping tvos temporarily as we have a defects in search. search bar is not clickable and navigating to search makes home tab blank104 //TODO: Enable search testcases for tvos105 if (!TVOS_SIMULATOR) {106 await driver.elementByAccessibilityId(ID_SEARCH_TAB).click();107 searchBar = await driver.elementByAccessibilityId(ID_SEARCH_BAR);108 }109 });110 skipIt(TVOS_SIMULATOR)('should show results for search query', async () => {111 dismissWarnings();112 // type-in search query113 await searchBar.type('Max').hideDeviceKeyboard();114 expect(await driver.hasElementByAccessibilityId(ID_SEARCH_RESULTS)).toBe(true);115 });116 skipIt(TVOS_SIMULATOR)('should show error results for an invalid search query', async () => {117 dismissWarnings();118 // type-in junk search query119 await searchBar120 .clear()121 .type('sdfwe345435sdsdf324')122 .hideDeviceKeyboard();123 expect(await driver.hasElementByAccessibilityId(ID_SEARCH_ERROR)).toBe(true);124 });125 });126 describe('Home Screen', () => {127 const selectCard = async (cardViews, cardIndexToSelect) => {128 const totalCards = cardViews.length;129 if (cardIndexToSelect === undefined) {130 if (TARGET_PLATFORM === 'android') {131 const randomIndex = Math.floor(Math.random() * totalCards);132 return cardViews[randomIndex];133 }134 // iOS seems to return even non-visible cards, but clicking them does not work.135 // So, we pick the first visible element.136 let selectedCard;137 for (let index = 0; index < totalCards; index++) {138 const v = cardViews[index];139 const isVisible = await v.getAttribute('visible');140 const isCardView = await v.getAttribute('name');141 if (isVisible === 'true' && isCardView === 'Card View') {142 selectedCard = v;143 break;144 }145 }146 return selectedCard;147 } else {148 return cardViews[cardIndexToSelect];149 }150 };151 beforeAll(async () => {152 // Select Home Tab153 dismissWarnings();154 IS_TV155 ? await driver.elementByAccessibilityId(ID_ON_DEMAND).click()156 : await driver.elementByAccessibilityId(ID_HOME_TAB).click();157 });158 it('should show catalog tabs', async () => {159 expect(await driver.hasElementByAccessibilityId(ID_ON_DEMAND)).toBe(true);160 expect(await driver.hasElementByAccessibilityId(ID_LIVE_TV)).toBe(true);161 });162 it('should navigate to details when clicking a card', async () => {163 const cardViews = await driver.elementsByAccessibilityId(ID_CARD_VIEW);164 let selectedCard = await selectCard(cardViews, 0);165 await selectedCard.click();166 expect(await driver.hasElementByAccessibilityId(ID_DETAILS_SCREEN)).toBe(true);167 expect(await driver.hasElementByAccessibilityId(ID_FAVORITE)).toBe(true);168 });169 skipIt(IOS_SIMULATOR)('should navigate to player screen', async () => {170 if (await driver.hasElementByAccessibilityId(ID_WATCH_NOW)) {171 await driver.elementByAccessibilityId(ID_WATCH_NOW).click();172 } else {173 const cardViews = await driver.elementsByAccessibilityId(ID_CARD_VIEW);174 let selectedCard = await selectCard(cardViews, 0);175 await selectedCard.click();176 }177 expect(await driver.hasElementByAccessibilityId(ID_PLAYER_SCREEN)).toBe(true);178 });179 skipIt(IOS_SIMULATOR || TVOS_SIMULATOR)('should begin video playback', async () => {180 await driver.waitFor(181 elementWithAccessibilityId(ID_TIME_ELAPSED, false),182 PLAYBACK_START_WAIT_TIME,183 POLL_FREQUENCY,184 );185 await driver.elementByAccessibilityId(ID_PLAYER).click();186 await driver.waitFor(elementWithAccessibilityId(ID_PLAY, true));187 expect(await driver.hasElementByAccessibilityId(ID_PLAY)).toBe(true);188 expect(await driver.hasElementByAccessibilityId(ID_REWIND)).toBe(true);189 expect(await driver.hasElementByAccessibilityId(ID_FORWARD)).toBe(true);190 });191 skipIt(IOS_SIMULATOR || TVOS_SIMULATOR)('should fast-forward when clicked on ffd button', async () => {192 const controlsAreVisible = await driver.hasElementByAccessibilityId(ID_TIME_ELAPSED);193 if (!controlsAreVisible) {194 await driver.elementByAccessibilityId(ID_PLAYER).click();195 await driver.waitFor(196 elementWithAccessibilityId(ID_TIME_ELAPSED, false),197 DEVICE_TIMEOUT,198 POLL_FREQUENCY,199 );200 }201 const initialTimeElapsed = await driver.elementByAccessibilityId(ID_TIME_ELAPSED).text();202 await driver.elementByAccessibilityId(ID_FORWARD).click();203 // Wait for video to load after seeking204 await driver.waitFor(205 elementWithAccessibilityId(ID_FORWARD, true),206 PLAYBACK_START_WAIT_TIME,207 POLL_FREQUENCY,208 );209 const seekedTimeElapsed = await driver.elementByAccessibilityId(ID_TIME_ELAPSED).text();210 expect(seekedTimeElapsed).not.toBe(initialTimeElapsed);211 });212 skipIt(IOS_SIMULATOR || TVOS_SIMULATOR)(213 'should resume playback after moving to background and back',214 async () => {215 const controlsAreVisible = await driver.hasElementByAccessibilityId(ID_TIME_ELAPSED);216 if (!controlsAreVisible) {217 await driver.elementByAccessibilityId(ID_PLAYER).click();218 await driver.waitFor(219 elementWithAccessibilityId(ID_TIME_ELAPSED, false),220 DEVICE_TIMEOUT,221 POLL_FREQUENCY,222 );223 }224 const initialTimeElapsed = await driver.elementByAccessibilityId(ID_TIME_ELAPSED).text();225 await driver.elementByAccessibilityId(ID_PLAY).click();226 await driver.backgroundApp(1);227 // We need an explicit sleep wait here to determine if playback has progressed/resumed automatically.228 await driver.sleep(1000);229 const controlsAreVisible1 = await driver.hasElementByAccessibilityId(ID_TIME_ELAPSED);230 if (!controlsAreVisible1) {231 await driver.elementByAccessibilityId(ID_PLAYER).click();232 await driver.waitFor(233 elementWithAccessibilityId(ID_TIME_ELAPSED, true),234 DEVICE_TIMEOUT,235 POLL_FREQUENCY,236 );237 }238 const timeElapsed = await driver.elementByAccessibilityId(ID_TIME_ELAPSED).text();239 expect(timeElapsed).not.toBe(initialTimeElapsed);240 },241 );242 });243 describe('Settings Screen', () => {244 beforeAll(async () => {245 // Select Settings Tab246 const isPlatformAndroid = TARGET_PLATFORM === 'android' || TARGET_PLATFORM === 'firetv';247 if (isPlatformAndroid) {248 await driver.backgroundApp(1);249 } else {250 await driver.elementByAccessibilityId(ID_BACK_BUTTON).click();251 }252 await driver.elementByAccessibilityId(ID_SETTINGS_TAB).click();253 });254 skipIt(TVOS_SIMULATOR)('should show app preferences', async () => {255 expect(await driver.hasElementByAccessibilityId('Settings Preferences')).toBe(true);256 });257 skipIt(TVOS_SIMULATOR)('should be able to switch app theme', async () => {258 await driver.elementByAccessibilityId('Switch to Use Default Component Theme').click();259 // App should reload with new theme on the home page260 expect(await driver.hasElementByAccessibilityId(ID_ON_DEMAND)).toBe(true);261 });262 });...

Full Screen

Full Screen

gesture-e2e-specs.js

Source:gesture-e2e-specs.js Github

copy

Full Screen

...26 await B.delay(500);27 });28 describe('tap, press, longpress', () => {29 beforeEach(async () => {30 let el = await driver.elementByAccessibilityId('Action Sheets');31 await driver.execute('mobile: scroll', {element: el, toVisible: true});32 await el.click();33 });34 describe('tap', () => {35 it('should tap on the element', async () => {36 let el1 = await driver.elementByAccessibilityId('Okay / Cancel');37 let action = new wd.TouchAction(driver);38 action.tap({el: el1});39 await action.perform();40 let el2 = await driver.elementByAccessibilityId('OK');41 await el2.click();42 });43 it('should tap on arbitrary coordinates', async () => {44 let el1 = await driver.elementByAccessibilityId('Okay / Cancel');45 let loc = await el1.getLocation();46 let action = new wd.TouchAction(driver);47 action.tap(loc);48 await action.perform();49 let el2 = await driver.elementByAccessibilityId('OK');50 await el2.click();51 });52 });53 it('should long press on an element', async () => {54 let el1 = await driver.elementByAccessibilityId('Okay / Cancel');55 let action = new wd.TouchAction(driver);56 action.longPress({el: el1});57 await action.perform();58 let el2 = await driver.elementByAccessibilityId('Cancel');59 await el2.click();60 });61 it('should long press on an element with duration through press-wait-release', async () => {62 let el1 = await driver.elementByAccessibilityId('Okay / Cancel');63 let action = new wd.TouchAction(driver);64 action.press({el: el1}).wait(1200).release();65 await action.perform();66 let el2 = await driver.elementByAccessibilityId('Cancel');67 await el2.click();68 });69 it('should long press on arbitrary coordinate', async () => {70 let el1 = await driver.elementByAccessibilityId('Okay / Cancel');71 let loc = await el1.getLocation();72 let action = new wd.TouchAction(driver);73 action.press(loc).wait(500).release();74 await action.perform();75 let el2 = await driver.elementByAccessibilityId('OK');76 await el2.click();77 });78 });79 it('should scroll using touch actions', async function () {80 // TODO: investigate why this fails in Travis81 // it seems to go into the "Page Control" view before trying to scroll?82 if (process.env.TRAVIS) this.skip();83 let el1 = await driver.elementByAccessibilityId('Action Sheets');84 let el2 = await driver.elementByAccessibilityId('Text Fields');85 let action = new wd.TouchAction(driver);86 action.press({el: el1}).moveTo({el: el2}).release();87 await action.perform();88 let el3 = await driver.elementByAccessibilityId('Text Fields');89 await el3.click().should.not.be.rejected;90 });91 it('should double tap on an element', async () => {92 let el = await driver.elementByAccessibilityId('Steppers');93 await driver.execute('mobile: scroll', {element: el, toVisible: true});94 await el.click();95 let stepper = await driver.elementByAccessibilityId('Increment');96 let action = new wd.TouchAction(driver);97 action.tap({el: stepper, count: 2});98 await action.perform();99 await driver.elementByAccessibilityId('2').should.not.be.rejected;100 });101 describe('pinch and zoom', () => {102 beforeEach(async () => {103 let el = await driver.elementByAccessibilityId('Web View');104 await driver.execute('mobile: scroll', {element: el, toVisible: true});105 await el.click();106 });107 // at this point this test relies on watching it happen, nothing is asserted108 // in automation, this just checks that errors aren't thrown109 it('should be able to pinch', async () => {110 let ctxs;111 await retryInterval(4, 500, async () => {112 // on some systems (like Travis) it takes a while to load the webview113 ctxs = await driver.contexts();114 if (ctxs.length === 1) {115 throw new Error('No webview context found');116 }117 });118 await driver.context(ctxs[1]);119 await driver.get('https://avatars1.githubusercontent.com/u/3221291?v=3&s=400');120 await driver.context(ctxs[0]);121 async function doZoom () {122 let el = await driver.elementByClassName('XCUIElementTypeApplication');123 let thumb = new wd.TouchAction(driver);124 thumb.press({el, x: 100, y: 0}).moveTo({el, x: 50, y: 0}).release();125 let foreFinger = new wd.TouchAction(driver);126 foreFinger.press({el, x: 100, y: 0}).moveTo({el, x: 105, y: 0}).release();127 let zoom = new wd.MultiAction(driver);128 zoom.add(thumb, foreFinger);129 await zoom.perform();130 }131 await doZoom();132 async function doPinch () {133 let el = await driver.elementByClassName('XCUIElementTypeApplication');134 let thumb = new wd.TouchAction(driver);135 thumb.press({el, x: 50, y: 0}).moveTo({el, x: 100, y: 0}).release();136 let foreFinger = new wd.TouchAction(driver);137 foreFinger.press({el, x: 100, y: 0}).moveTo({el, x: 50, y: 0}).release();138 let pinch = new wd.MultiAction(driver);139 pinch.add(thumb, foreFinger);140 await pinch.perform();141 }142 await doPinch();143 });144 });145 });146 describe('tap with tapWithShortPressDuration cap', () => {147 // needs a special cap, so has to be in its own session148 before(async () => {149 driver = await initSession(_.defaults({150 tapWithShortPressDuration: 0.01151 }, UICATALOG_CAPS));152 });153 after(async () => {154 await deleteSession();155 });156 it('should tap on the element', async () => {157 let el1 = await driver.elementByAccessibilityId('Action Sheets');158 let action = new wd.TouchAction(driver);159 action.tap({el: el1});160 action.perform();161 // pause a moment so the alert can animate162 await B.delay(500);163 let el2 = await driver.elementByAccessibilityId('Okay / Cancel');164 el2.should.exist;165 });166 });...

Full Screen

Full Screen

tests.js

Source:tests.js Github

copy

Full Screen

1var wd = require("wd"),2_ = require('underscore'),3Q = require('q');4//serverConfigs = require('./helpers/appium-servers');5describe("Nayuta Test", function () {6this.timeout(100000000);7var driver;8var allPassed = true;9before(function () {10var serverConfig = {11 host: 'localhost',12 port: 472313 };14 15driver = wd.promiseChainRemote(serverConfig);16//require("./helpers/logging").configure(driver);17var desired = {18 "name":"nayuta test",19 "platformName": "ios",20 platformVersion: '12.0',//13.021deviceName: 'iPhone X',22// "platformVersion": "13.0",23// "deviceName": "iPhone 11 Pro Max",24 //"app": "/Users/chris/Documents/Appcelerator_Studio_Workspace/nayuta/build/iphone/build/Products/Debug-iphonesimulator/Nayuta.app",25 "app":process.cwd()+"/build/iphone/build/Products/Debug-iphonesimulator/Nayuta.app",26 "automationName": "XCUITest",27 "useNewWDA":false,28 "noReset": true,29 "showXcodeLog":false, 30};31 32return driver.init(desired);33});34after(function () {35return driver36 .quit()37 .finally(function () {38 if (process.env.npm_package_config_sauce) {39 return driver.sauceJobStatus(allPassed);40 }41 });42});43afterEach(function () {44allPassed = allPassed && this.currentTest.state === 'passed';45});46function populate() {47var seq = _(['IntegerA', 'IntegerB']).map(function (id) {48 return function (sum) {49 return driver.waitForElementById(id, 3000).then(function (el) {50 var x = _.random(0,10);51 sum += x;52 return el.type('' + x).then(function () { return sum; })53 .elementById('Done').click().sleep(1000); // dismissing keyboard54 }).then(function () { return sum; });55 };56});57return seq.reduce(Q.when, new Q(0));58}59it("Should Sleep", function () {60return driver.sleep(5000)61});62it("Should Press Create New Wallet", function () {63 64 65return driver.66elementByAccessibilityId('Create New Wallet')67 .click().sleep(2000)68});69it("Should Accept Disclaimer", function () { 70 71 return driver.dismissAlert().sleep(2000)72 73});74it("Should Press Testnet", function () { 75 return driver.dismissAlert().sleep(2000)76 77});78it("Should Skip Auto Pilot", function () { 79return driver.80elementByAccessibilityId('Skip Auto Pilot')81 .click().sleep(6000)82});83it("Should Press Next 1", function () { 84return driver.85elementByAccessibilityId('Passphrase Next 1')86 .click().sleep(2000)87}); 88it("Should Press Next 2", function () { 89return driver.90elementByAccessibilityId('Passphrase Next 2')91 .click().sleep(2000)92});93it("Should Press Next 3", function () { 94return driver.95elementByAccessibilityId('Passphrase Next 3')96 .click().sleep(2000)97});98it("Should Press Next 4", function () { 99return driver.100elementByAccessibilityId('Passphrase Next 4')101 .click().sleep(3000)102});103it("Should Press Skip Dev", function () { 104return driver.105elementByAccessibilityId('Skip Dev')106 .click().sleep(4000)107});108it("Should Press Key Pad 1", function () { 109return driver.110elementByAccessibilityId('keypad1')111 .click().sleep(1000)112});113it("Should Press Key Pad 2", function () { 114return driver.115elementByAccessibilityId('keypad2')116 .click().sleep(1000)117});118it("Should Press Key Pad 3", function () { 119return driver.120elementByAccessibilityId('keypad3')121 .click().sleep(1000)122});123it("Should Press Key Pad 4", function () { 124return driver.125elementByAccessibilityId('keypad4')126 .click().sleep(1000)127});128it("Should Press Key Pad 5", function () { 129return driver.130elementByAccessibilityId('keypad5')131 .click().sleep(1000)132});133it("Should Press Key Pad 6", function () { 134return driver.135elementByAccessibilityId('keypad6')136 .click().sleep(1000)137});138it("Should Press Key Pad 1", function () { 139return driver.140elementByAccessibilityId('keypad1')141 .click().sleep(1000)142});143it("Should Press Key Pad 2", function () { 144return driver.145elementByAccessibilityId('keypad2')146 .click().sleep(1000)147});148it("Should Press Key Pad 3", function () { 149return driver.150elementByAccessibilityId('keypad3')151 .click().sleep(1000)152});153it("Should Press Key Pad 4", function () { 154return driver.155elementByAccessibilityId('keypad4')156 .click().sleep(1000)157});158it("Should Press Key Pad 5", function () { 159return driver.160elementByAccessibilityId('keypad5')161 .click().sleep(1000)162});163it("Should Press Key Pad 6", function () { 164return driver.165elementByAccessibilityId('keypad6')166 .click().sleep(3000)167});168it("Should Press Link Later", function () { 169return driver.170elementByAccessibilityId('link later')171 .click().sleep(10000)172});...

Full Screen

Full Screen

auth.test.js

Source:auth.test.js Github

copy

Full Screen

...24 .type('test@gmail.com');25 await driver26 .elementByAccessibilityId('login_input_password')27 .type('Password1');28 await driver.elementByAccessibilityId('btn_login').click();29 const messageExist = await driver.hasElementByAccessibilityId(30 'txt_message',31 );32 if (messageExist) {33 const TEXT = 'Logged in successfully';34 const message = await driver35 .elementByAccessibilityId('txt_message')36 .text();37 expect(message).toBe(TEXT);38 }39 driver.sleep(3000);40 });41 it('unsuccessfull login', async () => {42 await driver43 .elementByAccessibilityId('login_input_email')44 .type('invalidemail');45 await driver46 .elementByAccessibilityId('login_input_password')47 .type('password');48 await driver.elementByAccessibilityId('btn_login').click();49 const messageExist = await driver.hasElementByAccessibilityId(50 'txt_message',51 );52 if (messageExist) {53 const TEXT =54 'email must be a valid email' || 'Invalid email' || 'Invalid password';55 const message = await driver56 .elementByAccessibilityId('txt_message')57 .text();58 expect(message).toBe(TEXT);59 }60 driver.sleep(3000);61 });62});

Full Screen

Full Screen

TodaysTasks.spec.js

Source:TodaysTasks.spec.js Github

copy

Full Screen

...25});26test('Add tasks', async () => {27 const task1 = 'Task 1';28 const task2 = 'Task 2';29 await driver.elementByAccessibilityId('input').type(task1);30 await driver.elementByAccessibilityId('button').click();31 await driver.sleep(1000);32 await driver.elementByAccessibilityId('input').type(task2);33 await driver.elementByAccessibilityId('button').click();34 await driver.sleep(1000);35 const text1 = await driver.elementByAccessibilityId('text_1').text();36 const text2 = await driver.elementByAccessibilityId('text_2').text();37 expect(text1).toBe(task1);38 expect(text2).toBe(task2);39});40test('Complete task', async () => {41 const task1 = 'Task 1';42 const task2 = 'Task 2';43 await driver.elementByAccessibilityId('input').type(task1);44 await driver.elementByAccessibilityId('button').click();45 await driver.sleep(1000);46 await driver.elementByAccessibilityId('input').type(task2);47 await driver.elementByAccessibilityId('button').click();48 await driver.sleep(1000);49 await driver.elementByAccessibilityId('task_0').click();50 await driver.sleep(1000);51 expect(await driver.hasElementByAccessibilityId('text_1')).toBe(true);52 expect(await driver.hasElementByAccessibilityId('text_2')).toBe(false);...

Full Screen

Full Screen

appium.test.js

Source:appium.test.js Github

copy

Full Screen

...12 await driver.sleep(2000); // wait for app to load13});14test('example test', async () => {15 expect(await driver.hasElementByAccessibilityId('text')).toBe(true);16 const text = await driver.elementByAccessibilityId('text').text();17 expect(text).toBe('1');18 expect(await driver.hasElementByAccessibilityId('button')).toBe(true);19 await driver.elementByAccessibilityId('button').click();20 await driver.sleep(2000);21 let name = await driver.elementByAccessibilityId('name').text();22 expect(name).toBe('Leanne Graham');23 await driver.elementByAccessibilityId('text').clear();24 await driver.elementByAccessibilityId('text').type('2');25 await driver.elementByAccessibilityId('button').click();26 await driver.sleep(2000);27 name = await driver.elementByAccessibilityId('name').text();28 expect(name).toBe('Ervin Howell');...

Full Screen

Full Screen

SignIn.appium.js

Source:SignIn.appium.js Github

copy

Full Screen

2const { testIds } = Constants;3export default async (driver) => {4 test("SignIn", async () => {5 await driver.waitForElementByAccessibilityId(testIds.email, 80000);6 const emailElement = await driver.elementByAccessibilityId(testIds.email);7 await emailElement.click();8 await emailElement.sendKeys("test@gmail.com");9 const passwordElement = await driver.elementByAccessibilityId(10 testIds.password11 );12 await passwordElement.click();13 await passwordElement.sendKeys("Test@123");14 const login = await driver.elementByAccessibilityId(testIds.login);15 await login.click();16 });...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1var wd = require('wd');2var assert = require('assert');3var desiredCaps = {4};5var driver = wd.promiseChainRemote('localhost', 4723);6driver.init(desiredCaps)7 .then(function() {8 return driver.elementByAccessibilityId('button');9 })10 .then(function(element) {11 return element.click();12 })13 .fin(function() {14 return driver.quit();15 })16 .done();17from appium import webdriver18desired_caps = {19}20button = driver.find_element_by_accessibility_id('button')21button.click()22driver.quit()23require_once('vendor/autoload.php');24$desired_caps = array(25);26$button = $driver->findElementByAccessibilityId('button');27$button->click();28$driver->quit();29import org.openqa.selenium.By;30import org.openqa.selenium.remote.DesiredCapabilities;31import org.openqa.selenium.remote.RemoteWebDriver;32public class test {33 public static void main(String[] args) throws Exception {34 DesiredCapabilities capabilities = new DesiredCapabilities();35 capabilities.setCapability("platformName", "iOS");36 capabilities.setCapability("platformVersion", "9.3");37 capabilities.setCapability("deviceName", "iPhone 6s");38 capabilities.setCapability("app", "/Users/username/Desktop/MyApp.app");

Full Screen

Using AI Code Generation

copy

Full Screen

1var wd = require("wd");2var driver = wd.promiseChainRemote("localhost", 4723);3driver.init({4}).then(function () {5 return driver.elementByAccessibilityId('MyElement').then(function (el) {6 return el.click();7 });8});

Full Screen

Using AI Code Generation

copy

Full Screen

1var wd = require('wd');2var assert = require('assert');3var desired = {4};5var driver = wd.promiseChainRemote('localhost', 4723);6 .init(desired)7 .elementByAccessibilityId('test')8 .text().should.become('test')9 .elementByAccessibilityId('test')10 .click()11 .quit();

Full Screen

Using AI Code Generation

copy

Full Screen

1var wd = require('wd');2var assert = require('assert');3var desired = {4};5var driver = wd.promiseChainRemote('localhost', 4723);6 .init(desired)7 .elementByAccessibilityId('TextField1')8 .click()9 .elementByAccessibilityId('TextField1')10 .sendKeys('text')11 .elementByAccessibilityId('TextField2')12 .sendKeys('text')13 .elementByAccessibilityId('ComputeSumButton')14 .click()15 .nodeify(function(err) {16 assert.ok(!err, err);17 console.log('Test passed');18 });19info: [debug] [INST] 2015-09-28 13:48:39 +0000 Debug: Got new command 1 from instruments: au.getElementByAccessibilityId('TextField1')20info: [debug] [INST] 2015-09-28 13:48:39 +0000 Debug: evaluating au.getElementByAccessibilityId('TextField1')

Full Screen

Automation Testing Tutorials

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.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Appium automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful