Apa yang ada di DOM Selenium WebDriver? Struktur & Bentuk Lengkap
โก Ringkasan Cerdas
Document Object Model mengekspos halaman HTML ke JavaSkrip sebagai pohon objek, memungkinkan skrip dan Selenium WebDriver membaca, menemukan, dan mengubah elemen apa pun di halaman saat browser berjalan.
Apa yang ada di DOM Selenium Pengemudi Web?
PENGHAKIMAN in Selenium WebDriver adalah komponen penting dalam pengembangan web menggunakan HTML5 dan JavaScript. Bentuk lengkap dari DOM adalah Document Object Model. DOM bukanlah konsep ilmu komputer. Ini adalah sekumpulan antarmuka sederhana yang distandarkan di antara pengembang web untuk mengakses dan memanipulasi dokumen dalam HTML atau XML menggunakan JavaNaskah.
Standar-standar ini membantu pengembang membangun halaman web tanpa perlu khawatir tentang detail implementasi. Beberapa organisasi yang terlibat dalam standarisasi antarmuka ini adalah Mozilla, Apple, Microsoft, Google, Adobe, dll. Namun, W3C-lah yang memformalkan standar dan menerbitkannya โ lihat di sini (https://dom.spec.whatwg.org/).
Bagian-bagian di bawah ini membahas struktur dokumen, objek-objek yang diekspos oleh DOM, dan cara memeriksanya. Mozilla selalu memperbarui referensi API terkini di sini. Halaman Model Objek Dokumen MDN.
Setiap Selenium Locator akan berinteraksi dengan pohon yang sama, jadi struktur di bawah ini adalah seperti apa adanya. temukanElemen() pencarian.
Memahami Struktur DOM
Anda perlu memahami struktur DOM jika Anda membangun situs web apa pun yang melibatkan penggunaan skrip JavaSkrip. Memahami DOM bahkan lebih penting jika Anda melakukan salah satu atau semua tugas rumit berikut di situs web Anda โ
- Mengembangkanping Konten yang terus memperbarui dirinya sendiri tanpa perlu memuat ulang seluruh halaman โ seperti harga terkini dari semua saham dalam portofolio pengguna Anda.
- Mengembangkanping Interaksi pengguna tingkat lanjut seperti menambahkan atau memodifikasi konten secara dinamis โ misalnya kemampuan untuk menambahkan lebih banyak saham ke portofolio Anda.
- Mengembangkanping Konten yang dapat dikustomisasi oleh pengguna โ seperti kemampuan untuk mengubah tata letak sehingga portofolio reksa dana muncul sebelum portofolio saham.
- Mengembangkanping Konten responsif di situs web Anda sehingga situs web Anda dapat beradaptasi dengan berbagai layar media seperti iPhone, desktop, tablet, dll. secara otomatis.
Halaman HTML dasar
<!DOCTYPE html>
<meta charset="UTF-8">
<html>
<head>
<title>my page title</title>
</head>
<body>
<article>
<p>
my first article
</p>
</article>
<aside>side bar content</aside>
</body>
</html>
Bagaimana tampilan DOM PARSER browser?
html > head > title
> body > aside
> article > p
Bagaimana Anda mengakses elemen body?
<script>
var body = window.document.body;
</script>
Bagaimana cara mengucapkan โHalo Duniaโ?
<script>
var body = document.querySelector("body > article > p").innerHTML = "Hello World!";
</script>
Akhirnya akan terlihat seperti keseluruhan file HTML
Open Windows Notepad dan tempel konten berikut di dalamnya. Lalu simpan file tersebut sebagai โMyFileNewFile.htmlโ (pastikan nama file Anda diakhiri dengan .html).
<!DOCTYPE html> <meta charset="UTF-8"> <html> <head> <title>my page title</title> </head> <body> <article><p>my first article</p></article> <aside>side bar content</aside> <script> var body = document.querySelector("body > article > p").innerHTML = "Hello World!"; </script> </body> </html>
Terakhir, buka saja file tersebut menggunakan salah satu browser pilihan Anda dan Anda akan melihat โHello World!โ
Komponen DOM di Selenium
Di bawah ini adalah komponen utama DOM Selenium Pengemudi Web:
- Jendela
- Dokumen
- Elemen
Setiap komponen berada pada level yang berbeda dalam struktur pohon, dimulai dari level terluar.
Jendela
Window adalah objek yang berisi objek dokumen dalam DOM. Itu berada di atas segalanya.
Untuk sampai ke objek jendela dari dokumen tertentu
<script>
var window = document.defaultView;
</script>
Dalam lingkungan tab, setiap tab memiliki objek jendelanya sendiri. Namun, jika seseorang ingin menangkap dan mengimplementasikan peristiwa seperti window.resizeTo dan window.resizeBy, peristiwa tersebut berlaku untuk seluruh jendela dan bukan pada tab saja.
Properti Objek Jendela di DOM
jendela.Penyimpanan lokal โ memberikan akses ke penyimpanan lokal browser. Penyimpanan lokal dapat digunakan untuk menyimpan dan mengambil data dari suatu sesi.
<script>
window.localStorage.setItem('name','xyz');
var name = window.localStorage.getItem('name');
</script>
jendela.pembuka - mendapat referensi ke objek jendela yang membuka jendela ini (baik dengan mengklik link atau menggunakan metode window.open)
Metode Objek Jendela yang Berguna
jendela.alert() โ menampilkan dialog peringatan dengan pesan.
<script>
window.alert('say hello');
</script>
Ada banyak kejadian berguna yang diekspos oleh objek jendela. Kami akan membahasnya di bagian โAcaraโ di bawah Topik Lanjutan
Dokumen
Dokumen menandai awal dari pohon DOM. Dokumen adalah simpul pertama dalam DOM. Ia memiliki beberapa metode dan properti, yang cakupannya berlaku untuk seluruh dokumen, seperti URL, getElementById, querySelector, dll.
Properti Objek Dokumen di DOM
Dokumen.dokumenURI ke Dokumen.URL โ Keduanya mengembalikan lokasi dokumen saat ini. Namun, jika dokumen tersebut bukan bertipe Dokumen HTML.URL tidak akan bekerja.
Dokumen.activeElement โ Metode ini mengembalikan elemen di DOM yang sedang fokus. Ini berarti jika pengguna sedang mengetikping Dalam sebuah kotak teks, Document.activeElement akan mengembalikan referensi ke kotak teks tersebut.
Judul dokumen โ Ini digunakan untuk membaca atau menetapkan judul dokumen tertentu.
Metode Objek Dokumen yang Berguna
Dokumen.getElementById(String id) โ Ini adalah metode yang paling relevan dan berguna dalam manipulasi DOM. Metode ini digunakan untuk mencari elemen dalam pohon DOM. menggunakan pengidentifikasi uniknyaPencarian ini peka terhadap huruf besar dan kecil, yaitu pada contoh berikut ini โ Elemen โ tidak dapat dicari menggunakan kata-kata seperti IntroDiv atau introdiv atau iNtrodiv dll.
<!DOCTYPE html> <meta charset="UTF-8"> <html> <head></head> <body> <div id='introDiv'></div> <script> var label = Document.getElementById('introDiv'); label.setInnerHTML('say hello again'); </script> </body> </html>
Document.querySelectorAll(Pemilih string) โ ini adalah metode lain yang banyak digunakan untuk memilih satu atau lebih elemen berdasarkan aturan pemilih CSS (Jika Anda familiar dengan notasi $ jQuery, itu sendiri menggunakan metode ini). Kita tidak akan membahas selektor CSS secara mendalam. Selektor CSS adalah seperangkat aturan yang memungkinkan Anda mendapatkan daftar elemen serupa (berdasarkan aturan selektor). Kita telah menggunakan metode ini sebelumnya di bagian "Hello World".
Elemen
Diagram di bawah ini menunjukkan bagaimana objek Element berada di dalam pohon DOM, di bawah node dokumen.
Elemen Objek di DOM
Elemen adalah objek apa pun yang direpresentasikan oleh sebuah node dalam pohon DOM suatu dokumen. Seperti biasa, objek Elemen itu sendiri hanyalah sebuah kontracElemen adalah serangkaian properti, metode, dan peristiwa antara browser dan dokumen HTML. Terdapat jenis-jenis elemen khusus seperti HTMLElement, SVGElement, XULElement, dll. Dalam tutorial ini, kita hanya akan fokus pada HTMLElement.
Properti Objek Elemen di DOM
Elemen.id โ Properti ini dapat digunakan untuk menyetel atau membaca โIDโ (pengidentifikasi unik) untuk elemen HTML. ID harus unik di antara elemen-elemen dalam pohon DOM. Seperti disebutkan sebelumnya, ID juga digunakan oleh metode Document.getElementById untuk memilih objek Elemen tertentu dalam pohon DOM.
HTMLElement.contentDapat diedit โ properti contentEditable dari suatu elemen menentukan apakah konten elemen tersebut dapat diedit/dimodifikasi. Properti ini dapat diatur seperti yang ditunjukkan dalam skrip di bawah ini. Properti ini juga dapat digunakan untuk menentukan apakah suatu elemen dapat diedit atau tidak. Coba skrip berikut di dalam badan HTML mana pun dan Anda akan melihat bahwa Anda dapat mengedit konten apa pun di badan tersebut.
<script>
document.body.contentEditable = true;
</script>
Elemen.innerHTML โ innerHTML adalah properti penting lainnya yang kita gunakan untuk mengakses konten HTML di dalam suatu elemen. Properti ini juga digunakan untuk mengatur konten HTML baru dari elemen tersebut. Properti ini banyak digunakan untuk mengatur/mengubah konten bidang data. Misalnya, Anda ingin halaman web Anda memperbarui suhu Kota Mumbai setiap jam, Anda dapat menjalankan skrip dalam contoh berikut setiap jam.
<!DOCTYPE html> <meta charset="UTF-8"> <html> <head> <title>my page title</title> </head> <body> <section> <h1>Mumbai</h1> <h2>Temperature</h2> <span id='tempValue'></span><sup>o</sup>C </section> <script> document.getElementById('tempValue').innerHTML = '26'; </script> </body> </html>
Metode Objek Elemen yang Berguna
HTMLElement.blur() & HTMLElement.fokus() โ Metode blur dan fokus digunakan untuk menghilangkan fokus atau memberikan fokus pada elemen HTML. Metode ini paling banyak digunakan untuk memindahkan fokus kursor di antara kotak teks di halaman web entri data.
Elemen.querySelectorAll โ Metode ini mirip dengan metode querySelector yang telah dibahas untuk objek dokumen. Namun metode ini akan membatasi pencariannya pada turunan elemen itu sendiri.
Catatan akurasi: Blok kode di atas direproduksi sebagaimana yang telah dipublikasikan. Kode yang berfungsi menggunakan dokumen dengan huruf d kecil dan innerHTML properti, bukan setInnerHTML().
Men-debug di DOM
Alat pengembang Google Chrome, Mozilla Firefox, Internet Explorer (10 atau lebih tinggi) atau Safari memungkinkan proses debug yang mudah langsung di dalam browser. Terkadang browser yang berbeda menafsirkan markup HTML yang sama secara berbeda dan saat itulah proses debug membantu Anda memeriksa DOM seperti yang telah ditafsirkan oleh mesin DOM browser tersebut.
Catatan browser: Internet Explorer dihentikan dukungannya pada tahun 2022, jadi DevTools-nya sekarang berada di Microsoft EdgeLangkah-langkah di bawah ini tidak berubah; DevTools dibuka dengan F12.
Sekarang, misalkan Anda ingin mengubah nilai suhu dari 26oC ke 32oC dalam contoh terakhir Anda. Kami akan mengambil beberapa langkah sederhana untuk melakukan itu. Tangkapan layar yang ditampilkan di sini berasal dari Mozilla Firefoxโ namun, langkah-langkahnya sama di semua browser lainnya.
- Buka MyFileNewFile.html (atau nama apa pun yang Anda berikan pada file HTML dalam tutorial di atas) menggunakan browser Anda
-
Gunakan mouse Anda dan klik kanan pada nilai suhu 26oC dan klik "Periksa Elemen"
-
Perhatikan bahwa elemen di mana Anda memilih untuk โInspeksi Elemenโ ditampilkan disorot di browser Anda (jendela debugger biasanya muncul di bagian bawah layar)
-
Buka elemen dengan mengklik segitiga miring di sampingnya
-
Pilih apa yang ingin Anda edit dan klik dua kali pada teks tersebut. Anda akan mendapatkan opsi untuk mengubah teks. Lakukan seperti yang diarahkan pada gambar animasi di bawah ini.
-
Perhatikan perubahan konten halaman HTML Anda. Anda dapat menutup jendela debugging sekarang.
Perhatikan bahwa perubahan Anda hanya akan dipertahankan untuk sesi ini. Segera setelah Anda memuat ulang atau menyegarkan (tekan F5) halaman, perubahan akan dikembalikan. Ini menunjukkan Anda tidak mengubah sumber HTML sebenarnya tetapi hanya interpretasi lokal browser Anda.
Sebagai latihan yang menyenangkan, cobalah melakukan hal berikut. Buka www.facebook.com di browser Anda dan gunakan alat debugger untuk mendapatkan hasil berikut โ perhatikan bagaimana tertulis โSaya telah meretas Facebookโ.
Hasil dari latihan tersebut terlihat seperti tangkapan layar di bawah ini.
Membaca dan mengedit node mencakup halaman statis. Halaman interaktif juga bereaksi terhadap tindakan pengguna.
Acara DOM
Apa itu Acara di DOM?
Peristiwa adalah model pemrograman di mana insiden yang dipicu oleh pengguna (atau dipicu oleh siklus hidup halaman browser) disiarkan sebagai pesan. Misalnya, ketika suatu halaman telah selesai dimuat maka akan memicu peristiwa window.load dan demikian pula ketika pengguna mengklik tombol itu acara klik elemen dipicu.
Pesan-pesan ini dapat disadap oleh siapa saja JavaNaskah kode dan kemudian sebuah tindakan yang ditentukan pengembang dapat dilakukan. Misalnya, Anda ingin angka-angka di halaman web Anda hanya diperbarui saat pengguna mengklik tombol. Anda dapat mencapainya dengan salah satu metode berikut โ
- Tetapkan tindakan ke acara onclick elemen HTML
- Tetapkan tindakan ke acara klik menggunakan metode addEventListener
Metode 1
<!DOCTYPE html>
<html>
<head>
<title>my page title</title>
</head>
<body>
<section>
<h1>Mumbai<h1>
<h2>Temperature</h2>
<span id='tempValue'></span><sup>o</sup>C
<br/>
<br/>
<button onclick='onRefreshClick()'>Refresh</button>
</section>
<script>
document.getElementById('tempValue').innerHTML = '26';
function onRefreshClick(e) {
document.getElementById('tempValue').innerHTML = '32';
}
</script>
</body>
</html>
Metode 2
<!DOCTYPE html>
<html>
<head>
<title>my page title</title>
</head>
<body>
<section>
<h1>Mumbai<h1>
<h2>Temperature</h2>
<span id='tempValue'></span><sup>o</sup>C
<br/>
<br/>
<button id='btnRefresh'>Refresh</button>
</section>
<script>
document.getElementById('tempValue').innerHTML = '26';
document.getElementById('btnRefresh').addEventListener('click', function(event) {
document.getElementById('tempValue').innerHTML = '32' },false);
</script>
</body>
</html>
Pemecahan masalah di DOM
Catatan API lama: Dua jawaban di bawah menggunakan document.write(). Kode tersebut tetap berjalan, tetapi panggilan setelah halaman dimuat akan menghapus dokumen. Lebih baik gunakan console.log() atau innerHTML.
T. Bagaimana saya mengetahui apakah suatu elemen ada atau tidak?
A. Coba cari elemen menggunakan salah satu pemilih dan periksa apakah elemen yang dikembalikan adalah nol. Lihat contoh di bawah โ
if(document.getElementById("elementIDWhichIsNotPresentInDOM") === null) { //do something }
T. Saya mendapatkan TypeError: document.getElementByID bukan fungsiโฆ
A. Pastikan nama metode sama persis dengan metode API. Seperti pada pertanyaan di atas โ ini adalah getElementById dan bukan getElementByID.
T. Apa perbedaan antara node anak dan node anak?
A. Metode children memberi kita koleksi semua elemen dalam elemen pemanggil. Koleksi yang dikembalikan bertipe HTMLCollection. Namun, metode childNodes memberi kita koleksi semua node dalam elemen pemanggil. Tambahkan skrip berikut ke contoh kita dan lihat perbedaannya โ
Metode childNodes mengembalikan 14 item
document.write("Using childNodes method") document.write("<br>"); document.write("<br>"); for(i=0;i<document.getElementsByTagName("section")[0].childNodes.length;i++) { document.write((i+1)+"."); document.write(document.getElementsByTagName("section")[0].childNodes[i].toString()); document.write("<br>"); } document.write("<br>"); document.write("Number of nodes in a section " + document.getElementsByTagName("section")[0].childNodes.length);
Sedangkan metode anak hanya mengembalikan 7 item
document.write("Using children method") document.write("<br>"); document.write("<br>"); for(i=0;i<document.getElementsByTagName("section")[0].children.length;i++) { document.write((i+1)+"."); document.write(document.getElementsByTagName("section")[0].children[i].toString()); document.write("<br>"); } document.write("<br>"); document.write("Number of nodes in a section " + document.getElementsByTagName("section")[0].children.length);
T. Saya mendapatkan Uncaught TypeError: Cannot read property 'innerHTML' of unfinedโฆ
A. Pastikan bahwa instance HTMLElement tempat Anda memanggil properti innerHTML telah ditetapkan setelah deklarasi awal. Kesalahan ini umumnya terjadi dalam skenario berikut. Lihat bagaimana kesalahan dapat dihindari di blok kode berikutnyaโฆ
var element; if(false) //say condition was false { element = document.getElementById('tempValue1'); } element.innerHTML = '32';
var element = null; if(false) //say condition was false { element = document.getElementById('tempValue1'); } if(element != null) { element.innerHTML = '32'; }






