使用 Python 在 Appium / Android 上选择一个元素,该元素与 UIAutomatorViewer 上的另一个元素具有相同的类和相同的索引

Posted

技术标签:

【中文标题】使用 Python 在 Appium / Android 上选择一个元素,该元素与 UIAutomatorViewer 上的另一个元素具有相同的类和相同的索引【英文标题】:Selecting an element on Appium / Android with Python that has same Class and Same Index of another element on UIAutomatorViewer 【发布时间】:2018-07-25 11:33:43 【问题描述】:

我正在测试一个应用程序,在大多数屏幕上,我看到有些元素具有相同的类“android.widget.TextView”和相同的索引号“0”。所有其他属性也相同,唯一的例外是“文本”和“绑定”。

我有“Skip”、“Next”和“Skip Next 3”作为屏幕上的文本,除了 text 和 bounds 属性之外,它们具有相同的属性。我需要知道如何将appium指向所需的项目..说我想点击“下一步”,我该怎么做。我正在使用 Python 编写脚本。

【问题讨论】:

您需要了解如何使用 webdriver 使用带有“下一步”一词的按钮来定位小部件。我手边没有,但这是你需要的。 【参考方案1】:

您可以搜索所有具有相同类名的匹配 Web 元素,这将返回匹配元素的列表。然后遍历找到的元素并比较它们的文本,例如:

for element in webdriver.find_elements_by_class_name('android.widget.TextView'):
     if element.text == "Next":
          element.click()

【讨论】:

【参考方案2】:

按照 Chuk Ultima 说的做,但如果你有很多 TextView,可能需要一段时间。

你可以使用:

((AndroidDriver<MobileElement>)driver).findElementByAndroidUIAutomator("new UiSelector().text(\"Next\")");

更多用法见http://www.automationtestinghub.com/uiselector-android/

【讨论】:

【参考方案3】:

好吧,在我的情况下,我终于解决了这个问题,使用遍历节点,比如我创建 xpath 以从特定位置获取文本(时间值),如下所示:

Time = self.driver.find_element_by_xpath('//android.widget.LinearLayout[@index=2]/android.view.ViewGroup[@index=0]/android.view.ViewGroup[@index=0]/android.view.ViewGroup[@index=0]/android.view.ViewGroup[@index=3]/android.view.ViewGroup[@index=0]/android.widget.TextView[@index=0]').get_attribute('text')

我知道这是一个乏味的过程,但目前这对我来说是解决方案。

【讨论】:

查看第 1 点:joecolantonio.com/2018/01/25/…

以上是关于使用 Python 在 Appium / Android 上选择一个元素,该元素与 UIAutomatorViewer 上的另一个元素具有相同的类和相同的索引的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 CodeceptJs 与 appium 一起在移动设备上进行网站测试

appium 怎么跳转页面定位元素

如何在 Python 中使用 appium 进行滚动

Python爬虫编程思想(128):使用Appium抓取移动数据--启动Appium服务

python+Appium自动化:python多线程多并发启动appium服务

Python爬虫编程思想(127):使用Appium抓取移动数据--安装和配置Appium