如果我的 UI 测试在其他本地化中不起作用,fastlane 如何为不同的本地化截屏?
How can fastlane take screenshots for different localisations if my UI tests don't work in other localisations?
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
,然后选择一个目标,它开始截图...
... 直到它到达应该点击 "Editor" 按钮的部分,因为它找不到英文单词。然后它崩溃了。
那么我是否需要添加 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()
同样,它并不理想但很有用,尤其是在文本在不同执行之间发生变化的情况下。 .
描述了您可以使用的另一个技巧
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
,然后选择一个目标,它开始截图...
... 直到它到达应该点击 "Editor" 按钮的部分,因为它找不到英文单词。然后它崩溃了。
那么我是否需要添加 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()
同样,它并不理想但很有用,尤其是在文本在不同执行之间发生变化的情况下。