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

2024-05-18 10:18:19 发布

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

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

我把Appium的例子都用上了。我可以运行grunt android并且测试正常,我可以运行android.py示例应用程序。在

但我是个新手,我不清楚如何识别公司应用程序中的控件。我对Python很有经验,所以我想我应该构建一个控制元素的列表并对它们进行反思。在

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

我如何反省代表测试中的Android应用程序的Appium元素树?我怎样才能列举出所有的元素以便我能够反省它们?有没有树可以让我在应用程序中找到所有元素?在

我希望我可以在不需要获取应用程序的源代码、在Eclipse中构建应用程序等的情况下就可以找到这些元素,但如果需要,我可以这样做。在

另外,我更喜欢使用Python,但是如果它能更好地工作,我愿意使用其他东西来进行自省。我仍然可以用Python编写实际的测试,除非另一种语言以某种方式好得多。在


Tags: py脚本应用程序元素示例公司经验控件
2条回答

我仍然希望有一种方法来反思Python中的Selenium接口。但是我已经找到了一种可行的方法来清晰地了解应用程序的布局,并且很容易找到如何编写Selenium测试的方法。在

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

一旦你这样做了,你的应用程序的图像就会出现,左边是截图,右边是可浏览的树轮廓。大纲显示了应用程序的所有控件,以及它们的文本标签(如果有的话),以及其他信息(例如该控件的clickable属性是true还是{})。在

一个警告:控件显示为编号,但在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]

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

现在我有足够的知识来反省一下:

^{pr2}$

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

uiautomatorviewer是我问题的一个实际解决方案。如果你有一个纯Python请让我知道。在

Appium支持WebDriver的“页面源”方法。所以你可以这样做:

# assume you have a driver object
import json

source = driver.page_source
source = json.loads(source)
# you can now work with source as a python object

相关问题 更多 >