Apakah ada cara di Selenium 1.x atau 2.x untuk menggulir jendela peramban sehingga elemen tertentu yang diidentifikasi oleh XPath terlihat di peramban? Ada metode fokus di Selenium, tetapi tampaknya tidak secara fisik menggulir tampilan di FireFox. Adakah yang punya saran tentang cara melakukan ini?
Alasan saya membutuhkan ini adalah saya sedang menguji klik suatu elemen pada halaman. Sayangnya acara tersebut tampaknya tidak berfungsi kecuali elemen tersebut terlihat. Saya tidak memiliki kendali atas kode yang menyala ketika elemen diklik, jadi saya tidak bisa men-debug atau membuat modifikasi, jadi, solusi termudah adalah dengan menggulir item ke tampilan.
selenium
scroll
automated-tests
Dan saat diminta
sumber
sumber
Jawaban:
Telah mencoba banyak hal sehubungan dengan gulir, tetapi kode di bawah ini memberikan hasil yang lebih baik.
Ini akan menggulir hingga elemen terlihat:
sumber
position: fixed
di halaman Anda dan itu mengaburkan elemen yang ingin diklik Selenium. Cukup sering elemen-elemen tetap ini pergi di bagian bawah, jadi pengaturanscrollIntoView(true)
memindahkannya dengan baik ke bagian atas viewport.true
untukscrollIntoView
jika objek Anda menggulir ke bawah adalah di mana Anda saat ini berada,false
jika objek Anda menggulir ke atas di mana Anda saat ini. Saya mengalami kesulitan mencari tahu itu.Anda bisa menggunakan
org.openqa.selenium.interactions.Actions
kelas untuk pindah ke elemen.Jawa:
Python:
sumber
Anda mungkin ingin mencoba ini.
sumber
js.ExecuteScript("arguments[0].scrollIntoView(true);" + "window.scrollBy(0,-100);", e);
untuk IE dan Firefox danjs.ExecuteScript("arguments[0].scrollIntoViewIfNeeded(true);", e);
untuk Chrome. Sederhana.((JavascriptExecutor) driver).executeScript("javascript:window.scrollBy(0,250)");
Ini berfungsi di Chrome. Dan satu-satunya solusi yang benar-benar bekerja untuk saya. Situasi yang sama dengan komentator pertama, saya memiliki elemen tetap di bagian bawah yang terus mengaburkan elemen yang saya butuhkan untuk mengklik.Jika Anda ingin menggulir pada jendela Firefox menggunakan webdriver Selenium, salah satu caranya adalah menggunakan JavaScript dalam kode Java. Kode JavaScript untuk digulir ke bawah (ke bawah halaman web) adalah sebagai berikut:
sumber
Menargetkan setiap elemen dan mengirim kunci ke bawah (atau atas / kiri / kanan) tampaknya berfungsi juga. Saya tahu ini sedikit hack, tapi saya tidak terlalu suka menggunakan JavaScript untuk menyelesaikan masalah scrolling.
Sebagai contoh:
sumber
var elem = driver.FindElement(By.Id("element_id")); elem.SendKeys(Keys.PageDown);
Untuk lebih banyak contoh, buka di sini . Semua dalam bahasa Rusia, tetapi kode Java adalah lintas-budaya :)
sumber
Di Selenium, kita perlu mengambil bantuan pelaksana JavaScript untuk menggulir ke elemen atau menggulir halaman:
Dalam pernyataan di atas
element
adalah elemen yang tepat di mana kita perlu menggulir. Saya mencoba kode di atas, dan itu berhasil untuk saya.Saya punya posting dan video lengkap tentang ini:
http://learn-automation.com/how-to-scroll-into-view-in-selenium-webdriver/
sumber
Anda dapat menggunakan potongan kode ini untuk menggulir:
C #
Itu dia
sumber
Ini bekerja untuk saya:
sumber
Selenium 2 mencoba untuk menggulir ke elemen dan kemudian mengkliknya. Ini karena Selenium 2 tidak akan berinteraksi dengan suatu elemen kecuali jika ia berpikir bahwa itu terlihat.
Menggulir ke elemen terjadi secara implisit sehingga Anda hanya perlu menemukan item dan kemudian bekerja dengannya.
sumber
WebElement.click()
diperlukan elemen yang akan terlihat untuk mengkliknya. Itu tidak akan bergulir atas nama Anda.Gunakan driver untuk mengirim kunci seperti pagedownatau downarrowkunci untuk membawa elemen ke tampilan. Saya tahu ini solusi yang terlalu sederhana dan mungkin tidak berlaku dalam semua kasus.
sumber
element
di halaman yang dapat dilihat dan mengirim PageDownelement.SendKeys(Keys.PageDown);
bekerja untuk saya.Dari pengalaman saya, Selenium Webdriver tidak otomatis menggulir ke elemen saat diklik ketika ada lebih dari satu bagian yang dapat digulir pada halaman (yang cukup umum).
Saya menggunakan Ruby, dan untuk AUT saya, saya harus menambal metode klik sebagai berikut;
Metode 'location_once_scrolled_into_view' adalah metode yang ada di kelas WebElement.
Saya menghargai Anda mungkin tidak menggunakan Ruby tetapi itu harus memberi Anda beberapa ide.
sumber
module Capybara :: module Node
, dan saya perlu menelepon,native.location_once_scrolled_into_view
bukan hanyalocation_once_scrolled_into_view
. Saya juga diselamatkan::Selenium::WebDriver::Error::UnknownError
, itulah yang sering saya dapatkan di Firefox 44.0.2. Tetapi saya menemukan solusi ini tidak cukup fleksibel dan pada akhirnya menempatkan<Element>.native.location_once_scrolled_into_view
panggilan dalam tes penerimaan itu sendiri, segera diikuti olehpage.execute_script('window.scrollByPages(-1)')
tempat yang diperlukan.Element#scroll_into_view
yang mendelegasikan ke Selenium'slocation_once_scrolled_into_view
. Tetapi keduanya tidak berbeda dari perilaku default Selenium sehingga elemen overflow masih dapat menghalangi apa pun yang kita coba klik.Script Ruby untuk menggulir elemen ke tampilan adalah seperti di bawah ini.
sumber
Terkadang saya juga menghadapi masalah bergulir dengan Selenium. Jadi saya menggunakan javaScriptExecuter untuk mencapai ini.
Untuk menggulir ke bawah:
Atau juga
Untuk menggulir ke atas:
Atau,
sumber
Jika Anda berpikir jawaban lain terlalu rumit, yang ini terlalu, tetapi tidak ada injeksi JavaScript yang terlibat.
Ketika tombol dimatikan layar, itu rusak dan gulir ke sana, jadi coba lagi ... ¯ \ _ (ツ) _ / ¯
sumber
Ini adalah solusi berulang dengan JavaScript, tetapi dengan tambahan elemen yang menunggu.
Jika tidak,
ElementNotVisibleException
dapat muncul jika beberapa tindakan pada elemen sedang dilakukan.sumber
Saya telah menggunakan cara ini untuk menggulir elemen dan klik:
sumber
scrollIntoView(false)
berhasil, tetapiscrollIntoView(true)
tidak. Anda tidak dapat bekerja , itu tergantung pada skenario Anda.sumber
Anda mungkin ingin mengunjungi halaman Gulir elemen Web dan halaman Web- Selenium WebDriver menggunakan Javascript :
sumber
Dalam sebagian besar situasi untuk menggulir kode ini akan berfungsi.
sumber
JAWA
Coba gulir ke elemen memanfaatkan
x y
posisi, dan gunakanJavascriptExecutor
dengan argumen ini:"window.scrollBy(x, y)"
.Impor berikut:
Pertama, Anda perlu mencari
x y
lokasi elemen.sumber
Saya tidak yakin apakah pertanyaannya masih relevan tetapi setelah merujuk ke dokumentasi scrollIntoView dari https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView .
Solusi termudah adalah
Ini menggulir elemen ke tengah halaman.
sumber
Perilaku default Selenium kami untuk menggulir sehingga elemen tersebut nyaris tidak terlihat di bagian atas viewport. Juga, tidak semua browser memiliki perilaku yang sama persis. Ini sangat tidak memuaskan. Jika Anda merekam video dari tes browser Anda, seperti yang saya lakukan, yang Anda inginkan adalah elemen tersebut untuk menggulir ke tampilan dan dipusatkan secara vertikal .
Ini solusi saya untuk Java:
Dan kemudian, untuk menggulir, Anda menyebutnya seperti ini:
sumber
Inilah cara saya melakukannya dengan PHP webDriver untuk Selenium. Ini berfungsi untuk server mandiri Selenium 2.39.0 + https://github.com/Element-34/php-webdriver + Firefox 25.0
Catatan: Saya menggunakan versi kustom dari Element34 PHP-webdriver. Namun tidak ada perubahan pada intinya. Saya hanya menggunakan "selamat" bukan "elemen". Tapi itu tidak berpengaruh pada kasus tersebut. Penulis driver mengatakan "untuk memungkinkan hampir semua panggilan API menjadi transformasi langsung dari apa yang didefinisikan dalam protokol WebDriver itu sendiri." Jadi Anda seharusnya tidak memiliki masalah dengan bahasa pemrograman lain.
Mengklik saja tidak akan berfungsi di pengaturan saya. Ini akan melakukan gulir bukannya klik, jadi saya harus mengklik dua kali tanpa memanggil "location_in_view ()".
Catatan: Metode ini berfungsi untuk elemen yang dapat dilihat, seperti input tombol ketik.
Lihatlah: http://code.google.com/p/selenium/wiki/JsonWireProtocol#/session/:sessionId/element/:id/location
Deskripsi untuk JsonWireProtocol # menyarankan penggunaan lokasi + moveto, karena lokasi _in_view adalah metode internal.
sumber
Sesuatu yang berhasil bagi saya adalah menggunakan metode Browser.MoveMouseToElement pada elemen di bagian bawah jendela browser. Ajaibnya itu bekerja di Internet Explorer, Firefox, dan Chrome.
Saya memilih ini daripada teknik injeksi JavaScript hanya karena rasanya kurang hacky.
sumber
Saya telah melakukan pengujian dengan komponen ADF dan Anda harus memiliki perintah terpisah untuk menggulir jika lazy loading digunakan. Jika objek tidak dimuat dan Anda berusaha menemukannya menggunakan Selenium, Selenium akan melempar pengecualian elemen-tidak-ditemukan.
sumber
Jika tidak ada yang berhasil, coba ini sebelum mengklik:
sumber
Di Jawa kita dapat menggulir dengan menggunakan JavaScript, seperti dalam kode berikut:
Anda dapat menetapkan nilai yang diinginkan ke variabel "elm.scrollTop".
sumber
Solusinya adalah:
sumber
Kode ini berfungsi untuk saya:
sumber