【问题标题】:Should all elements have unique class name in a native Android application?在原生 Android 应用程序中,所有元素都应该具有唯一的类名吗?
【发布时间】:2019-12-20 02:10:43
【问题描述】:

我使用 UI 自动化查看器来获取类和 Appium 驱动程序状态的 xpath 选择器(正确): *** Capybara::Ambiguous Exception: Ambiguous match,发现 4 个元素匹配可见 xpath "//android.widget.Button"

元素有不同的text 属性,所以我可以通过这个属性来识别,但是我想如果应用程序有多种语言可用,事情会变得复杂。

下面的文章似乎暗示,因为元素可以共享类名,所以不建议仅按类定位: https://seleniumbycharan.com/2016/08/07/finding-elements-using-locators-in-appium/

一种解决方案是形成一个由这些元素组成的数组并简单地引用一个索引。 另一种是使用 text 属性。 我不喜欢这两种解决方案。

我是否应该建议开发人员分配一些 ID 或只是不同的类名,或者是本地应用程序开发中常见的相同类名链,这无论如何都不是反模式?

【问题讨论】:

  • 对相似元素使用不同的类将是一种反模式。一个类定义了元素的行为。这与 HTML/CSS 中主要用于定义表示的类有很大的不同。
  • 我需要一个屏幕截图或您尝试单击的元素的某些内容才能真正回答这个问题,但是是的,亨利所说的使用不同的元素类将是一种反模式并通过以下方式定位元素class 通常只是一个坏主意,因为默认情况下有大量元素具有相同的类名。

标签: android android-uiautomator


【解决方案1】:

当我在 Appium Inspector 中启动应用程序时,它说: “不推荐使用 XPath 定位器,这可能导致脆弱的测试。请您的开发团队提供独特的可访问性定位器!” 理想情况下,它应该自动生成一个简短且唯一的选择器。

对于 Android,resource-idcontent-desc 不应为空,并且应尽可能包含唯一值。

对于 iOS,它是 accessibility-idname

基于:http://appium.io/docs/en/commands/element/find-elements/

【讨论】:

    【解决方案2】:

    是的,但正如你所见,我除了 XPATH 什么都没有。

    【讨论】:

      猜你喜欢
      • 2012-03-09
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多