2013-03-26 10 views
6

Я пытаюсь начать работу с Appium для тестирования мобильных приложений моей компании. Я хочу использовать привязки Python для написания сценариев, и мне нужно начинать с приложений Android.Перечислить все элементы в Selenium Python bindings для Appium

У меня есть примеры Appium, которые все работают. Я могу запустить grunt android, и тесты работают, и я могу запустить пример приложения android.py.

Но я полный новичок, и у меня нет четкой картины того, как идентифицировать элементы управления в приложениях моей компании. Я опытен с Python, поэтому я подумал, что просто создам список элементов управления и заинтересую их.

Я застрял! Для всех методов, таких как driver.find_elements_by_tag_name(), требуется определенный идентификатор (или, по крайней мере, я не нашел никакого шаблона, который работает).

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

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

P.S. Я бы предпочел использовать Python, но был бы открыт для использования чего-то другого, чтобы сделать интроспекцию, если это работает лучше. Я все еще могу написать фактические тесты на Python, если другой язык не был каким-то образом значительно лучше.

ответ

2

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

Сначала запустите приложение, либо на реальном устройстве, подключенном к компьютеру разработки Android, либо в эмуляторе. В основном, если вы запустите adb devices, вы хотите увидеть одно устройство, на котором работает ваше приложение. Затем запустите инструмент uiautomatorviewer, а затем нажмите на значок панели инструментов Device Screenshot. (Есть только два значка на панели инструментов: первый - это значок Open и выглядит как папка с файлами, а тот, который вы хотите, выглядит как стек мобильных телефонов.)

После того, как вы это сделали, изображение вашего приложения появляется скриншот слева и просматриваемый контур дерева справа. На рисунке показаны все элементы управления приложения, а также их текстовые метки, если таковые имеются, и другая информация (например, имеет ли значение clickable свойство true или false для этого элемента управления).

Предупреждение: элементы управления показаны пронумерованными, но в привязках Selenium цифры могут быть не одинаковыми. В примере приложения ApiDemos кнопка Graphics имеет номер индекса 4, поскольку она является пятой кнопкой, но для доступа к ней по своей позиции мне приходилось использовать индекс 5. Индекс 0 был не кликабельным объектом, содержащим текст «API Demos», в другом объекте FrameLayout, составляющем заголовок для экрана.

Таким образом, я был в состоянии сделать это изменение в android.py сценария:

#elem = driver.find_element_by_name('Graphics') 
elem = driver.find_elements_by_tag_name('TextView')[5] 

Закомментируйте driver.find_element_by_name() вызова, и вместо того, чтобы найти во всем приложении шестой TextView. Это не лучшая практика, но это показывает, что результаты uiautomationviewer позволяют мне просматривать материалы, которые мне нужно знать о элементах управления.

Теперь я знаю достаточно, чтобы сделать немного самоанализа:

for elem in driver.find_elements_by_tag_name('TextView'): 
    if elem.text == "Graphics": 
     break 
else: 
    print("Could not find desired item") 

Это не лучше, чем просто вызов driver.find_element_by_name(), но это показывает, что я нахожусь на правильном пути.

uiautomatorviewer - практическое решение моей проблемы. Если у вас есть чистый-питон, сообщите мне об этом.

3

Appium поддерживает метод «источник страницы» WebDriver. Таким образом, вы можете сделать это:

# assume you have a driver object 
import json 

source = driver.page_source 
source = json.loads(source) 
# you can now work with source as a python object 
+0

Благодарим за ответ. Я уже пробовал это, и он не работает для меня ... тестовый сеанс завершается с ошибкой. Вы тестировали его с помощью приложения iOS или приложения для Android? Я готов поспорить, что он работает правильно для iOS, но я не думаю, что он еще работает для Android. – steveha

Смежные вопросы