Apakah ada cara bagaimana menguji apakah suatu elemen ada? Setiap metode findElement akan diakhiri dengan pengecualian, tetapi bukan itu yang saya inginkan, karena bisa jadi elemen tidak ada dan tidak apa-apa, itu bukan kegagalan tes, jadi pengecualian tidak bisa menjadi solusi.
Saya telah menemukan posting ini: Selenium c # Webdriver: Tunggu Sampai Elemen Hadir Tapi ini untuk C # dan saya tidak pandai itu. Adakah yang bisa menerjemahkan kode ke Jawa? Saya minta maaf teman-teman, saya mencobanya di Eclipse tapi saya tidak bisa melakukannya dengan benar ke kode Java.
Ini kodenya:
public static class WebDriverExtensions{
public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds){
if (timeoutInSeconds > 0){
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
return wait.Until(drv => drv.FindElement(by));
}
return driver.FindElement(by);
}
}
java
selenium
selenium-webdriver
penguji
sumber
sumber
Jawaban:
Gunakan
findElements
sebagai gantifindElement
.findElements
akan mengembalikan daftar kosong jika tidak ada elemen yang cocok yang ditemukan selain pengecualian.Untuk memeriksa apakah ada elemen, Anda dapat mencoba ini
Ini akan mengembalikan true jika setidaknya satu elemen ditemukan dan false jika tidak ada.
Dokumentasi resmi merekomendasikan metode ini:
sumber
Bagaimana dengan metode pribadi yang hanya mencari elemen dan menentukan apakah ada seperti ini:
Ini akan sangat mudah dan melakukan pekerjaan.
Sunting: Anda bahkan dapat melangkah lebih jauh dan mengambil
By elementLocator
sebagai parameter, menghilangkan masalah jika Anda ingin menemukan elemen dengan sesuatu selain id.sumber
Saya menemukan bahwa ini berfungsi untuk Java:
sumber
presenceOfElementLocated
akan mengeluarkan Pengecualian jika elemen tidak ditemukan pada upaya tertentu. Untuk menghindari ini, tambahkanwait.ignoring(NoSuchElementException.class);
pernyataan antara baris pertama dan kedua.sumber
Saya memiliki masalah yang sama. Bagi saya, tergantung pada tingkat izin pengguna, beberapa tautan, tombol, dan elemen lainnya tidak akan ditampilkan di halaman. Bagian dari suite saya sedang menguji bahwa elemen-elemen yang HARUS hilang, hilang. Saya menghabiskan berjam-jam mencoba untuk mencari tahu ini. Saya akhirnya menemukan solusi yang tepat.
Apa yang dilakukan, adalah memberitahu browser untuk mencari elemen apa saja dan semua elemen yang ditentukan. Jika hasilnya
0
, itu berarti tidak ada elemen berdasarkan spesifikasi yang ditemukan. Lalu saya minta kode mengeksekusi pernyataan if untuk memberi tahu saya bahwa itu tidak ditemukan.Ini sudah dalam
C#
, jadi terjemahan perlu dilakukanJava
. Tapi seharusnya tidak terlalu sulit.Ada juga jalur lain yang dapat Anda ambil tergantung pada apa yang Anda butuhkan untuk ujian Anda.
Cuplikan berikut ini memeriksa untuk melihat apakah ada elemen yang sangat spesifik pada halaman. Bergantung pada keberadaan elemen, saya memiliki tes yang menjalankan if if.
Jika elemen ada dan ditampilkan pada halaman, saya telah
console.write
memberi tahu saya dan melanjutkan. Jika elemen yang dimaksud ada, saya tidak dapat menjalankan tes yang saya butuhkan, yang merupakan alasan utama di balik perlu mengatur ini.Jika elemen Tidak Ada, dan tidak ditampilkan pada halaman. Saya memiliki yang lain di if else melaksanakan tes.
Saya tahu saya sedikit terlambat dalam menanggapi OP. Semoga ini bisa membantu seseorang!
sumber
Coba ini: Panggil metode ini dan berikan 3 argumen:
Contoh: waitForElementPresent (driver, By.id ("id"), 10);
sumber
Anda dapat membuat kode berjalan lebih cepat dengan mempersingkat waktu selenium sebelum pernyataan coba-coba.
Saya menggunakan kode berikut untuk memeriksa apakah ada elemen.
sumber
Tulis fungsi / meto berikut menggunakan Java:
Panggil metode dengan parameter yang sesuai selama pernyataan.
sumber
jika Anda menggunakan rspec-Webdriver di ruby, Anda dapat menggunakan skrip ini dengan asumsi bahwa suatu elemen seharusnya benar-benar tidak ada dan itu adalah tes yang lulus.
Pertama, tulis metode ini terlebih dahulu dari file RB kelas Anda
Kemudian, pada file spec Anda, panggil metode itu.
Jika elemen Anda TIDAK ada, spec Anda akan lulus, tetapi jika elemen tersebut ada, itu akan menimbulkan kesalahan, pengujian gagal.
sumber
Ini bekerja untuk saya:
sumber
sumber
Secara pribadi, saya selalu mencari campuran jawaban di atas dan membuat metode Utilitas statis yang dapat digunakan kembali yang menggunakan
size() > 0
saran:Ini rapi, dapat digunakan kembali, dipelihara ... semua itu bagus ;-)
sumber
Untuk menemukan Elemen tertentu ada atau tidak, kita harus menggunakan metode findElements () alih-alih findElement () ..
ini bekerja untuk saya .. sarankan saya jika saya salah ..
sumber
Ini harus dilakukan:
sumber
Memberikan potongan kode saya. Jadi, metode di bawah ini memeriksa apakah elemen web acak tombol ' Buat Aplikasi Baru ' ada di halaman atau tidak. Perhatikan bahwa saya telah menggunakan periode tunggu sebagai 0 detik.
sumber
Saya akan menggunakan sesuatu seperti (dengan Scala [kode dalam Java 8 "baik" yang lama mungkin mirip dengan ini]):
sehingga kemudian,
sumber
Cara paling sederhana yang saya temukan di Jawa adalah:
sumber
Anda dapat mencoba menunggu tersirat:
Atau Anda dapat mencoba menunggu secara eksplisit:
Eksplisit akan memeriksa apakah elemen ada sebelum beberapa tindakan. Penantian implisit dapat dilakukan di setiap tempat dalam kode. Misalnya setelah beberapa tindakan AJAX.
Lebih banyak dapat Anda temukan di halaman SeleniumHQ
sumber