Skip to content

20. Мобильная автоматизация #1. Разрабатываем автотесты с Browserstack

Daniil Shatukhin edited this page Jun 29, 2022 · 1 revision

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

  1. Создаем репозиторий проекта, добавляем .gitignore и открываем репозиторий на своем компьютере с помощью IDEA.
  2. Переходим на главную страницу Browserstack и выбираем карточку App Automate.
  3. Нажимаем Get Started Free.

  1. Выбираем 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

  1. Создаем класс теста в проекте через IDEA
  2. Тело теста из примера должно выглядеть следующим образом:
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();

    }
}
  1. Запускаем тест из IDEA и если все было выполнено правильно, то процесс выполнения и результаты отобразятся в Browserstack.

Содержание
Командная строка
Кодировка UTF-8 в Java
Список полезных книг для автоматизаторов тестирования на языке Java
Список полезных книг для автоматизаторов тестирования на языке Python Структура проекта Github README.md

Java:
1. Вводное занятие. Сразу к практике.
2. Git. GitHub. Погружаемся.
3. Погружаемся в инструментарий и библиотеки
4. Основы Java
5. Продолжаем разрабатывать автотесты. PageObjects
6. JUnit 5
7. Allure Reports
8. Работа с файлами
9. Selenide #1
10. Jenkins. Создаем первую задачу
11. Управляем параметрами в коде и в Jenkins
12. Отправляем уведомления о результатах прохождения автотестов
13. Учимся быстро разрабатывать проекты для тестовых заданий
14. Selenoid
15. Библиотека Owner
16. REST API. Пишем автотесты с Rest assured
17. REST API. Декомпозируем UI тесты. Подключаем отчетность
18. REST API. Продолжаем изучать
19. Мобильная автоматизация #1. Разрабатываем автотесты с Browserstack
20. Allure TestOps
21. Переезд на собственную инфраструктуру Java

Python:
1. Вводное занятие. Сразу к практике!
2. Погружаемся в инструментарий и библиотеки
3. Git. GitHub. Погружаемся.
4. Основы Python
5. Selene #1
6. Основы Python. Часть II
7. Основы Python. Часть III
8. Page Object
9. Allure Reports
10. Работаем с файлами Python
11. Jenkins. Создаем первую задачу и управляем параметрами Python
12. Телеграм бот. Отправляем уведомления о результатах прохождения тестов
13. Pytest
14. Selenoid
15. Pytest. Часть II
16. Venv, Poetry и управление зависимостями проекта
17. REST API. Часть I. Пишем автотесты с Requests
18. REST API. Часть II. Продолжаем изучать
19. Мобильная автоматизация #1. Разрабатываем автотесты с Browserstack
20. Мобильная автоматизация #2. Разрабатываем автотесты с эмулятором Android устройства
21. Allure TestOps
22. Переезд на собственную инфраструктуру Python

Clone this wiki locally