枚举Appium的Selenium Python绑定中的所有元素

ste*_*eha 7 python selenium android appium

我正在尝试开始使用Appium来测试我公司的移动应用程序.我希望使用Python绑定来编写脚本,我需要从Android应用程序开始.

我有Appium的例子都在工作.我可以运行grunt android并且测试工作,我可以运行android.py示例应用程序.

但我是一个全新的人,我没有清楚地了解如何识别我公司应用程序中的控件.我对Python很有经验,所以我想我只需构建一个控制元素列表并对它们进行内省.

我被卡住了!所有方法driver.find_elements_by_tag_name()都需要一个特定的标识符(或者至少我没有找到任何有效的通配符).

我如何反省代表被测Android应用程序的元素的Appium树?如何枚举所有元素以便我可以反省它们?是否有一棵树我可以走路找到应用程序中的所有元素?

我希望我能够找出这些元素,而无需获取应用程序的源代码,在Eclipse中构建应用程序等,但我可以在必要时执行此操作.

PS我更喜欢使用Python,但如果效果更好,可以使用其他内容进行内省.我仍然可以在Python中编写实际的测试,除非另一种语言在某种程度上明显更好.

ste*_*eha 3

我仍然想要一种从 Python 内省 Selenium 接口的方法。但我找到了一种可行的方法来清楚地了解应用程序的布局,并且很容易弄清楚如何编写 Selenium 测试。

首先,让您的应用程序在连接到 Android 开发计算机的真实设备上或模拟器中运行。基本上,如果您运行,adb devices您希望看到一台设备,即运行您的应用程序的设备。接下来,运行该uiautomatorviewer工具,然后单击Device Screenshot工具栏图标。(工具栏图标只有两个:第一个是Open图标,看起来像文件夹,而你想要的那个看起来像一堆手机。)

完成此操作后,就会出现应用程序的图像,左侧是屏幕截图,右侧是可浏览的树形轮廓。轮廓显示应用程序的所有控件,以及它们的文本标签(如果有)以及其他信息(例如clickable属性是否是该控件true或是否false适用于该控件)。

一个警告:控件显示编号,但在 Selenium 绑定中,编号可能不同。在ApiDemos示例应用程序中,该Graphics按钮的索引号为 4,因为它是第五个按钮,但要通过其位置访问它,我必须使用索引 5。索引 0 是一个不可点击的对象,其中包含文本“API Demos”。FrameLayout构成屏幕标题的不同对象。

因此,我能够对android.py脚本进行以下更改:

#elem = driver.find_element_by_name('Graphics')
elem = driver.find_elements_by_tag_name('TextView')[5]
Run Code Online (Sandbox Code Playgroud)

注释掉该driver.find_element_by_name()调用,然后TextView在整个应用程序中找到第六个调用。这不是最佳实践,但它表明结果确实uiautomationviewer让我可以查看我需要了解的有关控件的内容。

现在我知道的足够多了,可以做一些反省:

for elem in driver.find_elements_by_tag_name('TextView'):
    if elem.text == "Graphics":
        break
else:
    print("Could not find desired item")
Run Code Online (Sandbox Code Playgroud)

这并不比仅仅打电话好driver.find_element_by_name(),但它表明我走在正确的道路上。

uiautomatorviewer是解决我的问题的实用方法。如果您有纯 Python 的,请告诉我。