2016-07-02 6 views
0

나는 여러 목록 항목이있는 목록보기가 있습니다. 각 항목은 이미지 단추와 고유 텍스트가있는 텍스트 뷰가있는 중첩 선형 레이아웃이있는 상대적 레이아웃입니다. 텍스트 뷰의 텍스트를 기반으로 목록에서 항목을 찾은 다음 그 옆에있는 이미지 단추를 클릭 할 수 있어야합니다. UiAutomator API를 기반으로하는 가장 좋은 방법은 부모보기의 형제에 액세스 할 수있는 fromParent 메서드를 사용하는 것입니다. 스크롤 및 Textview 찾는 데 문제가 있지만 부모 뷰 또는 이미지 단추에 대한 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

나는이 문제를 직면하고 당신을 위해 작동하는 경우 UI 자동화 스크립트를 사용하지 않습니다 내 솔루션은, 비록 그것을 시도를 제공

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

스택 추적 .

  1. 데이터의 POJO를 상대 레이아웃 내에 생성하십시오.
  2. 목록보기 요소를 가져옵니다.
  3. 목록보기
  4. 초기화 내부의 각 상대 뷰 요소를 확인하고 POJO 객체에 요소/텍스트를 지정하고 텍스트를 기반으로 원하는 상대 레이아웃을 식별 HashSet의/해시 맵
  5. 에 객체를 추가 할 수 있습니다.
  6. 개체에서 ImageButton 요소를 가져 와서 클릭하십시오.