Saya telah menulis tes dengan Selenium2 / WebDriver dan ingin menguji apakah Permintaan HTTP mengembalikan HTTP 403 Terlarang.
Apakah mungkin mendapatkan kode status tanggapan HTTP dengan Selenium WebDriver?
Saya telah menulis tes dengan Selenium2 / WebDriver dan ingin menguji apakah Permintaan HTTP mengembalikan HTTP 403 Terlarang.
Apakah mungkin mendapatkan kode status tanggapan HTTP dengan Selenium WebDriver?
webdriver
batasan, dan batasan ini sama untuk Python dan Java;)Jawaban:
Singkatnya, tidak. Ini tidak mungkin menggunakan API WebDriver Selenium. Hal ini telah dibahas selama beberapa saat di pelacak masalah untuk proyek tersebut, dan fitur tersebut tidak akan ditambahkan ke API.
sumber
Dimungkinkan untuk mendapatkan kode respon dari permintaan http menggunakan Selenium dan Chrome atau Firefox. Yang harus Anda lakukan adalah memulai Chrome atau Firefox dalam mode logging. Saya akan menunjukkan beberapa contoh di bawah ini.
java + Selenium + Chrome Berikut adalah contoh java + Selenium + Chrome, tapi saya rasa itu bisa dilakukan dalam bahasa apa pun (python, c #, ...).
Yang perlu Anda lakukan adalah memberi tahu chromedriver untuk melakukan "Network.enable". Ini dapat dilakukan dengan mengaktifkan pencatatan kinerja.
Setelah permintaan selesai, yang harus Anda lakukan adalah mendapatkan dan mengulangi log Performa dan menemukan "Network.responseReceived" untuk url yang diminta:
Ini kodenya:
Outputnya terlihat seperti ini:
java + Selenium + Firefox Akhirnya saya menemukan trik untuk Firefox juga. Anda perlu memulai firefox menggunakan variabel
MOZ_LOG
danMOZ_LOG_FILE
lingkungan, dan mencatat permintaan http pada tingkat debug(4 = PR_LOG_DEBUG) - map.put("MOZ_LOG", "timestamp,sync,nsHttp:4")
. Simpan log di file sementara. Setelah itu, dapatkan konten file log yang disimpan dan parsing untuk kode respons (menggunakan beberapa ekspresi reguler sederhana). Pertama, deteksi awal permintaan, identifikasi id-nya(nsHttpChannel::BeginConnect [this=000000CED8094000])
, lalu di langkah kedua, temukan kode respons untuk id permintaan tersebut(nsHttpChannel::ProcessResponse [this=000000CED8094000 httpStatus=200])
.Output untuk ini adalah
Header respons juga dapat ditemukan di file log. Anda bisa mendapatkannya jika Anda mau.
sumber
Anda dapat menggunakan proxy BrowserMob untuk menangkap permintaan dan tanggapan dengan file
HttpRequestInterceptor
. Berikut ini contohnya di Java:sumber
Bagi orang-orang yang menggunakan Python, Anda dapat mempertimbangkan Selenium Wire , perpustakaan yang saya kembangkan untuk memeriksa permintaan yang dibuat oleh browser selama pengujian.
Anda mendapatkan akses ke permintaan melalui
driver.requests
atribut:Cetakan:
Pustaka memberi Anda kemampuan untuk mengakses header, kode status, konten isi, serta kemampuan untuk mengubah header dan menulis ulang URL.
sumber
driver.wait_for_request()
metode untuk menemukan permintaan yang tanggapannya Anda minati. Lihat dokumen untuk info lebih lanjut.http://myserver.com/some/path/12345/
Anda bisa lewatdriver.wait_for_request(‘.*/12345/‘)
Saya juga mengalami masalah yang sama dan macet selama beberapa hari, tetapi setelah beberapa penelitian, saya menemukan bahwa kami sebenarnya dapat menggunakan "--remote-debugging-port" chrome untuk mencegat permintaan dalam hubungannya dengan driver web selenium. Gunakan Pseudocode berikut sebagai referensi: -
buat instance driver chrome dengan debugging jarak jauh
lakukan panggilan ke http://127.0.0.1:freePort
Ekstrak URL webSocket chrome untuk mendengarkan, Anda dapat melihat respons dan mencari cara untuk mengekstrak
Hubungkan ke soket ini, Anda dapat menggunakan asyncHttp
Aktifkan penangkapan jaringan
Sekarang chrome akan mengirim semua acara terkait jaringan dan menangkapnya sebagai berikut
Anda dapat melakukan semua yang disebutkan di situs alat dev. lihat https://chromedevtools.github.io/devtools-protocol/ Catatan: - gunakan chromedriver 2.39 atau lebih tinggi.
Saya harap ini membantu seseorang.
referensi: Menggunakan protokol debugging jarak jauh Google Chrome
sumber
selenium-webdriver
, dalam kasus saya) yang secara otomatis diaktifkanNetwork.enable
dan menampilkan cara sederhana untuk memeriksa respons terakhir ... sepertidriver.response.status_code
. Mungkin suatu hari nanti saya akan menambahkan bahwa ... :)status_code
. Ini menggunakan protokol debugging jarak jauh Chrome seperti dalam contoh ini.Dapatkan Kode Respon dalam Bahasa Apa Pun (Menggunakan JavaScript):
Jika pengujian Selenium Anda berjalan di browser modern, cara mudah untuk mendapatkan kode respons adalah dengan mengirim
XMLHttpRequest
* sinkronis dan memeriksastatus
respons:Anda dapat menggunakan teknik ini dengan bahasa pemrograman apa pun dengan meminta Selenium menjalankan skrip. Misalnya, di Java Anda dapat menggunakan
JavascriptExecutor.executeScript()
untuk mengirimXMLHttpRequest
:* Anda dapat mengirim asynchronous
XMLHttpRequest
sebagai gantinya, tetapi Anda harus menunggu hingga selesai sebelum melanjutkan pengujian Anda.Dapatkan Kode Respon di Java:
Anda bisa mendapatkan kode respons di Java dengan menggunakan
URL.openConnection()
danHttpURLConnection.getResponseCode()
:Metode ini mungkin bisa digeneralisasikan ke bahasa lain juga, tetapi perlu dimodifikasi agar sesuai dengan API bahasa (atau pustaka).
sumber
Tidak yakin ini yang Anda cari, tetapi saya memiliki tujuan yang sedikit berbeda adalah untuk memeriksa apakah gambar jarak jauh ada dan saya tidak akan memiliki kesalahan 403, jadi Anda dapat menggunakan sesuatu seperti di bawah ini:
sumber
Tidak mungkin mendapatkan kode Respon HTTP dengan menggunakan Selenium WebDriver secara langsung. Kode tersebut dapat diperoleh dengan menggunakan kode Java dan dapat digunakan di Selenium WebDriver.
Untuk mendapatkan kode Respon HTTP oleh java:
Sekarang Anda dapat menulis kode Selenium WebDriver Anda seperti di bawah ini:
sumber
Anda dapat mencoba Mobilenium ( https://github.com/rafpyprog/Mobilenium ), paket python yang mengikat BrowserMob Proxy dan Selenium.
Contoh penggunaan:
sumber