1

J'essaie de localiser mes UITest pour travailler avec d'autres langages (actuellement en utilisant Snapshot pour automatiser les captures d'écran, c'est pourquoi j'ai besoin que cela fonctionne).iOS UITests NSLocalizedString ne fonctionne pas

Mon problème principal est maintenant avec un bouton Terminé dans IQKeyboardManager.

En anglais, j'ai le code suivant et il fonctionne très bien:

app.toolbars.buttons["Done"].tap() 

taper sur le bouton fait après la saisie de texte.

En espagnol, ce bouton s'appelle "OK". On dirait que ça vient d'une chaîne locale UIKit par défaut ou quelque chose comme ça. J'ai essayé d'ajouter un fichier .strings dans mon dossier UITest es.lproj et de mettre "UIBarButtonSystemItem.Done" = "OK"; dedans.

J'ai aussi changé pour être:

app.toolbars.buttons[NSLocalizedString("UIBarButtonSystemItem.Done", bundle: Bundle.main, value: "Done", comment: "")].tap() 

et cela ne fonctionne pas. Toujours utilisé "Terminé".

Il donne toujours l'erreur:

No matches found for "Done" Button.

J'ai aussi essayé:

et qui a donné lieu à une erreur:

No matches found for "UIBarButtonSystemItem.Done" Button.

il ressemble mon fichier .strings ne travaille pas pour mes UITest. Des idées de comment le faire fonctionner?

+0

Si le fichier de chaîne se trouve dans le regroupement de la cible de test de l'interface utilisateur, je ne pense pas que vous puissiez y accéder en utilisant Bundle.main. Voir https://stackoverflow.com/questions/1879247/why-cant-code-inside-unit-tests-find-bundle-resources ou https://stackoverflow.com/questions/33609325/xcode-7-uitests-with -localized-ui –

+0

@TitouandeBailleul Ok, ça marche mieux. Mais pour une raison quelconque, il utilise maintenant mon fichier .strings espagnol pour tout. Même quand c'est en anglais. Normalement dans mon projet principal j'utilise la clé pour être la version anglaise et l'espagnol et d'autres versions sont dans les fichiers .strings. Mais pour une raison quelconque, il utilise le fichier espagnol .strings même en anglais. Des idées? –

Répondre

0

J'ai créé ce petit projet qui prend en charge l'anglais et l'espagnol. Les tests peuvent également être exécutés en utilisant les deux langues différentes en passant dans la configuration du système

enter image description here

Voici comment le test est construit

func testExample() { 
    let greeting = localizedString(key: "Greetings.Hello") 
    XCTAssert(XCUIApplication().staticTexts[greeting].exists, "Expected \"\(greeting)\" label to exist") 
} 

Il utilise la fonction suivante pour obtenir les traductions

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 
} 

Voici le projet où vous pouvez le voir travailler: https://github.com/TitouanVanBelle/LocalizationUITests

+0

Juste cloné votre projet. Je l'ai juste converti pour utiliser Snapshot de Fastlane (qui est ce que j'utilise). Et il semble que ça ne marche toujours pas. Cela me fait vraiment penser à un problème avec la façon dont Snapshot configure la localisation. –

+0

Pouvez-vous partager un fork de ce projet avec snapshot ainsi que les tests/commandes que vous essayez d'exécuter avec les résultats attendus? –

+0

https://github.com/fishcharlie/LocalizationUITests, lors de l'exécution de 'fastlane snapshot' après avoir navigué vers le projet dans Terminal, la version espagnole échoue' XCTAssertTrue a échoué - Étiquette "Hello" attendue à exister'. L'anglais fonctionne bien. Cela me fait penser que la méthode de Snapshot ne change pas vraiment le langage correctement ou quelque chose. –