Rumah > Java > javaTutorial > Bagaimanakah Selenium Boleh Mengakses dan Berinteraksi dengan Elemen Tersembunyi dalam Shadow DOM?

Bagaimanakah Selenium Boleh Mengakses dan Berinteraksi dengan Elemen Tersembunyi dalam Shadow DOM?

Linda Hamilton
Lepaskan: 2024-12-23 07:45:44
asal
717 orang telah melayarinya

How Can Selenium Access and Interact with Elements Hidden within Shadow DOM?

Shadow Root dan Selenium: Menavigasi Pop Timbul Data Penyemakan Imbas

Mengakses elemen dalam #shadow-root (terbuka) sambil mengosongkan data semakan imbas dalam Chrome menggunakan Selenium boleh menimbulkan cabaran . Untuk mengatasinya, kita mesti memahami keupayaan Shadow DOM dan Selenium.

Shadow DOM

Shadow DOM membenarkan pembangun web merangkum HTML dan gaya dalam komponen tersuai, mencipta elemen UI yang terpencil dan bebas. Komponen ini, yang dipanggil "tuan rumah bayang", mempunyai pokok bayang sendiri, serpihan DOM tersembunyi.

Selenium dan Shadow DOM

Selenium tidak menyokong unsur Shadow DOM secara asli kerana ia terletak di luar pokok DOM utama. Untuk berinteraksi dengan elemen ini, kita mesti mengakses pokok bayangnya dahulu.

Melintasi Shadow DOM

1. Mengenalpasti Hos Bayangan:

Cari hos bayangan dalam DOM utama menggunakan kaedah findElement Selenium.

2. Mengekstrak Akar Bayang:

Gunakan kaedah tersuai kami getShadowRoot untuk mengakses akar bayang yang dikaitkan dengan hos bayang.

3. Menavigasi Pokok Bayang:

Lintas pepohon bayang dengan menggunakan kaedah getShadowElement kami, masukkan akar bayang dan pemilih CSS elemen sasaran.

Contoh: Mengosongkan Data Penyemakan Imbas

Menggunakan kaedah tersuai kami, kami boleh menavigasi Shadow DOM berbilang peringkat untuk mengakses dan mengklik Kosongkan Data Penyemakan Imbas butang:

WebElement shadowHostL1 = driver.findElement(By.cssSelector("settings-ui"));
WebElement shadowElementL1 = getShadowElement(driver, shadowHostL1, "settings-main");
WebElement shadowElementL2 = getShadowElement(driver, shadowElementL1, "settings-basic-page");
WebElement shadowElementL3 = getShadowElement(driver, shadowElementL2, "settings-section > settings-privacy-page");
WebElement shadowElementL4 = getShadowElement(driver, shadowElementL3, "settings-clear-browsing-data-dialog");
WebElement shadowElementL5 = getShadowElement(driver, shadowElementL4, "#clearBrowsingDataDialog");
WebElement clearData = shadowElementL5.findElement(By.cssSelector("#clearBrowsingDataConfirm"));
clearData.click();
Salin selepas log masuk

Sebagai alternatif, kami boleh menggunakan satu panggilan JavaScript:

WebElement clearData = (WebElement) js.executeScript("return document.querySelector(...[CSS selector to traverse Shadow DOM]...");
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Selenium Boleh Mengakses dan Berinteraksi dengan Elemen Tersembunyi dalam Shadow DOM?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan