【问题标题】:How should I handle multiple markets while writing UI Automation with Espresso?在使用 Espresso 编写 UI 自动化时,我应该如何处理多个市场?
【发布时间】:2017-04-08 01:26:23
【问题描述】:

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

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

我使用 XCTest 为 iOS 应用程序创建了一个检查设备当前语言的方法,从而实现了这一点。

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 应用程序实现这一点。任何见解都将不胜感激!

【问题讨论】:

  • 这是什么编程语言?
  • @dazza5000 示例代码在 Swift 中。我正在尝试在示例代码中做同样的事情,但在 Java 中使用 Espresso 框架。 Espresso 允许 try/catch,但我不认为这是一个好的解决方案。

标签: android ui-automation android-espresso


【解决方案1】:

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

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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2011-08-26
    • 2012-06-15
    • 2011-09-19
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多