Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Appium. Запуск веб-браузера на ПК вместо .apk приложения на смартфоне

intellij
selenide
appium
Теги: #<Tag:0x00007fedb7b51fd8> #<Tag:0x00007fedb7b51e98> #<Tag:0x00007fedb7b51a60>

(Igor) #1

Здравствуйте. Столкнулся с проблемой запуска автотеста на смартфоне. Тест написан в IntelliJ с помощью Selenide, локаторы взяты через UIAutomator Viewer.

Ситуация такова:

  • Запускаю автотест через Appium
  • Открывается .apk приложение в смартфоне
  • Затем на моем ПК открывается браузер Firefox
  • Тест падает, поскольку Selenide пытается найти указанный локатор не в приложении на смартфоне, а в пустом окне браузера. В консоли IDE’шки показывает ошибку:

Feb 08, 2018 11:17:55 AM com.codeborne.selenide.impl.WebDriverThreadLocalContainer getWebDriver
INFO: No webdriver is bound to current thread: 1 - let’s create new webdriver

Что пробовал из вариантов:

  • Проверял записанные пути окружения
  • Указывал путь к файлу с папки из ПК, из папки с проектом и на самом смартфоне
  • Подключал разные драйверы: AppiumDriver, AndroidDriver, RemoteWebDriver
  • Молился :slight_smile:

В общем, уже сижу и не знаю, что делать. Заранее спасибо за советы, помощь или хотя бы слова утешения)

Вот пример кода из BaseTest
AndroidDriver driver;

@BeforeTest
public void setUp () throws MalformedURLException {

    DesiredCapabilities capabilities = new DesiredCapabilities();

    capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "ENU5T13096001216");
    capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
    capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "7.1.2");
    capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android");

    File file = new File("./app", example-dev.apk");
    capabilities.setCapability("app", file.getAbsolutePath());

    capabilities.setCapability("appPackage", "com.example");
    capabilities.setCapability("appActivity", "com.example.MainActivity");

    driver = new AndroidDriver(new URL("http://0.0.0.0:4723/wd/hub"), capabilities);
    driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

}

(Ray Romanov) #2

Как я понял ты хочешь одновременно тестировать приложение из андроида и веб из браузера.
То нужно создавать 2 инстанс драйвера и с ними работать к примеру driverAppium для андроида и driverWeb для браузера.


(Igor) #3

Не совсем. Мне нужно тестировать только на Андроиде и приложение должно запускаться на смартфоне. Но по какой-то причине после начала прогона теста и запуска приложения открывается браузер на ПК. Хотя в тесте ничего про запуск веб-браузера не указывал.

Было подозрение, что запуск браузера и упоминаемый в логах Marionette где-то прописаны в дефолтных настройках окружения, но вот где? Ставил Android SDK, ADB, Appium и прочее, что нужно.

Вот что прописано в файле .bashr, ОС Ubuntu 16.04 LTS (уже тоже добавлял все, что только можно)

export ANDROID_HOME=/home/tester/android
export PATH=$PATH:/home/tester/android/tools
export PATH=$PATH:/home/tester/android/platform-tools
export PATH="$HOME/.linuxbrew/bin:$PATH"
export LD_LIBRARY_PATH="$HOME/.linuxbrew/lib:$LD_LIBRARY_PATH"
export MANPATH="$HOME/.linuxbrew/share/man:$MANPATH"
export INFOPATH="$HOME/.linuxbrew/share/info:$INFOPATH"
export ANDROID_SDK=$ANDROID_HOME

Спасибо, что быстро ответили.


(vmaximv) #4

Слишком ядреная смесь - selenide+selenium+appium_server. Попробуйте просто appium java client.


(Igor) #5

Ситуация решилась тем, что драйверу селенида не были переданы параметры самого устройства, понадобилось добавить строчку WebDriverRunner.setWebDriver(driver); и заработало. По итогу, были эмулированы настройки для Аппиума, но ничего не передано Селениду - в результате чего тот и пробовал действовать по своей базовой схеме, со вшитым запуском браузера Мазилла

В общем, в итоге выглядит так:

AppiumDriver driver;
driver = new AndroidDriver(new URL(“http://0.0.0.0:4723/wd/hub”), capabilities);
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
WebDriverRunner.setWebDriver(driver);

а для driver уже передаются параметры capabilities. Может, кому-то еще и поможет. :slight_smile: