Cara menggunakan Selenium IDE dengan Scripts & Perintah (Tegaskan, Verifikasi)

Daftar Isi:

Anonim

Kami akan menggunakan situs web Mercury Tours sebagai aplikasi web kami yang sedang diuji. Ini adalah sistem reservasi penerbangan online yang berisi semua elemen yang kami butuhkan untuk tutorial ini. URL-nya adalah http://demo.guru99.com/test/newtours/, dan ini akan menjadi URL Dasar kami.

Buat Naskah dengan Merekam

Sekarang mari kita buat skrip pengujian pertama kita di Selenium IDE menggunakan metode yang paling umum - dengan merekam. Setelah itu, kami akan menjalankan skrip kami menggunakan fitur pemutaran.

Langkah 1

  • Luncurkan Firefox dan Selenium IDE.
  • Ketik nilai untuk Base URL kami: http://demo.guru99.com/test/newtours/.
  • Alihkan tombol Rekam ke aktif (jika belum diaktifkan secara default).
Langkah 2

Di Firefox, navigasikan ke http://demo.guru99.com/test/newtours/. Firefox akan membawa Anda ke halaman yang mirip dengan yang ditunjukkan di bawah ini.

LANGKAH 3
  • Klik kanan pada ruang kosong mana pun di dalam halaman, seperti pada logo Mercury Tours di sudut kiri atas. Ini akan memunculkan menu konteks Selenium IDE. Catatan: Jangan klik objek atau gambar yang memiliki hyperlink
  • Pilih opsi "Tampilkan Perintah yang Tersedia".
  • Kemudian, pilih "assertTitle tepat: Selamat Datang: Tur Mercury". Ini adalah perintah yang memastikan bahwa judul halaman sudah benar.
LANGKAH 4
  • Di kotak teks "Nama Pengguna" Mercury Tours, ketik nama pengguna yang tidak valid, "invalidUNN".
  • Di kotak teks "Password", ketik password yang tidak valid, "invalidPWD".
Langkah 5
  • Klik pada tombol "Masuk". Firefox akan membawa Anda ke halaman ini.
LANGKAH 6

Matikan tombol rekam untuk berhenti merekam. Skrip Anda sekarang akan terlihat seperti yang ditunjukkan di bawah ini.

Langkah 7

Sekarang setelah kita selesai dengan skrip uji kita, kita akan menyimpannya dalam kasus uji. Di menu File, pilih "Save Test Case". Atau, Anda cukup menekan Ctrl + S.

LANGKAH 8
  • Pilih lokasi yang Anda inginkan, lalu beri nama Test Case sebagai "Invalid_login".
  • Klik tombol "Simpan".
LANGKAH 9.

Perhatikan bahwa file tersebut disimpan sebagai HTML.

LANGKAH 10.

Kembali ke Selenium IDE dan klik tombol Playback untuk menjalankan seluruh skrip. Selenium IDE harus dapat mereplikasi semuanya dengan sempurna.

Pengantar Perintah Selenium - Selenese

  • Perintah Selenese dapat memiliki maksimal dua parameter: target dan nilai.
  • Parameter tidak diperlukan sepanjang waktu. Itu tergantung pada berapa banyak perintah yang dibutuhkan.

3 Jenis Perintah

Tindakan

Ini adalah perintah yang berinteraksi langsung dengan elemen halaman.

Contoh: perintah "klik" adalah tindakan karena Anda berinteraksi langsung dengan elemen yang Anda klik.

Perintah "type" juga merupakan tindakan karena Anda memasukkan nilai ke dalam kotak teks, dan kotak teks tersebut menunjukkannya kepada Anda sebagai gantinya. Ada interaksi dua arah antara Anda dan kotak teks.

Accessors

Mereka adalah perintah yang memungkinkan Anda menyimpan nilai ke variabel.

Contoh: perintah "storeTitle" adalah aksesor karena hanya "membaca" judul halaman dan menyimpannya dalam variabel. Itu tidak berinteraksi dengan elemen apa pun di halaman.

Pernyataan

Mereka adalah perintah yang memverifikasi jika kondisi tertentu terpenuhi.

3 Jenis Pernyataan

  • Tegaskan . Saat perintah "assert" gagal, pengujian akan segera dihentikan.
  • Verifikasikan . Ketika perintah "verifikasi" gagal, Selenium IDE mencatat kegagalan ini dan melanjutkan eksekusi uji.
  • Tunggu . Sebelum melanjutkan ke perintah berikutnya, perintah "waitFor" akan menunggu kondisi tertentu menjadi benar.
    • Jika kondisi menjadi benar dalam masa tunggu, langkah tersebut berlalu.
    • Jika kondisinya tidak menjadi benar, langkah tersebut gagal. Kegagalan dicatat, dan eksekusi uji dilanjutkan ke perintah berikutnya.
    • Secara default, nilai batas waktu diatur ke 30 detik. Anda dapat mengubahnya dalam dialog Selenium IDE Options di bawah tab General.

Tegaskan vs. Verifikasi

Perintah Umum

Perintah Jumlah Parameter Deskripsi
Buka 0 - 2

Membuka halaman menggunakan URL.

click / clickAndWait 1

Klik pada elemen tertentu.

type / typeKeys 2

Mengetik urutan karakter.

verifikasiTitle / assertTitle 1

Membandingkan judul halaman yang sebenarnya dengan nilai yang diharapkan.

verifikasiTextPresent 1

Memeriksa apakah teks tertentu ditemukan di dalam halaman.

verifikasiElementPresent 1

Memeriksa keberadaan elemen tertentu.

verifikasiTable 2

Membandingkan isi tabel dengan nilai yang diharapkan.

waitForPageToLoad 1

Jeda eksekusi hingga halaman dimuat sepenuhnya.

waitForElementPresent 1

Jeda eksekusi sampai elemen yang ditentukan menjadi ada.

Buat Script Secara Manual dengan Firebug

Sekarang, kita akan membuat ulang kasus uji yang sama secara manual, dengan mengetikkan perintah. Kali ini, kita perlu menggunakan Firebug.

Langkah 1
  • Buka Firefox dan Selenium IDE.
  • Ketik URL dasar (http://demo.guru99.com/test/newtours/).
  • Tombol rekam harus OFF.
Langkah 2: Klik pada baris kosong paling atas di Editor.

Ketik "buka" di kotak teks Command dan tekan Enter.

LANGKAH 3
  • Arahkan Firefox ke URL dasar kami dan aktifkan Firebug
  • Di panel Selenium IDE Editor, pilih baris kedua (baris di bawah perintah "open") dan buat perintah kedua dengan mengetik "assertTitle" pada kotak Command.
  • Jangan ragu untuk menggunakan fitur pelengkapan otomatis.
LANGKAH 4
  • Di Firebug, luaskan tag untuk menampilkan tag .</li> <li>Klik pada nilai tag <title> (yaitu "Selamat Datang: Mercury Tours") dan tempelkan ke bidang Target di Editor.</li> </ul> </td> </tr> <tr> <td><strong>Langkah 5</strong> <ul> <li>Untuk membuat perintah ketiga, klik pada baris kosong ketiga di Editor dan masukkan "ketik" pada kotak teks Perintah.</li> <li>Di Firebug, klik tombol "Periksa".</li> </ul> </td> </tr> <tr> <td>Klik pada kotak teks Nama Pengguna. Perhatikan bahwa Firebug secara otomatis menampilkan kode HTML untuk elemen itu.</td> </tr> <tr> <td><strong>LANGKAH 6</strong> <p>Perhatikan bahwa kotak teks Nama Pengguna tidak memiliki ID, tetapi memiliki atribut NAMA. Oleh karena itu, kami akan menggunakan NAMA sebagai pencari lokasi. Salin nilai NAME dan tempelkan ke bidang Target di Selenium IDE.</p> <p>Masih di kotak teks Target, awalan "userName" dengan "name =", yang menunjukkan bahwa Selenium IDE harus menargetkan elemen yang atribut NAMA-nya adalah "userName."</p> <p>Ketik "invalidUN" di kotak teks Value dari Selenium IDE. Skrip pengujian Anda sekarang akan terlihat seperti gambar di bawah ini. Kami selesai dengan perintah ketiga. Catatan: Daripada invalidUN, Anda bisa memasukkan string teks lainnya. Tapi Selenium IDE peka huruf besar / kecil, dan Anda mengetikkan nilai / atribut persis seperti dalam aplikasi.</p> </td> </tr> <tr> <td><strong>Langkah 7</strong> <ul> <li>Untuk membuat perintah keempat, masukkan "type" pada kotak teks Command.</li> <li>Sekali lagi, gunakan tombol "Inspeksi" Firebug untuk mendapatkan pencari lokasi untuk kotak teks "Kata Sandi".</li> </ul> <ul> <li> <p>Tempel atribut NAME ("password") ke dalam kolom Target dan awali dengan "name ="</p> </li> <li> <p>Ketik "invalidPW" di kolom Value di Selenium IDE. Skrip pengujian Anda sekarang akan terlihat seperti gambar di bawah ini.</p> </li> </ul> </td> </tr> <tr> <td><strong>LANGKAH 8</strong> <ul> <li>Untuk perintah kelima, ketik "clickAndWait" pada kotak teks Command di Selenium IDE.</li> <li>Gunakan tombol "Inspeksi" Firebug untuk mendapatkan pencari lokasi tombol "Masuk".</li> </ul> <ul> <li>Tempel nilai atribut NAME ("login") ke kotak teks Target dan awali dengan "name =".</li> <li>Skrip pengujian Anda sekarang akan terlihat seperti gambar di bawah ini.</li> </ul> </td> </tr> </tbody> </table> <p><strong>Langkah 9:</strong> Simpan kasus uji dengan cara yang sama seperti yang kita lakukan di bagian sebelumnya.</p> <a id="menu-6"></a> <h2>Menggunakan Tombol Temukan</h2> <p><strong>Tombol Find di Selenium IDE digunakan untuk memverifikasi apakah yang kita masukkan ke kotak teks Target memang elemen UI yang benar.</strong></p> <p>Mari kita gunakan kasus uji Invalid_login yang kita buat di bagian sebelumnya. Klik pada perintah apa saja dengan entri Target, katakanlah, perintah ketiga.</p> <p>Klik pada tombol Temukan. Perhatikan bahwa kotak teks Nama Pengguna di dalam halaman Mercury Tours menjadi disorot sebentar.</p> <p>Ini menunjukkan bahwa Selenium IDE mampu mendeteksi dan mengakses elemen yang diharapkan dengan benar. Jika tombol Find menyorot elemen yang berbeda atau tidak ada elemen sama sekali, maka pasti ada yang salah dengan skrip Anda.</p> <a id="menu-7"></a> <h2>Jalankan Perintah</h2> <p><strong>Ini memungkinkan Anda untuk menjalankan perintah tunggal apa pun tanpa menjalankan seluruh kasus uji</strong> . Cukup klik pada baris yang ingin Anda jalankan dan kemudian klik "Actions> Execute this command" dari menu bar atau cukup tekan "X" pada keyboard Anda.</p> <p><strong>Langkah 1.</strong> Pastikan browser Anda ada di beranda Mercury Tours. Klik pada perintah yang ingin Anda jalankan. Dalam contoh ini, klik baris "type | userName | invalidUN".</p> <p><strong>Langkah 2.</strong> Tekan "X" pada keyboard Anda.</p> <p><strong>Langkah 3.</strong> Perhatikan bahwa kotak teks untuk nama pengguna diisi dengan teks "invalidUN"</p> <p><strong>Menjalankan perintah dengan cara ini sangat bergantung pada halaman yang sedang ditampilkan Firefox</strong> . Artinya jika Anda mencoba contoh di atas dengan menampilkan beranda Google dan bukan Mercury Tours ', maka langkah Anda akan gagal karena tidak ada kotak teks dengan atribut "nama pengguna" di dalam beranda Google.</p> <a id="menu-8"></a> <h2>Titik awal</h2> <p><strong>Titik awal adalah indikator yang memberi tahu Selenium IDE baris mana yang akan memulai eksekusi</strong> . <strong>Tombol pintasnya adalah "S".</strong></p> <p>Pada contoh di atas, pemutaran akan dimulai pada baris ketiga (ketik | sandi | invalidPW). <strong>Anda hanya dapat memiliki satu titik awal dalam satu skrip pengujian.</strong></p> <p>Titik awalnya mirip dengan Execute Command karena bergantung pada halaman yang sedang ditampilkan. Titik awal akan gagal jika Anda berada di halaman yang salah.</p> <a id="menu-9"></a> <h2>Breakpoints</h2> <p>Breakpoints adalah indikator yang memberi tahu Selenium IDE tempat untuk menjeda pengujian secara otomatis. <strong>Tombol pintasnya adalah "B".</strong></p> <p>Sorotan kuning berarti langkah saat ini tertunda. Ini membuktikan bahwa Selenium IDE telah menghentikan sementara eksekusi pada langkah tersebut. <strong>Anda dapat memiliki beberapa breakpoint dalam satu kasus pengujian.</strong></p> <a id="menu-10"></a> <h2>Langkah</h2> <p>Ini memungkinkan Anda untuk menjalankan perintah yang berhasil satu per satu setelah menghentikan kasus uji. Mari kita gunakan skenario di bagian sebelumnya "Breakpoints."</p> <table> <tbody> <tr> <td width="50%"> </td> <td> <p><strong>Sebelum mengklik "Langkah".</strong></p> <p>Kasus uji berhenti di baris "clickAndWait | login".</p> </td> </tr> <tr> <td width="50%"> </td> <td> <p><strong>Setelah mengklik "Langkah".</strong></p> <p>Baris "clickAndWait | login" dijalankan dan berhenti untuk perintah berikutnya (verifikasiTitle | Sign-on: Mercury Tours).</p> <p>Perhatikan bahwa baris berikutnya dijeda meskipun tidak ada breakpoint di sana. Ini adalah tujuan utama fitur Langkah - fitur ini menjalankan perintah berikutnya satu per satu untuk memberi Anda lebih banyak waktu untuk memeriksa hasil setelah setiap langkah.</p> </td> </tr> </tbody> </table> <a id="menu-11"></a> <h2>Hal Penting untuk Dicatat Saat Menggunakan Format Lain dalam Tampilan Sumber</h2> <p><strong>Selenium IDE hanya berfungsi dengan baik dengan HTML - format lain masih dalam mode eksperimental</strong> . Hal ini <strong>tidak dianjurkan</strong> untuk membuat atau mengedit tes menggunakan format lain di Sumber View karena masih banyak pekerjaan yang diperlukan untuk membuatnya stabil. Di bawah ini adalah bug yang diketahui pada versi 1.9.1.</p> <ul> <li>Anda tidak akan dapat melakukan pemutaran atau beralih kembali ke Tampilan Tabel kecuali jika Anda kembali ke HTML.</li> <li>Satu-satunya cara untuk menambahkan perintah secara aman pada kode sumber adalah dengan merekamnya.</li> <li>Saat Anda mengubah kode sumber secara manual, semuanya akan hilang saat Anda beralih ke format lain.</li> <li>Meskipun Anda dapat menyimpan kasus pengujian Anda saat berada di Source View, Selenium IDE tidak akan dapat membukanya.</li> </ul> <p><strong>Cara yang disarankan untuk mengonversi pengujian Selenese adalah dengan menggunakan opsi "Ekspor Kasus Uji Sebagai…" di bawah menu Berkas, dan bukan melalui Tampilan Sumber.</strong></p> <a id="menu-12"></a> <h2>Ringkasan</h2> <ul> <li>Skrip pengujian dapat dibuat dengan merekam atau mengetik perintah dan parameter secara manual.</li> <li>Saat membuat skrip secara manual, Firebug digunakan untuk mendapatkan pencari lokasi.</li> <li>Tombol Find digunakan untuk memeriksa apakah perintah dapat mengakses elemen yang benar.</li> <li>Tampilan Tabel menampilkan skrip uji dalam bentuk tabel sementara Tampilan Sumber menampilkannya dalam format HTML.</li> <li>Mengubah Tampilan Sumber ke format non-HTML masih bersifat eksperimental.</li> <li>Jangan gunakan Tampilan Sumber dalam membuat pengujian dalam format lain. Gunakan fitur Ekspor sebagai gantinya.</li> <li>Parameter tidak diperlukan sepanjang waktu. Itu tergantung pada perintah.</li> <li>Ada tiga jenis perintah:</li> <ul> <li>Tindakan - berinteraksi langsung dengan elemen halaman</li> <li>Accessors - "membaca" properti elemen dan menyimpannya dalam variabel</li> <li>Pernyataan - membandingkan nilai aktual dengan nilai yang diharapkan</li> </ul> <li>Pernyataan memiliki tiga jenis:</li> <ul> <li>Tegaskan - jika gagal, langkah yang berhasil tidak lagi dijalankan</li> <li>Verifikasi - jika gagal, langkah-langkah yang berhasil masih dijalankan.</li> <li>WaitFor - lolos jika kondisi yang ditentukan menjadi true dalam periode waktu tunggu; jika tidak, itu akan gagal</li> </ul> <li>Perintah yang paling umum adalah:</li> <ul> <li>Buka</li> <li>click / clickAndWait</li> <li>type / typeKeys</li> <li>verifikasiTitle / assertTitle</li> <li>verifikasiTextPresent</li> <li>verifikasiElementPresent</li> <li>verifikasiTable</li> <li>waitForPageToLoad</li> <li>waitForElementPresent</li> </ul> </ul> </div> </article> <div id="container-5533149ee6411a5f99b370c693e87966"></div> </div> </div> </div> </div> </div> <aside class="col-lg-4 sidebar sidebar--right"> <div class="widget widget-popular-posts"> <h2 class="widget-title">Pesan Populer</h2> <ul class="post-list-small"> <li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__img-holder"> <div class="thumb-container thumb-100"><a href="/8004164-126-using-modernizr" title="# 126: Menggunakan Modernizr - Trik CSS" rel="bookmark"><img src="https://cdn.css-code.org/5547423/126_using_modernizr_css-tricks.png.webp" loading="lazy" alt="# 126: Menggunakan Modernizr - Trik CSS" title="# 126: Menggunakan Modernizr - Trik CSS" class="post-list-small__img--rounded" style="width:88px;height:88px" /></a></div> </div> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8004164-126-using-modernizr" title="# 126: Menggunakan Modernizr - Trik CSS" rel="bookmark"># 126: Menggunakan Modernizr - Trik CSS 2025</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__img-holder"> <div class="thumb-container thumb-100"><a href="/8004165-12-converting-a-photoshop-mockup-part-two-episode-one" title="# 12: Mengubah Mockup Photoshop: Bagian Dua, Episode Satu - Trik CSS" rel="bookmark"><img src="https://cdn.css-code.org/4367790/12_converting_a_photoshop_mockup_part_two-_episode_one_css-tricks.png.webp" loading="lazy" alt="# 12: Mengubah Mockup Photoshop: Bagian Dua, Episode Satu - Trik CSS" title="# 12: Mengubah Mockup Photoshop: Bagian Dua, Episode Satu - Trik CSS" class="post-list-small__img--rounded" style="width:88px;height:88px" /></a></div> </div> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8004165-12-converting-a-photoshop-mockup-part-two-episode-one" title="# 12: Mengubah Mockup Photoshop: Bagian Dua, Episode Satu - Trik CSS" rel="bookmark"># 12: Mengubah Mockup Photoshop: Bagian Dua, Episode Satu - Trik CSS 2025</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__img-holder"> <div class="thumb-container thumb-100"><a href="/8004166-129-emmet-is-awesome" title="# 129: Emmet (Luar Biasa) - Trik CSS" rel="bookmark"><img src="https://cdn.css-code.org/7995719/129_emmet_is_awesome_css-tricks.png.webp" loading="lazy" alt="# 129: Emmet (Luar Biasa) - Trik CSS" title="# 129: Emmet (Luar Biasa) - Trik CSS" class="post-list-small__img--rounded" style="width:88px;height:88px" /></a></div> </div> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8004166-129-emmet-is-awesome" title="# 129: Emmet (Luar Biasa) - Trik CSS" rel="bookmark"># 129: Emmet (Luar Biasa) - Trik CSS 2025</a></h3> </div> </div> </li> </ul> </div> <div class="widget widget-popular-posts"> <h2 class="widget-title">ulasan terbaik untuk bulan</h2> <ul class="post-list-small"> <li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226039-shortest-job-first-sjf-preemptive-non-preemptive-example" title="Shortest Job First (SJF): Contoh Preemptive, Non-Preemptive" rel="bookmark">Shortest Job First (SJF): Contoh Preemptive, Non-Preemptive</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226040-process-vs-thread-whats-the-difference" title="Proses vs Benang: Apa bedanya?" rel="bookmark">Proses vs Benang: Apa bedanya?</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226041-mutex-vs-semaphore-whats-the-difference" title="Mutex vs Semaphore: Apa Bedanya?" rel="bookmark">Mutex vs Semaphore: Apa Bedanya?</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226042-ram-vs-rom-whats-the-difference" title="RAM vs ROM: Apa Bedanya?" rel="bookmark">RAM vs ROM: Apa Bedanya?</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226043-ddr3-vs-ddr4-must-know-differences" title="DDR3 vs DDR4: Harus Tahu Perbedaan" rel="bookmark">DDR3 vs DDR4: Harus Tahu Perbedaan</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226044-multithreading-vs-multiprocessing-whats-the-difference" title="Multithreading vs Multiprocessing: Apa bedanya?" rel="bookmark">Multithreading vs Multiprocessing: Apa bedanya?</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226045-paging-vs-segmentation-key-differences" title="Paging vs Segmentasi: Perbedaan Utama" rel="bookmark">Paging vs Segmentasi: Perbedaan Utama</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226046-preemptive-vs-non-preemptive-scheduling-key-differences" title="Penjadwalan Preemptive vs Non-Preemptive: Perbedaan Utama" rel="bookmark">Penjadwalan Preemptive vs Non-Preemptive: Perbedaan Utama</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226054-what-is-project-management-objectives-methodologies" title="Apa itu Manajemen Proyek? Tujuan, Metodologi" rel="bookmark">Apa itu Manajemen Proyek? Tujuan, Metodologi</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226056-project-integration-management-tutorial-definition-process-and-plan" title="Tutorial Manajemen Integrasi Proyek: Definisi, Proses & Rencana" rel="bookmark">Tutorial Manajemen Integrasi Proyek: Definisi, Proses & Rencana</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226057-project-scope-management-pmp-tutorial" title="Manajemen Lingkup Proyek: Tutorial PMP" rel="bookmark">Manajemen Lingkup Proyek: Tutorial PMP</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226058-project-cost-estimation-and-budget-management-techniques" title="Estimasi Biaya Proyek & Teknik Manajemen Anggaran" rel="bookmark">Estimasi Biaya Proyek & Teknik Manajemen Anggaran</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226059-phases-of-project-management-life-cycle" title="Tahapan Siklus Hidup Manajemen Proyek" rel="bookmark">Tahapan Siklus Hidup Manajemen Proyek</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226060-12-best-wrike-alternatives-for-project-management-in-2021" title="12 Alternatif Wrike TERBAIK untuk Manajemen Proyek pada tahun 2021" rel="bookmark">12 Alternatif Wrike TERBAIK untuk Manajemen Proyek pada tahun 2021</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226061-30-best-trello-alternatives-in-2021-freepaid" title="30 Alternatif Trello Terbaik di 2021 (Gratis / Berbayar)" rel="bookmark">30 Alternatif Trello Terbaik di 2021 (Gratis / Berbayar)</a></h3> </div> </div> </li> </ul> </div> <div id="container-5533149ee6411a5f99b370c693e87966"></div> <div class="widget widget-popular-posts"> <h2 class="widget-title">Top Artikel</h2> <ul class="post-list-small"> <li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__img-holder"> <div class="thumb-container thumb-100"><a href="/8004262-26-designing-for-wordpress-part-two" title="# 26: Mendesain untuk Wordpress: Bagian Dua - Trik CSS" rel="bookmark"><img src="https://cdn.css-code.org/6573810/26_designing_for_wordpress_part_two_css-tricks.png.webp" loading="lazy" alt="# 26: Mendesain untuk Wordpress: Bagian Dua - Trik CSS" title="# 26: Mendesain untuk Wordpress: Bagian Dua - Trik CSS" class="post-list-small__img--rounded" style="width:88px;height:88px" /></a></div> </div> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8004262-26-designing-for-wordpress-part-two" title="# 26: Mendesain untuk Wordpress: Bagian Dua - Trik CSS" rel="bookmark"># 26: Mendesain untuk Wordpress: Bagian Dua - Trik CSS 2025</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__img-holder"> <div class="thumb-container thumb-100"><a href="/8004263-201-doing-booping" title="# 201: Melakukan Booping - Trik CSS" rel="bookmark"><img src="https://cdn.css-code.org/3441568/201_doing_booping_css-tricks.png.webp" loading="lazy" alt="# 201: Melakukan Booping - Trik CSS" title="# 201: Melakukan Booping - Trik CSS" class="post-list-small__img--rounded" style="width:88px;height:88px" /></a></div> </div> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8004263-201-doing-booping" title="# 201: Melakukan Booping - Trik CSS" rel="bookmark"># 201: Melakukan Booping - Trik CSS 2025</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__img-holder"> <div class="thumb-container thumb-100"><a href="/8004264-28-using-wufoo-for-web-forms" title="# 28: Menggunakan Wufoo untuk Formulir Web - Trik CSS" rel="bookmark"><img src="https://cdn.css-code.org/6369705/28_using_wufoo_for_web_forms_css-tricks.png.webp" loading="lazy" alt="# 28: Menggunakan Wufoo untuk Formulir Web - Trik CSS" title="# 28: Menggunakan Wufoo untuk Formulir Web - Trik CSS" class="post-list-small__img--rounded" style="width:88px;height:88px" /></a></div> </div> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8004264-28-using-wufoo-for-web-forms" title="# 28: Menggunakan Wufoo untuk Formulir Web - Trik CSS" rel="bookmark"># 28: Menggunakan Wufoo untuk Formulir Web - Trik CSS 2025</a></h3> </div> </div> </li> </ul> </div> </aside> </div> </div> <footer class="footer footer--dark"> <div class="container"> <div class="footer__widgets"> <div class="row"> <div class="col-lg-4"> <div class="widget"> <h2 class="widget-title">Pesan Populer</h2> <ul class="post-list-small"> <li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003869-remove-specific-value-from-array" title="Hapus Nilai Tertentu dari Array - Trik CSS" rel="bookmark">Hapus Nilai Tertentu dari Array - Trik CSS</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003870-partial-page-refresh" title="Segarkan Halaman Parsial - Trik CSS" rel="bookmark">Segarkan Halaman Parsial - Trik CSS</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003871-searchreplace" title="Cari / Ganti - Trik CSS" rel="bookmark">Cari / Ganti - Trik CSS</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003872-run-javascript-only-after-entire-page-has-loaded" title="Jalankan JavaScript Hanya Setelah Seluruh Halaman Telah Dimuat - Trik CSS" rel="bookmark">Jalankan JavaScript Hanya Setelah Seluruh Halaman Telah Dimuat - Trik CSS</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003873-select-element-only-if-children-are-not-animated" title="Pilih Elemen Hanya jika Anak-anak Tidak Dianimasikan - Trik CSS" rel="bookmark">Pilih Elemen Hanya jika Anak-anak Tidak Dianimasikan - Trik CSS</a></h3> </div> </div> </li> </ul> </div> </div> <div class="col-lg-4"> <div class="widget"> <h2 class="widget-title">Pilihan Editor</h2> <ul class="post-list-small"> <li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003714-css-for-when-javascript-is-enabled" title="CSS saat JavaScript Diaktifkan - Trik CSS" rel="bookmark">CSS saat JavaScript Diaktifkan - Trik CSS</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003715-current-page-with-javascript" title="Halaman Saat Ini dengan JavaScript - Trik CSS" rel="bookmark">Halaman Saat Ini dengan JavaScript - Trik CSS</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003716-default-arguments-for-functions" title="Argumen Default untuk Fungsi - Trik CSS" rel="bookmark">Argumen Default untuk Fungsi - Trik CSS</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003717-detect-javascript-onoff-with-notification" title="Deteksi Javascript On / Off, Dengan Pemberitahuan - Trik CSS" rel="bookmark">Deteksi Javascript On / Off, Dengan Pemberitahuan - Trik CSS</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003718-different-stylesheets-for-different-days-of-the-week" title="Stylesheet Berbeda untuk Hari Berbeda dalam Seminggu - Trik CSS" rel="bookmark">Stylesheet Berbeda untuk Hari Berbeda dalam Seminggu - Trik CSS</a></h3> </div> </div> </li> </ul> </div> </div> <div class="col-lg-4"> <div class="widget"> <h2 class="widget-title">Top Artikel</h2> <ul class="post-list-small"> <li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8004094-include-jquery-in-wordpress-theme" title="Sertakan jQuery di Tema WordPress - Trik CSS" rel="bookmark">Sertakan jQuery di Tema WordPress - Trik CSS</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8004095-natural-sort-using-post-meta-key" title="Sortir Alami Menggunakan meta_key Posting - Trik CSS" rel="bookmark">Sortir Alami Menggunakan meta_key Posting - Trik CSS</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8004096-move-wordpress-admin-bar-to-the-bottom" title="Pindahkan Admin Bar WordPress ke Bawah - Trik CSS" rel="bookmark">Pindahkan Admin Bar WordPress ke Bawah - Trik CSS</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8004097-output-excerpt-manually" title="Output Excerpt Secara Manual - Trik CSS" rel="bookmark">Output Excerpt Secara Manual - Trik CSS</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8004098-make-archives-php-include-custom-post-types" title="Buat Archives.php Sertakan Jenis Posting Kustom - Trik CSS" rel="bookmark">Buat Archives.php Sertakan Jenis Posting Kustom - Trik CSS</a></h3> </div> </div> </li> </ul> </div> </div> </div> <p>© Copyright id.css-code.org, 2025 Februari | <a href="https://id.css-code.org/about-site" title="Tentang situs">Tentang situs</a> | <a href="https://id.css-code.org/contacts" title="Kontak">Kontak</a> | <a href="https://id.css-code.org/privacy-policy" title="Rahasia pribadi">Rahasia pribadi</a>. </p> </div> </div> </footer> <link href="https://css-code.org/template/css/style.min.css" rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'" /> </body> </html>