XCUI 测试:如何从 iOS 屏幕获取元素列表

XCUI Test: How to fetch List of elements from the iOS screen

我最近开始使用 XCUI 测试设置在 iPhone 真实设备上自动化 iOS 应用程序。

我有一个场景,我的应用程序在主页中包含 5 个屏幕,每个屏幕都包含一个唯一的卡号及其余额,所以我必须从屏幕上获取卡号并用我的输入进行验证(预期)卡号,如果两者相同则我必须单击卡屏幕,否则如果两者不同则我必须向右滑动到第二个屏幕并执行相同的过程。

我能够在 android 中完美地自动化这个场景,因为在 android 中每个屏幕都用唯一的卡号清楚地区分,但是当我在 iOS 上检查卡号屏幕时app 它显示了附加到该应用程序的所有卡片列表。在这种情况下,我很难从应用程序中获取卡号并使用我输入的卡号进行验证。请查看下面的代码,它已经用于 android

String oysterCardVisibleNumberOnApp= data.get("PrestigeCardNumber");


while(!action.getText(HomePage.oysterCardNumber,"oysterCardNumber").equalsIgnorecase(oysterCardVisibleNumberOnApp))){
      action.swipeRightToLeft();
     }

如果有人知道如何从 iOS 应用程序中检索 elements/cards 的列表,那就太好了,请告诉我。或者,如果您知道 XCUI 设置中的任何新方法将帮助我实现这一目标,请告诉我。非常感谢您的帮助:)

请参阅下面的 Android 屏幕和 iOS 屏幕图片以获得更多清晰度

Android Screen

iOS Screen

谢谢

为此,您可以使用 xcode 中的辅助功能检查器:

https://developer.apple.com/library/content/documentation/Accessibility/Conceptual/AccessibilityMacOSX/OSXAXTestingApps.html

根据您在应用中 select 的区域,它会返回每个区域的详细说明。但是它带回什么取决于你的应用程序的结构。我试图在我自己的 ios 应用程序中做类似的事情,这对我有所帮助。

例如,如果您在断点处停止并使用:

po XCUIApplication().descendants(matching: .any)

在调试控制台中,您将获得主 Application 元素的所有后代元素的列表。它还会让您对结构有一个大致的了解。

然后您可以将 .any 更改为更具体的元素类型,例如.textField.buttons.

您可以使用 XCUIApplication().debugDescription 从 XCUITest 看到的 UI 树中打印出来。您还可以更新应用程序代码,为您的 UI 元素设置自定义标识符(这些只能被 XCUITest 看到)。例如 card-1,等等