如果我的UI测试在其他本地化中不起作用,fastlane如何为不同的本地化截取屏幕截图?

时间:2016-07-07 09:15:32

标签: 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的误解。使用快照拍摄屏幕截图的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

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

例如,仅查找正确的索引,可以将顶部的表达式转换为下面的表达式:

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说明了您可以使用的另一种技巧。