Saya mencoba untuk menulis kasus uji menggunakan Pengujian UI baru yang tersedia di Xcode 7 beta 2. Aplikasi ini memiliki layar login di mana ia membuat panggilan ke server untuk login. Ada penundaan yang terkait dengan ini karena ini merupakan operasi yang tidak sinkron.
Apakah ada cara untuk menyebabkan penundaan atau menunggu mekanisme di XCTestCase sebelum melanjutkan ke langkah selanjutnya?
Tidak ada dokumentasi yang tepat tersedia dan saya membaca file Header kelas. Tidak dapat menemukan apa pun yang terkait dengan ini.
Ada ide / saran?
ios
ios9
xcode-ui-testing
xcode7-beta2
xctwaiter
Tejas HS
sumber
sumber
NSThread.sleepForTimeInterval(1)
harus bekerjadispatch_after
,dispatch_queue
stuff)Jawaban:
Asynchronous UI Testing diperkenalkan di Xcode 7 Beta 4. Untuk menunggu label dengan teks "Halo, dunia!" untuk muncul Anda dapat melakukan hal berikut:
Rincian lebih lanjut tentang Pengujian UI dapat ditemukan di blog saya.
sumber
waitForExpectationsWithTimeout
secara otomatis akan gagal dalam ujian Anda yang sangat disayangkan.app.launch()
tampaknya hanya meluncurkan aplikasi. Apakah itu perlu?Selain itu, Anda bisa tidur:
Karena UITests berjalan dalam proses lain, ini berfungsi. Saya tidak tahu bagaimana itu disarankan, tetapi berhasil.
sumber
usleep
iOS 11 / Xcode 9
Ini adalah pengganti yang bagus untuk semua implementasi kustom di situs ini!
Pastikan untuk melihat jawaban saya di sini: https://stackoverflow.com/a/48937714/971329 . Di sana saya menjelaskan alternatif untuk menunggu permintaan yang akan sangat mengurangi waktu tes Anda berjalan!
sumber
XCTestCase
dan itu bekerja seperti pesona. Saya tidak mengerti mengapa pendekatan sepertisleep(3)
dipilih begitu tinggi di sini karena memperpanjang waktu pengujian secara artifisial dan benar-benar tidak ada pilihan ketika test suite Anda tumbuh.Xcode 9 memperkenalkan trik baru dengan XCTWaiter
Test case menunggu secara eksplisit
Delegasi instance pelayan untuk menguji
Kelas pelayan mengembalikan hasil
penggunaan sampel
Sebelum Xcode 9
Tujuan C
PEMAKAIAN
Cepat
PEMAKAIAN
atau
SUMBER
sumber
Pada Xcode 8.3, kita dapat menggunakan
XCTWaiter
http://masilotti.com/xctest-waiting/Trik lain adalah menulis
wait
fungsi, kredit diberikan kepada John Sundell karena menunjukkannya kepada sayadan menggunakannya seperti
sumber
Berdasarkan jawaban @ Ted , saya telah menggunakan ekstensi ini:
Anda bisa menggunakannya seperti ini
Ini juga memungkinkan untuk menunggu elemen menghilang, atau properti lainnya berubah (dengan menggunakan blok yang sesuai)
sumber
Edit:
Sebenarnya baru saja terpikir oleh saya bahwa di Xcode 7b4, pengujian UI sekarang telah
expectationForPredicate:evaluatedWithObject:handler:
Asli:
Cara lain adalah dengan memutar putaran proses untuk waktu yang ditentukan. Benar-benar hanya berguna jika Anda tahu berapa banyak (perkiraan) waktu yang harus Anda tunggu
Obj-C:
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow: <<time to wait in seconds>>]]
Cepat:
NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate(timeIntervalSinceNow: <<time to wait in seconds>>))
Ini tidak sangat berguna jika Anda perlu menguji beberapa kondisi untuk melanjutkan tes Anda. Untuk menjalankan pemeriksaan bersyarat, gunakan satu
while
lingkaran.sumber
Kode berikut hanya berfungsi dengan Objective C.
Cukup panggil fungsi ini seperti yang diberikan di bawah ini.
sumber
Dalam kasus saya
sleep
buat efek samping jadi saya gunakanwait
sumber
Menurut API untuk XCUIElement
.exists
dapat digunakan untuk memeriksa apakah ada pertanyaan atau tidak sehingga sintaks berikut dapat berguna dalam beberapa kasus!Jika Anda yakin harapan Anda akan terpenuhi pada akhirnya Anda bisa mencoba menjalankannya. Perlu dicatat bahwa mogok mungkin lebih baik jika penantiannya terlalu lama dalam hal mana
waitForExpectationsWithTimeout(_,handler:_)
dari pos @ Jo Masilotti harus digunakan.sumber
tidur akan memblokir utas
"Tidak ada proses run loop terjadi saat utas diblokir."
Anda dapat menggunakan waitForExistence
sumber
Ini akan membuat penundaan tanpa membuat utas tertidur atau membuat kesalahan pada batas waktu:
Karena harapannya terbalik, ia akan diam-diam habis.
sumber