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

Selecting an element on Appium / Android with Python that has same Class and Same Index of another element on UIAutomatorViewer

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

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

您可以搜索具有相同 class 名称的所有匹配网络元素,这将 return 为您提供匹配元素的列表。然后循环找到的元素并比较它们的文本,例如:

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

按照 Chuk Ultima 所说的进行操作会奏效,但如果您有很多 TextView,则可能需要一段时间。

您可以使用:

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

http://www.automationtestinghub.com/uiselector-android/

中查看更多用法

嗯,在我的例子中,我终于解决了问题,使用遍历节点,就像我创建 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')

我知道这是一个繁琐的过程,但目前这是适合我的解决方案。