【问题标题】:Appium XCUIElement showing the same displayed text in accessibility id, value, name, labelAppium XCUIElement 在可访问性 id、值、名称、标签中显示相同的显示文本
【发布时间】:2017-09-03 13:45:45
【问题描述】:

我已经开始使用 Appium 来实现 iOS 应用自动化。开发人员已将 id 和名称放在应用程序代码中的每个元素中,以帮助自动化工程师,但是,当我使用 Appium 检查它时,它没有显示任何一个。它仅在可访问性 ID、值、名称、标签中显示相同的显示文本。

我应该问开发人员什么,以便这些 id 和名称可以用于使用 Appium 的自动化。

【问题讨论】:

    标签: appium appium-ios


    【解决方案1】:

    您应该要求开发人员设置元素的可访问性 id。

    我的建议是,您还应该要求开发人员将可访问性 id 更改为不完全是元素值的东西,例如:如果您有一个显示“打开”的按钮,一些开发人员只会给它ID“打开”。您应该要求他们将可访问性 ID 设置为“open”甚至“openID”——这样您可以确保所有元素都有一个可访问性 ID,并且您可以轻松发现缺少的 ID 并要求开发人员添加它们。

    【讨论】:

      【解决方案2】:

      在 ios 中,给元素标签的任何值都将成为元素的可访问性 id。可访问性 id 只不过是屏幕上可见的文本。在上面显示的示例中,名称或标签将是元素的可访问性 ID。

      driver.findElement(By.ID(“Drive”)).click();
      driver.findElementByAccessibilityId(“Drive”).click();
      driver.findElement(By.name(“Drive”)).click();
      driver.findElementByName(“Drive”).click();
      

      在上面的示例中,“Drive”可能是标签或名称。 Appium 将首先搜索匹配的可访问性 id。如果没有找到,将尝试在元素标签上进行字符串匹配。最后,如果传入的 id 是本地化键,它会搜索本地化的字符串。

      只需要求您的开发人员为每个元素提供标签,该标签将成为该特定元素的可访问性 id。

      【讨论】:

        【解决方案3】:

        根据我的经验,我了解到 Identifier 字段对于为 iOS 应用中的元素提供可访问性/名称属性是必需的。

        然后你可以用

        来识别元素
        @iOSFindBy(accessibility = "myid")
        public MobileElement SOME_OBJECT;
        

        或者

        driver.findElementByAccessibilityId("myid")
        

        注意:为标签字段提供任何值将覆盖屏幕上显示的实际值。因此,通常避免为 Label 字段提供任何值。这将确保我们能够通过 element.getText() 从任何元素中获取可见文本。

        此外,重要的是要了解为什么应将 Identifier 的值提供给唯一需要的对象。

        例如,如果您想识别像 Btn Previous 或 Btn next 这样的元素,则需要避免将 Identifier 值分配给 Header 或 View(父对象)。我发现,为父级提供价值会抑制子元素的标识符。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-06
          • 1970-01-01
          相关资源
          最近更新 更多