20. Мобильная автоматизация #1. Разрабатываем автотесты с Browserstack - qa-guru/knowledge-base GitHub Wiki
Browserstack
Browserstack — индийская облачная платформа для мобильного тестирования и веб-тестирования. Сервис предоставляет удаленный доступ к мобильным гаджетам на Android и iOS. Browserstack платный, но есть пробные тарифы, которых должно хватить для базовых задач.
На главной странице нас интересуют два последних раздела. App Live предназначен для запуска устройства и ручного взаимодействия, а App Automate для автоматизации.
Нажмем App Live и попробуем запустить удаленное Android-устройство в браузере. На странице регистрации нажимаем Get started free и проходим пошаговую процедуру регистрации. Если вы работаете с macOS, то важно учесть, что сервис не работает с браузером Safari. Поэтому следует перейти в Chrome или Firefox.
Таким образом выглядит страница выбора устройства. Для запуска доступна коллекция гаджетов на базе Android и iOS. Выбираем смартфон на Android и в окне запустится сам гаджет. С ним можно будет взаимодействовать как с физическим устройством.
Если перейти в раздел Inspect и нажать кнопку Play, то запустится режим инспектора элементов и можно будет изучить окно приложения более детально, получив подробную информацию о каждом элементе. Также можно получить имена локаторов.
Пишем мобильные автотесты. Создаем проект в Browserstack
- Создаем репозиторий проекта, добавляем
.gitignore
и открываем репозиторий на своем компьютере с помощью IDEA. - Переходим на главную страницу Browserstack и выбираем карточку App Automate.
- Нажимаем Get Started Free.
- Выбираем Java JUnit.
Нас встретит краткая документация по развертыванию проекта на платформе.
build.gradle
Пишем мобильные автотесты. Создаем Если файл build.gradle
уже создан в проекте, то редактируем его, если файла нет, то создаем. Файл должен выглядеть следующим образом:
plugins {
id 'java-library'
id "io.qameta.allure" version "2.9.6"
}
repositories {
mavenCentral()
}
def allureVersion = "2.17.3",
selenideVersion = "6.5.2",
appiumVersion = "8.0.0",
// appiumVersion = "7.6.0",
restAssured = "4.5.1",
junitVersion = "5.8.2",
slf4jVersion = "1.7.32"
allure {
report {
version.set(allureVersion)
}
adapter {
aspectjWeaver.set(true)
frameworks {
junit5 {
adapterVersion.set(allureVersion)
}
}
}
}
dependencies {
testImplementation(
"com.codeborne:selenide:$selenideVersion",
"io.qameta.allure:allure-selenide:$allureVersion",
"io.appium:java-client:$appiumVersion",
"io.rest-assured:rest-assured:$restAssured",
"org.junit.jupiter:junit-jupiter:$junitVersion",
"org.slf4j:slf4j-simple:$slf4jVersion"
)
}
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
tasks.withType(Test) {
systemProperties(System.getProperties())
useJUnitPlatform()
testLogging {
lifecycle {
events "started", "skipped", "failed", "standard_error", "standard_out"
exceptionFormat "short"
}
}
}
task android(type: Test) {
useJUnitPlatform {
includeTags 'android'
}
}
Пишем мобильные автотесты. Запускаем тест в Browserstack
- Создаем класс теста в проекте через IDEA
- Тело теста из примера должно выглядеть следующим образом:
public class AndroidSampleTest {
@Test
void searchTest() throws MalformedURLException, InterruptedException {
DesiredCapabilities caps = new DesiredCapabilities();
// Set your access credentials
caps.setCapability("browserstack.user", "autotestscloud_qAejV5");
caps.setCapability("browserstack.key", "DkvhzD6ZSLTsxYERedAR");
// Set URL of the application under test
caps.setCapability("app", "bs://c700ce60cf13ae8ed97705a55b8e022f13c5827c");
// Specify device and os_version for testing
caps.setCapability("device", "Google Pixel 3");
caps.setCapability("os_version", "9.0");
// Set other BrowserStack capabilities
caps.setCapability("project", "First Java Project");
caps.setCapability("build", "browserstack-build-1");
caps.setCapability("name", "first_test");
// Initialise the remote Webdriver using BrowserStack remote URL
// and desired capabilities defined above
AndroidDriver<AndroidElement> driver = new AndroidDriver<AndroidElement>(
new URL("http://hub.browserstack.com/wd/hub"), caps);
// new URL("http://hub-cloud.browserstack.com"), caps);
// Test case for the BrowserStack sample Android app.
// If you have uploaded your app, update the test case here.
AndroidElement searchElement = (AndroidElement) new WebDriverWait(driver, 30).until(
ExpectedConditions.elementToBeClickable(
MobileBy.AccessibilityId("Search Wikipedia")));
searchElement.click();
AndroidElement insertTextElement = (AndroidElement) new WebDriverWait(driver, 30).until(
ExpectedConditions.elementToBeClickable(
MobileBy.id("org.wikipedia.alpha:id/search_src_text")));
insertTextElement.sendKeys("BrowserStack");
Thread.sleep(5000);
List<AndroidElement> allProductsName = driver.findElementsByClassName(
"android.widget.TextView");
assert(allProductsName.size() > 0);
// Invoke driver.quit() after the test is done to indicate that the test is completed.
driver.quit();
}
}
- Запускаем тест из IDEA и если все было выполнено правильно, то процесс выполнения и результаты отобразятся в Browserstack.