Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Тестирование гибридного мобильного приложения с помощью Appium


(Olga Kozlova) #1

Ребята, обращаюсь за помощью к знатокам.
Что у нас есть:

  • гибридное мобильное приложение, обернутое в Cordova, внутри javascript, css, html

  • установленные Appium, Android SKD, JenyMotion (видят друг друга, отзываются)

  • первый базовый тест. Не работает (

    public class BaseAppTest {
    private AppiumDriver driver;

    @BeforeMethod
    public void before() throws Exception
    {
    File appDir = new File(“D:\Build\”);
    File app = new File(appDir, “2015-06-04_15-00-25_amt-es_Development_182.apk”);

      DesiredCapabilities capabilities = new DesiredCapabilities();
      capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
      capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "Appium");
      capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");
      capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
      capabilities.setCapability("app", app.getAbsolutePath());
      capabilities.setCapability("autoWebview", true);
      driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
      driver.manage().timeouts().implicitlyWait(10000, TimeUnit.SECONDS);
    

    }

    @AfterMethod
    public void afterSuite()
    {
    driver.quit();
    }

    @Test
    public void testit() {
    driver.findElement(By.xpath("//a[@class=‘SplashScreen__link-amt-en’]")).click();
    }
    }

Вот это я пытаюсь изобразить в тесте - нажать простую кнопку.

Что мне пишет Аппиум:
Запустила его, все вроде норм.
> Checking if an update is available

Update not available
Starting Node Server
warn: Appium support for versions of node < 0.12 has been deprecated and will be removed in a future version. Please upgrade!
info: Welcome to Appium v1.4.0 (REV 8f63e2f91ef7907aed8bda763f4e5ca08e86970a)
info: Appium REST http interface listener started on 127.0.0.1:4723
info: [debug] Non-default server args: {“app”:“D:\Build\2015-06-04_15-00-25_amt-es_Development_182.apk”,“address”:“127.0.0.1”,“logNoColors”:true,“deviceName”:“Samsung Galaxy”,“platformName”:“Android”,“platformVersion”:“19”,“automationName”:“Appium”}
info: Console LogLevel: debug

Запускаю тест: на виртуальном девайсе стартует приложение:
Стартует, честное слово.

Аппиум пишет мне много чего, в конце:

> info: Proxying [POST /wd/hub/session/64b988c71e919b122df0b37bd888293b/element] to [POST http://127.0.0.1:9515/wd/hub/session/64b988c71e919b122df0b37bd888293b/element] with body: {"using":"xpath","value":"//a[@class='SplashScreen__link-amt-en']"}

info: [debug] Didn’t get a new command in 60 secs, shutting down…
info: Shutting down appium session
info: [debug] Pressing the HOME button
info: [debug] executing cmd: D:\Exe\AndroidSDK\platform-tools\adb.exe -s 192.168.56.101:5555 shell “input keyevent 3”
info: [debug] Stopping logcat capture
info: [debug] Logcat terminated with code null, signal SIGTERM
info: [debug] Stopping chromedriver for context WEBVIEW_com.wildflowerhealth.ddp_amt_es
info: Proxying [DELETE /] to [DELETE http://127.0.0.1:9515/wd/hub/session/64b988c71e919b122df0b37bd888293b] with no body

Видно, что пытается что-то найти по хпазу… Но безуспешно.

Тест висит… Висит… Висит…

Пока не отключаю аппиум. Тогда он наконец падает.

Ребята, что я делаю не так?
Что можно доступное почитать по этому вопросу?


(Kirill Zhukov) #2

Может на WebView не получилось автоматически переключиться?


(Olga Kozlova) #4

Спасибо за совет переключиться на webview, но не могу это сделать: при любой попытке сделать даже System.out.println(driver.getContext()) - нещадно вылетает SessionNotFoundException. Уже весь интернет перерыла…


(Alexey Stepanov) #5

Добрый день. Приведите тут пример того html код в котором вы пытаетесь найти элемент через XPath


(Olga Kozlova) #6

Ребята! Только что мне удалось решить эту проблему и нажать эту несчастную кнопку.
С xpath все хорошо, я его проверяю через специальный инструмент в Хроме.
Дело в том, что почему-то пока у меня было в capabilities

capabilities.setCapability("autoWebview", true);

мой тест кидал мне эксепшн. Плакала я над ним 2 дня.
А сегодня закомментировала эту настройку в целях эксперимента (метод тыка - прекрасная штука) и перешла на WebView старым дедовским способом.

И все сработало!
Можно мучаться дальше!
Спасибо!


(Alexey Stepanov) #7

Клева))
Успехов))


(Taras) #8

capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, “Appium”);
поменять на capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, “selendroid”);


(Olga Kozlova) #9

Ребята, есть ли какие-то особенности настройки аппиума для тест-сьютов?
По одному тесты идут неплохо, но запуская целый класс-тестсьют с методами-тестами столкнулась с кучей проблем. Постоянно (но непредсказуемо) не может быть запущена сессия, каждый раз на разных тестах, порой эмуляторы отваливаются… Плюс часто после падения одного теста все остальные он и не запускает.

Я все же подозреваю, что это проблемы не аппиума (т.к. живые люди как-то на нем автоматизируют), а моей криворукости…


(Olga Kozlova) #10

А почему Вы считаете, что лучше использовать селендроид?


(Taras) #11

Appium тип автомейшина работает когда версия дроида > 4.4


(Olga Kozlova) #12

Да, это я знаю, потому выбираю девайсы не ниже 4.4. Но в целом наверное нет разницы по надежности?


(Taras) #13

нет, wired протокол везде … разве что поддержка нових функций типа plane mode итд


(Olga Kozlova) #14

Видно, карма у меня такая, самой на свои темы здесь отвечать…
Но ради облегчения будущих поколений не поленюсь:
Проблема была с сессиями аппиума. И чтобы ее решить, мне посоветовали не стартовать новую сессию перед каждым тестом, а стартовать одну перед тест-сьютом и до конца ее использовать.
В итоге все capabilities и настройку драйвера я вынесла в аннотацию @BeforeTest, driver.qiut() - в @AfterTest - и пока что подобных проблем больше не возникало. Возникают другие… но это уже другая история…