在使用 Espresso 编写 UI Automation 时,我应该如何处理多个市场?

How should I handle multiple markets while writing UI Automation with Espresso?

我正在使用 Espresso 为 Android 应用编写 UI 自动化测试。该测试将搜索条形码编号并找到关联的项目,但此功能仅适用于美国用户。用户市场由设备语言标识 (en_US、en_UK)。

如何编写此测试,以便每次我 运行 英国的自动化测试时都不会失败?

我通过为 iOS 应用程序创建一个检查设备当前语言的方法来使用 XCTest 完成此操作。

class MarketChecker: XCTestCase {

    func isUSLocale() -> Bool {
        return Locale.current.identifier == "en_US"
    }

    func isGBLocale() -> Bool {
        return Locale.current.identifier == "en_GB"
    }
}

然后在测试开始时调用该方法:

if isUSLocale() {
    <US specific test>
}

这使我能够 运行 相同的测试套件,而不会因我们的应用程序区域差异而导致失败。

不幸的是(对我来说)Espresso 不喜欢 if 语句,所以我不确定如何为 Android 应用程序实现它。任何见解将不胜感激!

设法弄明白了。如果您的应用位于由设备语言控制的多个市场,这将非常有用。

public static String deviceLocale() {
    return Locale.getDefault().getCountry();
}

public static boolean isGBLocale() {
    return deviceLocale().equals("GB");
}

public static boolean isAULocale() {
    return deviceLocale().equals("AU");
}

public static boolean isUSLocale() {
    return deviceLocale().equals("US");
}

这可用于验证市场特定差异或跳过在该市场中可能会失败的测试。

if (isUSLocale()) {
    // US test
}