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

  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.