2016-07-02 4 views
0

У меня есть список с несколькими элементами списка. Каждый элемент представляет собой относительный макет с кнопкой изображения и вложенным линейным макетом, который имеет текстовое изображение с уникальным текстом. Мне нужно найти элемент в списке на основе текста в текстовом виде, а затем нажать кнопку изображения рядом с ним. Основываясь на API UiAutomator, похоже, лучший способ сделать это - использовать метод fromParent, который позволяет получить доступ к родным и родственным представлениям. У меня нет проблем с прокруткой и поиском текстового поля, но я не смог создать UiSelector для его родительского представления или кнопки изображения.Использование appium и uiautomater для навигации по иерархии компоновки

self.web_driver.find_element_by_android_uiautomator('new UiScrollable(
new UiSelector().resourceId("' + self.id_prefix + 'list_view")).scrollIntoView(
new UiSelector().text("' + identifier + '")) ;') 

self.web_driver.find_element_by_android_uiautomator('new UiSelector().fromParent(
new UiSelector().text("' + identifier + '"))') 

Первый звонок работает безупречно, и я знаю, что селектор, чтобы найти вид, работает. Проблема заключается в использовании этого UiSelector для получения UiSelector для родительского представления.

UiSelector API, fromParent method

Трассировка стека

Traceback (most recent call last): 
    File "/.../test_suites/data_management.py", line 46, in test_delete 
    self.delete(valid) 
    File "/.../android_data_management.py", line 45, in delete 
    'list_view"))') 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/appium/webdriver/webdriver.py", line 110, in find_element_by_android_uiautomator 
    return self.find_element(by=By.ANDROID_UIAUTOMATOR, value=uia_string) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 712, in find_element 
    {'using': by, 'value': value})['value'] 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 201, in execute 
    self.error_handler.check_response(response) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/appium/webdriver/errorhandler.py", line 29, in check_response 
    raise wde 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/appium/webdriver/errorhandler.py", line 24, in check_response 
    super(MobileErrorHandler, self).check_response(response) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.NoSuchElementException: Message: An element could not be located on the page using the given search parameters. 

Copy of the xml layout. Red- textview I use to find the list item. Blue- the list item, green- the image button I want to click

ответ

0

я столкнулся этот вопрос, и мое решение не использовать UI скрипт автоматизации, хотя дать ему попробовать, если он работает для вас ,

  1. Создайте POJO для данных, относящихся к относительной компоновке.
  2. Получить элемент представления списка.
  3. Получить каждый относительный вид элемента внутри представления списка
  4. Initialize и присвоить элемент/текст объекта POJO и добавить объект в HashSet/HashMap
  5. Определение требуемого относительного макета на основе текста.
  6. получить элемент ImageButton от объекта и нажать на него.

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

  • Нет связанных вопросов^_^