Gibt es eine Möglichkeit zum zurücksetzen der app, die zwischen den tests in Swift XCTest UI?
Gibt es einen API-Aufruf innerhalb XCTest, dass ich in der setUP() bzw. tearDown() zum zurücksetzen der app zwischen den tests? Ich schaute in die Punkt-syntax von XCUIApplication und alles was ich sah war die .Start()
ODER gibt es eine Möglichkeit zu nennen, ein shell-Skript in Swift? Ich könnte dann rufen Sie xcrun in-zwischen-test-Methoden für das zurücksetzen des Simulators.
InformationsquelleAutor der Frage JJacquet | 2015-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie fügen Sie ein "Skript Ausführen" - phase zu bauen, Phasen in Ihrem test-target, deinstallieren Sie die app vor der Ausführung von unit-tests gegen Sie,
leider ist dies nicht zwischen den test-Fällen, wenn./usr/bin/xcrun simctl uninstall booted com.mycompany.bundleId
Update
Zwischen den tests, können Sie löschen Sie die app über das Sprungbrett in die tearDown-phase. Obwohl, dies erfordert die Nutzung einer private header von XCTest. (Header-dump ist verfügbar von Facebook ist WebDriverAgent hier.)
Ist hier einige Beispiel-code von einem Sprungbrett-Klasse zum löschen einer app vom Springboard via Tippen und halten:
Dann:
Den privaten Header importiert wurden, in der Swift-bridging-header. Sie benötigen zum importieren von:
InformationsquelleAutor der Antwort Chase Holland
Zu diesem Zeitpunkt, die öffentliche API in Xcode 7 & 8 und der Simulator nicht angezeigt haben jede Methode callable von
setUp()
undtearDown()
XCText
Unterklassen auf "Zurücksetzen" Inhalt und Einstellungen" für den simulator.Gibt es andere mögliche Ansätze, die die Verwendung öffentlicher APIs:
Anwendung Code. Fügen Sie einige
myResetApplication()
Anwendung code, um die Anwendung in einem bekannten Zustand. Allerdings Gerät (simulator) die Staatliche Kontrolle wird begrenzt durch die Anwendungs-sandbox ... die ist nicht viel Hilfe außerhalb der Anwendung. Dieser Ansatz ist OK, für das clearing-Anwendung steuerbar Persistenz.Shell-Skript. Führen Sie die tests von einem shell-Skript. Verwenden
xcrun simctl erase all
oderxcrun simctl uninstall <device> <app identifier>
oder ähnlich zwischen jedem test führen Sie zum zurücksetzen der simulator (oder deinstallieren Sie die app). siehe StackOverflow: "Wie kann ich ein reset der iOS-Simulator von der Kommandozeile aus?"xcrun simctl erase all
(oderxcrun simctl erase <DEVICE_UUID>
) oder ähnlich wie die Schema-Test Abschnitt. Wählen Sie das Produkt > Schema > Bearbeiten von Schema... - Menü. Erweitern Sie das Schema Test Abschnitt. Wählen Sie Pre-Maßnahmen im Rahmen der Test-Abschnitt. Klicken Sie auf (+) hinzufügen "ein Neues Skript Ausführen "Aktion". Der Befehlxcrun simctl erase all
angegeben werden kann direkt, ohne externes script.Optionen für das aufrufen der 1. Anwendung Code zum zurücksetzen der Anwendung:
A. Anwendung UI. [UI-Test] Bieten eine reset-Taste oder andere UI-Aktion setzt die Anwendung. Das UI-element kann ausgeübt werden über
XCUIApplication
imXCTest
RoutinensetUp()
tearDown()
odertestSomething()
.B. Start-Parameter. [UI-Test] Wie bereits von Victor Ronin, ein argument übergeben werden kann, aus dem test
setUp()
...... empfangen durch den
AppDelegate
...C. Xcode-Schema-Parameter. [UI-Test, Unit-Test] Wählen Sie das Produkt > Schema > Bearbeiten von Schema... - Menü. Erweitern Sie das Schema Ausführen Abschnitt. (+) Fügen Sie einige parameter wie
MY_UI_TEST_MODE
. Die parameter werden inNSProcessInfo.processInfo()
.Z. Direkter Aufruf. [Unit-Test] Unit-Test-Bundles werden injiziert in die Anwendung und können Sie direkt aufrufen einige
myResetApplication()
routine in der Anwendung. Warnung: Standard-unit-tests ausgeführt, nachdem der Haupt-Bildschirm geladen hat. siehe Test-Load-Sequenz Jedoch, UI-Test-Bundles läuft als ein Prozess außerhalb der Anwendung unter test. Also, was in der Unit-Test gibt einen link-Fehler in einem UI-Test.InformationsquelleAutor der Antwort l --marc l
Aktualisiert swift 3.1 /xcode 8.3
erstellen bridging-header in test-target:
aktualisiert Sprungbrett Klasse
InformationsquelleAutor der Antwort JustinM
Können Sie bitten, Ihre app zu "bereinigen", sich
XCUIApplication.launchArguments
um einige flagIn AppDelegate Sie überprüfen
wenn NSProcessInfo.processInfo().Argumente.enthält("YOUR_FLAG_NAME_HERE") {
//Machen einen sauberen hier
}
InformationsquelleAutor der Antwort Victor Ronin
Verwendet habe ich das @Chase Holland Antwort und aktualisiert die Sprungbrett-Klasse nach der gleichen Vorgehensweise zum zurücksetzen der Inhalte und Einstellungen mit der app "Einstellungen". Dies ist nützlich, wenn Sie brauchen, um die Berechtigungen zurückzusetzen, Dialoge.
InformationsquelleAutor der Antwort odm
Verwendet habe ich das @ODM Antwortaber modifiziert, um die Arbeit für Swift 4. NB: einige S/O Antworten nicht unterscheiden Swift-Versionen, die haben manchmal ziemlich fundamentale Unterschiede. Getestet hab ich das auf ein iPhone 7-simulator und ein iPad Air simulator im hochformat, und es funktionierte für meine Anwendung.
Swift 4
InformationsquelleAutor der Antwort DeeMickSee
Für iOS-11 sims, ich habe eine noch so leichte änderung Tippen Sie auf das Symbol "x" und wo wir Tippen pro das Update @Code Monkey vorgeschlagen. Update funktioniert gut sowohl auf 10.3 und 11.2 Telefon sims. Für das Protokoll, ich bin mit swift 3. Dachte, ich würde durch einige code gibt, um kopieren und einfügen zu finden, der fix ein wenig leichter. 🙂
InformationsquelleAutor der Antwort Craig Fisher
Gebäude auf Chase Holland und odm Antworten, ich war in der Lage zu vermeiden, die langes Tippen und +3 offset bs durch löschen der app in den Einstellungen wie dis:
Verwendung:
InformationsquelleAutor der Antwort bj97301