Robot Framework – передача драйвера Appium в скрипт python

Я работаю над интеграцией Robot Framework с Appium, используя Python. Однако я не могу понять, как передать драйвер Appium, созданный в Robot Framework, на собственный скрипт python.

Моя окружающая среда:

  • Mac OS – Mavericks
  • Appium 1.2 (установленный на домашнем пиво)
  • Последняя платформа роботов (устанавливается через pip)
  • Последняя Appium Library for Robot Framework (устанавливается через pip)

У меня есть рабочий сценарий Appium на Python, но я хочу начать использовать Robot Framework для обработки фактических тестов.

частичный код для работы скрипта python:

wd = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) wd.find_element_by_name("Start").click() wd.find_element_by_xpath("//UIAApplication[1]/UIAWindow[1]/UIATableView[1]/UIATableCell[1]").click() wd.execute_script("var vKeyboard = target.frontMostApp().keyboard(); vKeyboard.typeString(\"Test Text\");") wd.execute_script("var vKeyboard = target.frontMostApp().keyboard(); vKeyboard.buttons()['Return'].tap();") 

Как вы можете видеть, из-за того, как работает приложение, мне пришлось использовать execute_script как часть скрипта.

Библиотека Appium для Robot Framework не раскрывает execute_script, поэтому мне нужно написать свой собственный в библиотеке python.

Вот мой запуск скрипта тестирования робота, который работает до тех пор, пока мне не нужно выполнить execute_script:

 TestStart Open Application ${REMOTE_URL} ${PLATFORM_NAME} ${PLATFORM_VERSION} ${DEVICE_NAME} ${APP} Click Element name=Start Click Element xpath=//UIAApplication[1]/UIAWindow[1]/UIATableView[1]/UIATableCell[1] 

Мой вопрос: как получить экземпляр драйвера, созданный в приложении Open, и передать его в сценарий Python?

У меня есть скрипт python, который имеет следующее:

 def KeyboardType(driver): driver.execute_script("var vKeyboard = target.frontMostApp().keyboard(); vKeyboard.typeString(\"hi there\");") 

Однако, похоже, я не могу передать драйвер из сценария Robot Framework на этот сценарий python.

Я попытался настроить приложение Open на переменную через:

 ${Driver} Open Application ${REMOTE_URL} ${PLATFORM_NAME} ${PLATFORM_VERSION} ${DEVICE_NAME} ${APP} KeyboardType ${Driver} 

но я получил ошибку:

AttributeError: объект 'str' не имеет атрибута 'execute_script'

Я также попытался передать результат Get Current Context в скрипт python, но затем я получаю:

AttributeError: объект 'unicode' не имеет атрибута 'execute_script'

Как передать драйвер, созданный Robot Framework, в сценарий python?

2 Solutions collect form web for “Robot Framework – передача драйвера Appium в скрипт python”

В настоящее время я не использую appium, поэтому я не могу дать окончательный ответ. Однако был задан аналогичный вопрос о селене, где кому-то нужен фактический объект webdriver. См. Вопрос Пропустить существующий объект Webdriver в пользовательскую библиотеку Python для Robot Framework

Короткий ответ заключается в том, что вы можете попытаться подклассифицировать библиотеку appium, чтобы ваши ключевые слова имели доступ ко всем внутренним элементам приложения, или вы можете получить обращение к библиотеке, вызвав BuiltIn().get_library_instance('Selenium2Library .

Дополнительные сведения о последнем методе см. В разделе Получение активного экземпляра библиотеки из Robot Framework в Руководстве пользователя Robot Framework .

Благодаря ответу Брайана Окли он указал мне на решение, которое подклассифицирует библиотеку Appium.

Я сделал следующие изменения, чтобы заставить его работать

Мой основной файл тестирования Robot Framework больше не ссылается на инфраструктуру Appium, но вместо этого ссылается только на мой пользовательский файл python.

Мой пользовательский файл python теперь подклассифицирует библиотеку Appium, поэтому у меня есть доступ к _current_application ().

Пользовательский класс python теперь выглядит следующим образом:

 from AppiumLibrary import AppiumLibrary class Custom(AppiumLibrary): def get_driver_instance(self): return self._current_application() def KeyboardType(self, textToType): self._current_application().execute_script("var vKeyboard = target.frontMostApp().keyboard(); vKeyboard.typeString(\"" + textToType + "\");") def PressKeyboardButton(self, buttonToPress): self._current_application().execute_script("var vKeyboard = target.frontMostApp().keyboard(); vKeyboard.buttons()['" + buttonToPress + "'].tap();") 

Теперь файл Robot Framework выглядит следующим образом:

 TestStart Open Application ${REMOTE_URL} ${PLATFORM_NAME} ${PLATFORM_VERSION} ${DEVICE_NAME} ${APP} Click Element name=Start Click Element xpath=//UIAApplication[1]/UIAWindow[1]/UIATableView[1]/UIATableCell[1] KeyboardType Test 123 PressKeyboardButton Return 

Примечание: на данный момент мне не нужно устанавливать Open Application в переменную, потому что подкласс автоматически имеет к нему доступ. Однако теперь я могу легко установить его в переменную позже через «get driver instance», если он мне понадобится.

Спасибо, что помогли Брайану!

  • Извлечение одного текста из ячейки таблицы, содержащей несколько текстов. Robot Framework
  • Сохранение объектов класса в рамках робота
  • Как добавить заголовки для CreateSession в библиотеке роботов
  • Как создать API POST (ReST) в платформе Robot с помощью
  • Как включить тестовые библиотеки Java в платформу Robot на основе Python
  • Как написать несколько условий if-statement в структуре робота
  • Рамка роботов: использование фейкера для создания префиксной строки для данных учетной записи
  • Могу ли я установить Selenium2Library для RobotFramework без установки Python?
  • Python - лучший язык программирования в мире.