Appium无法在选项卡栏控件中查看视图内的元素

2024-10-03 11:19:55 发布

您现在位置:Python中文网/ 问答频道 /正文

[上下文]
附录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_源]

    <?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中看到的,它似乎不包含该视图中的任何标签:

^{pr2}$

[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


Tags: the视图idtruetypeenabledelementfind
1条回答
网友
1楼 · 发布于 2024-10-03 11:19:55

我终于找到了这个问题的底部,并找到了为什么包含在我的视图中的元素不可见/不可访问的原因。 问题是我为所有东西启用了“可访问性”,包括视图本身。在

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

通过简单地为我的视图禁用“Accessibility”(取消选中XCode中的框),我开始看到该视图中包含的元素。在

相关问题 更多 >