代码之家  ›  专栏  ›  技术社区  ›  nhrcpt

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

  •  9
  • nhrcpt  · 技术社区  · 6 年前

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

    我将“跳过”、“下一步”和“跳过下一步3”作为屏幕上的文本,这些文本具有除文本和边界属性之外的相同属性。我需要知道如何让appium点击所需项目。。如果我想点击“下一步”,我该怎么做。我正在使用Python编写脚本。

    3 回复  |  直到 6 年前
        1
  •  2
  •   Chuk Ultima    6 年前

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

    for element in webdriver.find_elements_by_class_name('android.widget.TextView'):
         if element.text == "Next":
              element.click()
    
        2
  •  2
  •   tcardoso    6 年前

    按照Chuk Ultima所说的做是可行的,但如果你有很多文本视图,可能需要一段时间。

    您可以使用:

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

    请参阅中的更多用法 http://www.automationtestinghub.com/uiselector-android/

        3
  •  1
  •   nhrcpt    6 年前

    好的,在我的例子中,我最终通过遍历节点解决了这个问题,比如我创建了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')
    

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

    推荐文章