ios - 如果我的 UI 测试在其他本地化中不起作用,faSTLane 如何为不同的本地化截屏?

标签 ios swift xctest fastlane

FaSTLane 声称可以为我截取所有屏幕尺寸和本地化的屏幕截图。

根据guide ,我创建了一个这样的 UI 测试用例:

override func setUp() {
    super.setUp()
    continueAfterFailure = false
    setupSnapshot(XCUIApplication())
    XCUIApplication().launch()
}

override func tearDown() {
    super.tearDown()
}

func testExample() {
    let app = XCUIApplication()
    app.collectionViews.staticTexts["13"].swipeRight()
    snapshot("calendar")
    let staticText = app.collectionViews.staticTexts["26"]
    staticText.tap()
    snapshot("preview")
    app.buttons["Editor"].tap()
    snapshot("editor")
    app.navigationBars["2016/6/26"].buttons["Cancel"].tap()
    app.navigationBars["My Diaries"].buttons["search filled"].tap()

    let tablesQuery = app.tables
    tablesQuery.textFields["Search"].tap()
    tablesQuery.textFields["Search"].typeText("beach")
    snapshot("search")

    app.navigationBars["Search"].buttons["search colored"].tap()
    app.navigationBars["Results - 1 / 2"].buttons["right"].tap()

    snapshot("result")
}

当我在英语模拟器中运行测试时,它成功了。当我在中文模拟器中运行测试时(我将我的应用程序本地化为中文。这就是我想用中文运行它的原因),测试不起作用,因为它无法在我的应用程序中找到那些英文单词。

但是根据指南,我想它会为我处理这个问题,使用 NSLocalizedString 或类似的东西。

所以我cd到项目目录,snapshot,然后选择一个目标,它开始截图...

... 直到它到达应该点击“编辑器”按钮的部分,因为它找不到英文单词。它崩溃了。

那么我是否需要添加 if 语句来检查应用程序在哪个本地化?那将是一件令人头疼的事情!如果是这样的话,我宁愿自己截图。

我想我一定是误解了 faSTLane。使用 Snapshot 截屏的正确方法是什么?

最佳答案

这是一个老问题,您很可能已经找到了解决方案,但是,如果遇到类似问题的任何人看到这个问题,我会给我两分钱。您可以将代码修改为不依赖本地化字符串,这并不理想,但由于我们讨论的是更受控制的范围(生成屏幕截图),因此它适用并且非常简单。

例如,只要找到正确的索引,上面的表达式就可以翻译成下面的表达式:

app.buttons["Editor"].tap()
// translates to...
app.buttons.element(boundBy: 5)

app.navigationBars["2016/6/26"].buttons["Cancel"].tap()
// translates to...
app.navigationBars.buttons.element(boundBy: 0).tap()

同样,它并不理想但很有用,尤其是在文本在不同执行之间发生变化的情况下。描述了您可以使用的另一个技巧 here .

关于ios - 如果我的 UI 测试在其他本地化中不起作用,faSTLane 如何为不同的本地化截屏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38241664/

相关文章:

ios - 检索 Firebase 数据的更有效方法?

ios - 使用 XCTest 设置一个 TestProject,其中包含针对 iOS 和 OSX 的两个测试目标以及共享单元测试

objective-c - 使用 NavigationController 并在其中更改 View ,而无需推送 Nav 堆栈

ios - 启动屏幕 Storyboard显示在模拟器中,但在 iPad Pro 时不显示在设备中

ios - 如何在应用程序委托(delegate)之外注册本地通知?

swift - 根据通知 IOS swift 更改 webview 应用程序内的 url

iphone - 使用未声明的标识符 'AppDelegate'

swift - 在 UIView 中更新中心 Y 和中心 X 约束

objective-c - XCTest:[UIApplication sharedApplication] 返回 nil

ios - mxSignpost 事件在 Xcode Organizer 中可见吗?