iOS UITests NSLocalizedString不工作
我试图本地化我的UITests与其他语言(目前使用快照自动截图,所以这就是为什么我需要这个工作)。iOS UITests NSLocalizedString不工作
我现在的主要问题是在IQKeyboardManager中有一个完成按钮。
在英语中我有下面的代码,它工作正常:
app.toolbars.buttons["Done"].tap()
输入文字后,点击完成按钮。
在西班牙语中,该按钮被称为“OK”。看起来它是从一些默认的UIKit本地化字符串或类似的东西得到的。
我尝试在我的UITest es.lproj
文件夹中添加一个.strings文件,并将"UIBarButtonSystemItem.Done" = "OK";
放入其中。
我也改变了它是:
app.toolbars.buttons[NSLocalizedString("UIBarButtonSystemItem.Done", bundle: Bundle.main, value: "Done", comment: "")].tap()
,并没有奏效。始终使用“完成”。
它总是给人错误:
No matches found for "Done" Button.
我也试过:
和导致错误:
No matches found for "UIBarButtonSystemItem.Done" Button.
因此,它看起来像我的.strings文件不适合我的UITest。任何想法如何让它工作?
我创建了这个支持英文和西班牙文的小型项目。测试还可以通过在方案的配置切换它使用两个不同的语言运行
这是测试如何建立
func testExample() {
let greeting = localizedString(key: "Greetings.Hello")
XCTAssert(XCUIApplication().staticTexts[greeting].exists, "Expected \"\(greeting)\" label to exist")
}
它使用下面的函数来获得翻译
func localizedString(key:String) -> String {
let bundle = Bundle(for: LocalizationUITests.self)
let deviceLanguage = Locale.preferredLanguages[0]
let localizationBundle = Bundle(path: bundle.path(forResource: deviceLanguage, ofType: "lproj")!)
let result = NSLocalizedString(key, bundle:localizationBundle!, comment: "") //
return result
}
这里的项目,在这里你可以看到它的工作:https://github.com/TitouanVanBelle/LocalizationUITests
刚刚克隆你的项目。我只是将它转换为使用Fastlane的快照(这是我使用的)。看起来它仍然失败。这真的让我觉得这是Snapshot如何设置本地化的一些问题。 –
您可以与快照共享此项目的分支以及您试图运行的测试/命令以及预期结果吗? –
https://github.com/fishcharlie/LocalizationUITests,当在终端中导航到西班牙语版本失败后运行'fastlane snapshot'时XCTAssertTrue失败 - 预期的“Hello”标签存在。英文工作正常。所以这让我觉得Snapshot的方法并没有真正地改变语言或其他东西。 –
如果字符串文件位于UI测试目标的包,然后我不认为你可以使用Bundle.main访问它。请参阅https://stackoverflow.com/questions/1879247/why-cant-code-inside-unit-tests-find-bundle-resources或https://stackoverflow.com/questions/33609325/xcode-7-uitests-with -localized-ui –
@TitouandeBailleul好吧,似乎工作得更好。但由于某种原因,它现在正在使用我的西班牙文.strings文件来处理所有事情。即使它是英文的。通常在我的主要项目中,我使用的关键是英文版本,西班牙文版本和其他版本是在.strings文件中。但由于某些原因,它甚至使用英文的西班牙文.strings文件。有任何想法吗? –