2017-07-06 56 views
1

我試圖本地化我的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文件。有任何想法嗎? –

回答

0

我創建了這個支持英文和西班牙文的小型項目。測試還可以通過在方案的配置切換它使用兩個不同的語言運行

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的方法並沒有真正地改變語言或其他東西。 –