Appium - 无法在标签栏控制器中查看视图内的元素

时间:2017-07-27 18:33:44

标签: python python-2.7 appium-ios

[背景]
Appium 1.6.5
XCode 8.3.3
iOS 10.3
Python 2.7

我正在尝试使用基于创建标签应用程序的XCode模板创建的基本iOS应用程序的Appium。 我的应用程序是从该模板创建的,该模板基本上有一个标签栏控制器,预先设置了2个标签。 每个选项卡显示不同的视图。 每个视图都有2个标签,上面有一些文字。

[目标]
我想编写一个Appium脚本导航到特定的选项卡,然后读取其中一个标签的文本。

[问题]
我能够找到与所选选项卡对应的视图的元素(包括)。但是,我没有看到该视图中的任何元素。

我尝试使用ID和XPATH同样的结果。

注意:我尝试访问的每个元素都启用了辅助功能并设置了辅助功能ID。我设置的每个辅助功能ID都是唯一的。

[问题]
如何使用Appium访问相关标签?或者甚至更好,我的观点中的任何元素?

[driver.page_source的输出]

    <?xml version="1.0" encoding="UTF-8"?><AppiumAUT><XCUIElementTypeApplication type="XCUIElementTypeApplication" name="MyTestApp" label="MyTestApp" enabled="true" visible="true" x="0" y="0" width="375" height="667">
      <XCUIElementTypeWindow type="XCUIElementTypeWindow" enabled="true" visible="true" x="0" y="0" width="375" height="667">
        <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" x="0" y="0" width="375" height="667">
          <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" x="0" y="0" width="375" height="667">
            <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" x="0" y="0" width="375" height="667">
              <XCUIElementTypeOther type="XCUIElementTypeOther" name="view1" enabled="true" visible="true" x="0" y="0" width="375" height="667"/>
            </XCUIElementTypeOther>
          </XCUIElementTypeOther>
          <XCUIElementTypeTabBar type="XCUIElementTypeTabBar" enabled="true" visible="true" x="0" y="618" width="375" height="49"/>
        </XCUIElementTypeOther>
      </XCUIElementTypeWindow>
      <XCUIElementTypeWindow type="XCUIElementTypeWindow" enabled="true" visible="false" x="0" y="0" width="375" height="667">
        <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="false" x="0" y="0" width="375" height="667"/>
      </XCUIElementTypeWindow>
      <XCUIElementTypeWindow type="XCUIElementTypeWindow" enabled="true" visible="true" x="0" y="0" width="375" height="667">
        <XCUIElementTypeStatusBar type="XCUIElementTypeStatusBar" enabled="true" visible="true" x="0" y="0" width="375" height="20">
          <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="false" x="0" y="0" width="375" height="20"/>
          <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" x="0" y="0" width="375" height="20">
            <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" x="6" y="0" width="39" height="20"/>
            <XCUIElementTypeOther type="XCUIElementTypeOther" value="SSID" name="3 of 3 Wi-Fi bars" label="3 of 3 Wi-Fi bars" enabled="true" visible="true" x="50" y="0" width="13" height="20"/>
            <XCUIElementTypeOther type="XCUIElementTypeOther" name="10:35 AM" label="10:35 AM" enabled="true" visible="true" x="161" y="0" width="56" height="20"/>
            <XCUIElementTypeOther type="XCUIElementTypeOther" name="-100% battery power" label="-100% battery power" enabled="true" visible="true" x="337" y="0" width="33" height="20"/>
          </XCUIElementTypeOther>
        </XCUIElementTypeStatusBar>
      </XCUIElementTypeWindow>
    </XCUIElementTypeApplication></AppiumAUT>

View1是我的两个视图之一,正如您在上面的XML中所看到的,它似乎不包含该视图中的任何标签:

<XCUIElementTypeOther type="XCUIElementTypeOther" name="view1" enabled="true" visible="true" x="0" y="0" width="375" height="667"/>

[Python代码]
这是我正在使用的代码:

driver = webdriver.Remote(get_appium_server(), desired_capabilities=get_capabilities())
driver.find_element_by_id('view1')       # This works fine
driver.find_element_by_id('view1label1') # The code fails here despite the fact that this accessibility ID exists for one of the labels underneath 'view1'

当我运行它时,我收到以下错误:

Traceback (most recent call last):
  File "/some_path/Appium.py", line 33, in <module>
    mypythonappiumfunction()
  File "/some_path/Appium.py", line 28, in mypythonappiumfunction
    driver.find_element_by_id('view1label1') # The code fails here despite the fact that this accessibility ID exists for one of the labels underneath 'view1'
  File "/some_path/robot/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 289, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
  File "/some_path/robot/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 791, in find_element
    'value': value})['value']
  File "/some_path/robot/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 256, in execute
    self.error_handler.check_response(response)
  File "/some_path/robot/lib/python2.7/site-packages/appium/webdriver/errorhandler.py", line 29, in check_response
    raise wde
selenium.common.exceptions.NoSuchElementException: Message: An element could not be located on the page using the given search parameters.`

[应用截图]
XCode Storyboard

[我正在尝试访问的标签的XCode辅助功能]
Label properties in XCode

1 个答案:

答案 0 :(得分:0)

我终于深入了解了这一点,并找出了为什么我视图中包含的元素不可见/无法访问。 问题是我启用了#34; Accessibility&#34;包括视图本身在内的所有内容。

当您可以访问视图时,它会将视图视为您可以访问的单个大容器,但您将无法访问该视图中包含的元素。

只需禁用&#34;辅助功能&#34; (取消选中XCode中的框),我开始看到该视图中包含的元素。