У меня есть список с несколькими элементами списка. Каждый элемент представляет собой относительный макет с кнопкой изображения и вложенным линейным макетом, который имеет текстовое изображение с уникальным текстом. Мне нужно найти элемент в списке на основе текста в текстовом виде, а затем нажать кнопку изображения рядом с ним. Основываясь на 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.