Saya mencoba untuk menguji apakah suatu elemen terlihat menggunakan busur derajat. Inilah elemennya:
<i class="icon-spinner icon-spin ng-hide" ng-show="saving"></i>
Saat berada di konsol chrome, saya dapat menggunakan pemilih jQuery ini untuk menguji apakah elemen tersebut terlihat:
$('[ng-show=saving].icon-spin')
[
<i class="icon-spinner icon-spin ng-hide" ng-show="saving"></i>
]
> $('[ng-show=saving].icon-spin:visible')
[]
Namun, ketika saya mencoba melakukan hal yang sama pada busur derajat, saya mendapatkan kesalahan ini saat runtime:
InvalidElementStateError:
invalid element state: Failed to execute 'querySelectorAll' on 'Document':
'[ng-show=saving].icon-spin:visible' is not a valid selector.
Mengapa ini tidak valid? Bagaimana cara memeriksa visibilitas menggunakan busur derajat?
angularjs
visible
protractor
limp_chimp
sumber
sumber
Jawaban:
Ini harus melakukannya:
Ingat busur derajat ini
$
tidak jQuery dan:visible
tidak belum menjadi bagian dari CSS yang tersedia + pseudo-penyeleksiInfo lebih lanjut di https://stackoverflow.com/a/13388700/511069
sumber
isDisplayed()
tetapi hanya diperluas untuk menyelesaikan janji kelengkapan meskipun langkah itu opsional dan hanya dimaksudkan untuk menyertakan persyaratan dalam pengujian Anda yang merupakan praktik yang buruk. @asenovm dapatkah Anda menjelaskan lebih lanjut komentar "Ini benar-benar salah"?.toBeTruthy();
gunakan.toBe(true)
sebagai gantinya..toBeTruthy();
akan mencocokkan hal-hal seperti [], 'false', 42. Pada dasarnya apa pun yang mengharapkan 0, "", null, undefined, NaN atau false adalah benar.Cara yang benar untuk memeriksa visibilitas elemen dengan Protractor adalah dengan memanggil
isDisplayed
metode tersebut. Anda harus berhati-hati karenaisDisplayed
tidak mengembalikan boolean, melainkanpromise
memberikan visibilitas yang dievaluasi. Saya telah melihat banyak contoh kode yang menggunakan metode ini secara salah dan oleh karena itu tidak mengevaluasi visibilitas sebenarnya.Contoh untuk mendapatkan visibilitas suatu elemen:
Namun, Anda tidak memerlukan ini jika Anda hanya memeriksa visibilitas elemen (bukan mendapatkannya) karena busur derajat menambal Jasmine expect () sehingga selalu menunggu janji diselesaikan. Lihat github.com/angular/jasminewd
Jadi Anda bisa melakukan:
Karena Anda menggunakan
AngularJS
untuk mengontrol visibilitas elemen itu, Anda juga dapat memeriksa atribut kelasnyang-hide
seperti ini:sumber
Saya memiliki masalah serupa, saya hanya ingin mengembalikan elemen yang terlihat di objek halaman. Saya menemukan bahwa saya dapat menggunakan css
:not
. Dalam kasus masalah ini, ini seharusnya membuat Anda ...Dalam konteks objek halaman, Anda HANYA bisa mendapatkan elemen yang terlihat dengan cara ini juga. Misalnya. diberikan halaman dengan banyak item, di mana hanya beberapa yang terlihat, Anda dapat menggunakan:
Ini akan mengembalikan semua terlihat
i.icon
ssumber
Jika ada beberapa elemen di DOM dengan nama kelas yang sama. Tetapi hanya satu elemen yang terlihat.
Dalam contoh ini, filter mengambil kumpulan elemen dan mengembalikan satu elemen yang terlihat menggunakan isDisplayed () .
sumber
filteredElement.length === 0
?Jawaban ini akan cukup kuat untuk bekerja untuk elemen yang tidak ada di halaman, oleh karena itu gagal dengan baik (tidak memberikan pengecualian) jika pemilih gagal menemukan elemen tersebut.
sumber
Menunggu visibilitas
Trik Xpath untuk hanya menemukan elemen yang terlihat
sumber
sumber
Berikut adalah beberapa potongan kode yang dapat digunakan untuk framework yang menggunakan typescript, busur derajat, jasmine
// Menegaskan teks
// Menegaskan sebuah elemen
// Menegaskan formulir
sumber