ios - 使用本地化的 app.staticTexts 进行 UI 测试 (XCTest)

标签 ios swift xctest xcode-ui-testing

我正在为我的应用编写 UI 测试,该应用使用 UIWebView 作为其内容。当按下 web View 中的按钮时,它会编写如下测试用例:

func testExample() {
    let app = XCUIApplication()
    app.staticTexts["Log In"].tap()
}

这里的问题是,如果应用程序处于不同的本地化版本(例如“de-DE”),则带有文本“登录”的按钮不存在。相反,它是“Anmelden”。 我尝试过以下方法,但都不起作用:

可本地化的字符串版本:

func testExample() {
    let name = NSLocalizedString("Log In", comment: "")

    let app = XCUIApplication()
    app.staticTexts[name].tap()
}

public class Titles {
    var homeScreenLogIn = "Log In"
}

public class TitlesDE: Titles {

    override init() {
        super.init()

        homeScreenLogIn = "Anmelden"
    }

}

...

func testExample() {
    titles = TitlesDE()

    let name = titles.homeScreenLogIn

    let app = XCUIApplication()
    app.staticTexts[name].tap()
}

UI Testing failure - Multiple matches found:

问题是我似乎无法弄清楚如何将数据转储到调试/测试输出,因为 print() 似乎不起作用。

最佳答案

您应该使用所有 UIKit 对象都具有的 accessibilityIdentifier 属性,因为此字符串未本地化,它仅用于 UI 自动化。

也就是说,当您使用 UIWebView 的内容时,这似乎不是一个简单的解决方案。

关于ios - 使用本地化的 app.staticTexts 进行 UI 测试 (XCTest),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35483844/

相关文章:

ios - 如何比较 PHAsset 和 UIImage

ios - 是否有可能在全局队列上使用 dispatch_async 运行的 block 在主线程上执行?

ios - swift 将数据从一个选项卡 Controller 传递到另一个选项卡 Controller

ios - Xcode 单元测试缺少某些项目类

ios - XCTest 无法找到文本字段

ios - Swift IOS,如何将应用程序用户输入的句子的字母大写,示例;第四个字母和第六个字母?

ios - 如何使用 OCMock 获取模拟对象列表

objective-c - 异步 setUp 方法完成后运行测试

ios - MapKit中缩放相关的MKPolyline奇怪渲染

ios - 应用程序图标未出现在 ios 的应用程序切换器中