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。任何想法如何让它工作?

+0

如果字符串文件位于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 –

+0

@TitouandeBailleul好吧,似乎工作得更好。但由于某种原因,它现在正在使用我的西班牙文.strings文件来处理所有事情。即使它是英文的。通常在我的主要项目中,我使用的关键是英文版本,西班牙文版本和其他版本是在.strings文件中。但由于某些原因,它甚至使用英文的西班牙文.strings文件。有任何想法吗? –

我创建了这个支持英文和西班牙文的小型项目。测试还可以通过在方案的配置切换它使用两个不同的语言运行

enter image description here

这是测试如何建立

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

+0

刚刚克隆你的项目。我只是将它转换为使用Fastlane的快照(这是我使用的)。看起来它仍然失败。这真的让我觉得这是Snapshot如何设置本地化的一些问题。 –

+0

您可以与快照共享此项目的分支以及您试图运行的测试/命令以及预期结果吗? –

+0

https://github.com/fishcharlie/LocalizationUITests,当在终端中导航到西班牙语版本失败后运行'fastlane snapshot'时XCTAssertTrue失败 - 预期的“Hello”标签存在。英文工作正常。所以这让我觉得Snapshot的方法并没有真正地改变语言或其他东西。 –