【发布时间】:2017-09-03 13:45:45
【问题描述】:
我已经开始使用 Appium 来实现 iOS 应用自动化。开发人员已将 id 和名称放在应用程序代码中的每个元素中,以帮助自动化工程师,但是,当我使用 Appium 检查它时,它没有显示任何一个。它仅在可访问性 ID、值、名称、标签中显示相同的显示文本。
我应该问开发人员什么,以便这些 id 和名称可以用于使用 Appium 的自动化。
【问题讨论】:
标签: appium appium-ios
我已经开始使用 Appium 来实现 iOS 应用自动化。开发人员已将 id 和名称放在应用程序代码中的每个元素中,以帮助自动化工程师,但是,当我使用 Appium 检查它时,它没有显示任何一个。它仅在可访问性 ID、值、名称、标签中显示相同的显示文本。
我应该问开发人员什么,以便这些 id 和名称可以用于使用 Appium 的自动化。
【问题讨论】:
标签: appium appium-ios
您应该要求开发人员设置元素的可访问性 id。
我的建议是,您还应该要求开发人员将可访问性 id 更改为不完全是元素值的东西,例如:如果您有一个显示“打开”的按钮,一些开发人员只会给它ID“打开”。您应该要求他们将可访问性 ID 设置为“open”甚至“openID”——这样您可以确保所有元素都有一个可访问性 ID,并且您可以轻松发现缺少的 ID 并要求开发人员添加它们。
【讨论】:
在 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。
【讨论】:
根据我的经验,我了解到 Identifier 字段对于为 iOS 应用中的元素提供可访问性/名称属性是必需的。
然后你可以用
来识别元素@iOSFindBy(accessibility = "myid")
public MobileElement SOME_OBJECT;
或者
driver.findElementByAccessibilityId("myid")
注意:为标签字段提供任何值将覆盖屏幕上显示的实际值。因此,通常避免为 Label 字段提供任何值。这将确保我们能够通过 element.getText() 从任何元素中获取可见文本。
此外,重要的是要了解为什么应将 Identifier 的值提供给唯一需要的对象。
例如,如果您想识别像 Btn Previous 或 Btn next 这样的元素,则需要避免将 Identifier 值分配给 Header 或 View(父对象)。我发现,为父级提供价值会抑制子元素的标识符。
【讨论】: