Перейти к содержимому

Фотография

Selenium Grid + Appium + Python


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 Alexander_Tkachev

Alexander_Tkachev

    Новый участник

  • Members
  • Pip
  • 6 сообщений

Отправлено 20 августа 2019 - 06:57

Добрый день. Пытаюсь настроить параллельные автотесты приложения на нескольких андроид устройствах. 

Для каждого из устройств создал json файл вида:

{ "capabilities":
[
{
"deviceName": "LGM700dcbaf29c",
"version":"8.1.0",
"maxInstances": 10,
"platform":"ANDROID"
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":30000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url":"http://127.0.0.1:4723/wd/hub",
"host": "127.0.0.1",
"port": 4723,
"maxSession": 10,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "127.0.0.1"
}
}

Запускаю хаб, и отдельные инстансы Аппиума командой вида appium -a 127.0.0.1 -p 4723 -bp 2253 -U LGM700dcbaf29c --nodeconfig /home/test/LGM700dcbaf29c.json

 

В Environment.py прописал следующее:

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

def before_feature(context, feature):
caps = DesiredCapabilities.ANDROID.copy()
caps["app"] = WD + "/apps/" + AppName
caps["appPackage"] = "ru.messenger.android"
caps["appActivity"] = "ru.messenger.android.activity.main.StartActivity"
caps["newCommandTimeout"] = "1000"
context.driver = webdriver.Remote(
command_executor="http://127.0.0.1:4444/wd/hub",
desired_capabilities=caps
)

Но тут появляется проблема. DesiredCapabilities.ANDROID отдает только {'browserName': 'android', 'version': '', 'platform': 'ANDROID'}. Мне же для подключения еще нужен deviceName. В интернете советуют добавлять deviceName в caps вручную, так же как добавляются и остальные параметры, но тогда как запустить тест на двух устройствах, если вручную прописан deviceName одного из них. Я думал что можно каким-то образом вытаскивать deviceName из json файла который я указываю при запуске инстанса, но DesiredCapabilities.ANDROID.copy() видимо мне в этом не поможет. Есть какой-то вариант? 


  • 0

#2 Alexander_Tkachev

Alexander_Tkachev

    Новый участник

  • Members
  • Pip
  • 6 сообщений

Отправлено 20 августа 2019 - 12:39

Вопрос или такой сложный или такой тупой, что никто на него не ответит? )


  • 0

#3 checo

checo

    Опытный участник

  • Members
  • PipPipPipPip
  • 400 сообщений
  • Город:Н.Новгород

Отправлено 20 августа 2019 - 13:59

Возможно, никто на форуме еще не пробовал так делать, или они не успели сюда заглянуть.

 

Но если просто рассуждать, то грид нужен именно для того, чтобы у вас были в распоряжении несколько устройств с одинаковыми возможностями, и хаб сам решит, какое из них выделить.

Если нужно напрямую подключаться к драйверу по имени, почему бы так и не делать без всякого грида?


  • 0

#4 checo

checo

    Опытный участник

  • Members
  • PipPipPipPip
  • 400 сообщений
  • Город:Н.Новгород

Отправлено 20 августа 2019 - 14:15

А вообще, по стандарту расширения капабилити должны передаваться с префиксом.

Попробуйте, может быть, распознает в виде "appium:deviceName".


  • 0

#5 Alexander_Tkachev

Alexander_Tkachev

    Новый участник

  • Members
  • Pip
  • 6 сообщений

Отправлено 30 августа 2019 - 09:05

Решил так. При вызове экземпляра appium прописываю еще --device-name где указываю имя устройства

а потом. если где-то нужно имя устройства, дергаю его с помощью context.driver.capabilities["deviceName"] из хаба Selenium

 

К знатокам SeleniumGrid  такой вопрос: почему при подключении нескольких устройств. все тесты все равно прогоняются на одном из них, а не параллельно или поочередно?


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных