Rumah > Artikel > hujung hadapan web > Cara Menulis dan Mengendalikan XPath Dinamik Dalam Selenium [dengan Taktik]
Adalah penting untuk ujian automatik dapat mengenali elemen web bagi Aplikasi Dalam Ujian (AUT). Mempelajari cara mencari elemen web dan menulis XPath dinamik dalam Selenium secara manual mungkin mengambil masa yang lama dan banyak latihan.
Sebagai contoh, kami akan menunjukkan kepada anda cara mencari elemen web secara manual dan mudah dalam Selenium menggunakan XPath.
Pencari ialah salah satu ciri berharga Selenium. Mereka membolehkan kami mencari elemen web. Contohnya, jika pencari seperti id, nama kelas, nama, teks pautan, dsb., tidak menemui elemen web, kami menggunakan XPath untuk mencarinya di halaman web.
XPath, juga dikenali sebagai Laluan XML, ialah salah satu pengesan Selenium WebDriver yang paling biasa digunakan untuk menavigasi melalui struktur HTML halaman. Ia boleh digunakan untuk mencari sebarang elemen dalam halaman web menggunakan struktur DOM HTML dalam dokumen HTML dan XML.
XPath bertujuan untuk membenarkan navigasi dokumen XML memilih elemen individu, atribut atau bahagian lain dokumen XML untuk pemprosesan tertentu. Contohnya, XPath menjana pencari yang boleh dipercayai, tetapi ia lebih perlahan dari segi prestasi berbanding Pemilih CSS.
Bahasa XPath digunakan untuk memilih elemen dalam halaman HTML. Menggunakan XPath, anda boleh mencari sebarang elemen pada halaman berdasarkan nama tegnya, ID, kelas CSS dan sebagainya. Dalam Selenium, terdapat dua jenis XPath.
Ini adalah cara paling langsung untuk mencari elemen, tetapi kelemahan "XPath mutlak" ialah jika laluan elemen berubah, XPath tertentu itu gagal.
Ciri kritikal XPath ialah ia bermula dengan satu garis miring ke hadapan (/), menunjukkan bahawa anda boleh memilih elemen daripada nod akar menggunakan Dynamic XPath.
Xpath relatif ialah satu laluan di mana laluan bermula pada nod pilihan anda dan bukannya nod akar.
Faedah menggunakan XPath relatif ialah anda tidak perlu menentukan keseluruhan XPath; sebaliknya, anda boleh bermula di tengah atau di suatu tempat di antaranya.
*Kelemahan: *
Mengenal pasti elemen akan mengambil masa yang lebih lama kerana kami menentukan laluan separa dan bukannya laluan yang tepat.
Jika berbilang elemen berada pada laluan yang sama, ia akan memilih elemen pertama yang dikenal pasti.
Daripada nod konteks (semasa), paksi XPath mencari nod yang berbeza dalam dokumen XML. Contohnya, ia digunakan untuk mencari nod yang paling hampir dengan pokok itu.
Paksi XPath ialah kaedah untuk mencari elemen dinamik yang mustahil ditemui menggunakan kaedah XPath standard yang tidak termasuk ID, Nama Kelas, Nama atau pengecam lain.
Kaedah paksi digunakan untuk mencari elemen yang berubah secara dinamik akibat penyegaran atau operasi lain. Contohnya, kaedah anak, ibu bapa, moyang, adik beradik, sebelumnya, diri sendiri dan kaedah paksi lain biasanya digunakan dalam Selenium Webdriver.
Mereka mengubah suai skrip ujian apabila perubahan AUT merupakan salah satu tugas yang paling kompleks dan memakan masa dalam automasi ujian, terutamanya pada peringkat awal pembangunan perisian.
Akibatnya, pembangun mungkin kerap menukar pengecam dan elemen daripada satu binaan kepada yang lain. Tambahan pula, elemen AUT mungkin berubah secara dinamik semasa pelaksanaan.
Untuk menangani isu ini, penguji automasi tidak seharusnya menetapkan XPath tetap untuk elemen kes ujian tetapi sebaliknya menskrip XPath secara dinamik berdasarkan corak tertentu.
Berikut ialah 11 cara unik dan berbeza untuk mencipta XPath dinamik dalam selenium:
cloud-cta-peranti-sebenar.jpg
Mekanisme ini juga dikenali sebagai penemuan elemen XPath Mutlak.
Sintaks:
html/body/div[1]/div[2]/div[2]/div[1]/form/div[1]/div/div[1]/div/div/input[1]
Tanda miring tunggal digunakan untuk mencipta XPath dengan laluan mutlak, iaitu, XPath direka bentuk untuk memulakan pemilihan daripada nod dokumen/nod mula/nod induk.
Mekanisme ini juga dirujuk sebagai elemen mencari dengan XPath Relatif.
Seratan berganda digunakan untuk mencipta XPath dengan laluan relatif, yang bermaksud XPath boleh memulakan pemilihan dari mana-mana sahaja dalam dokumen. Kemudian, cari rentetan sebelumnya merentas seluruh halaman (DOM).
Sintaks
//form/div[1]/div/div[1]/div/div/input[1]
Sintaks boleh ditulis dalam dua cara, seperti yang ditunjukkan di bawah. Kemasukan atau pengecualian Tag HTML. Jika anda ingin mengecualikan teg HTML, anda mesti menggunakan *.
Sintaks
//[@attribute_name='attribute_value']
atau
//*[@attribute_name='attribute_value']
Sintaks
//[@attribute_name1='attribute_value1'][@attribute_name2='attribute_value2]
atau
//*[@attribute_name1='attribute_value1'][@attribute_name2='attribute_value2]
Sintaks
//[@attribute_name1='attribute_value1' dan @attribute_name2='attribute_value2]
atau
//*[@attribute_name1='attribute_value1' dan @attribute_name2='attribute_value2]
Sintaks
//[@attribute_name1='attribute_value1' atau @attribute_name2='attribute_value2]
atau
//*[@attribute_name1='attribute_value1' atau @attribute_name2='attribute_value2]
Mengandungi() ialah kaedah untuk mengenal pasti elemen yang berubah secara dinamik dan apabila biasa dengan beberapa bahagian nilai atribut elemen.
Apabila biasa dengan nilai atribut elemen (bermula dengan teks yang ditentukan), kita boleh menggunakan kaedah mula-dengan() untuk mengenal pastinya.
sintaks
//[mengandungi(@nama_atribut,'nilai_atribut')]
atau
//*[mengandungi(@attribute_name,'attribute_value')]
Mekanisme ini digunakan untuk mencari elemen berdasarkan teks halaman web.
Last() memilih elemen terakhir (daripada jenis yang ditentukan) daripada semua elemen input.
Sintaks
//[text()='Pandangan baharu untuk log masuk akan datang tidak lama lagi']
atau
//[text()='Pandangan baharu untuk log masuk akan datang tidak lama lagi']
Elemen dipilih daripada semua elemen input berdasarkan nombor kedudukan yang disediakan.
Dalam XPath berikut, [@type=’text’] akan mencari medan teks dan fungsi [position()=2] akan mengenal pasti medan teks dalam kedudukan kedua dari atas.
Sintaks
findElement(By.xpath("(//input[@type='text'])[position()=2]"))
atau
findElement(By.xpath("(//input[@type='text'])[2]"))
Kita boleh sampai ke elemen ke-n dengan meletakkan kedudukan indeks dalam kurungan segi empat sama. Kemudian, kami dapat mengenal pasti medan Nama Akhir menggunakan XPath di bawah.
Sintaks
findElement(By.xpath("//label[2]"))
Kecuali untuk nenek moyang, nod atribut dan nod ruang nama, ini memilih semua nod yang muncul sebelum nod semasa dalam dokumen.
WebElement select = driver.findElement(By.id(“jantina”));
Pilihan senarai = select.findElements(By.tagName(“Lelaki”));
untuk (pilihan Elemen Web : pilihan) {
if(“Jerman”.equals(option.getText()))
option.click();
menggunakan selectByValue()
Pilih kotak senarai = Pilih baharu(pemandu.
kotak senarai.
Pilih kotak senarai = baru Pilih(pemandu.
Pilihan WebElement = listbox.getFirstSelectedOption();
System.out.println(option.getText()); //mencetak pilihan yang dipilih.
//Menyenaraikan semua pilihan yang dipilih.
//Menyenaraikan semua pilihan.
Elemen dinamik ialah Elemen Web yang IDnya dan bukan hanya ID, tetapi sebarang atribut seperti Nama Kelas, Nilai dan sebagainya, tidak tetap.
Oleh itu, setiap kali anda memuat semula halaman, ia berubah. Akibatnya, anda tidak boleh mengendalikan elemen itu semata-mata melalui pengesan.
Sebagai contoh, nama kelas elemen Peti Masuk Gmail berubah dengan setiap log masuk.
Elemen dinamik dipacu pangkalan data atau dipacu sesi Apabila anda menukar elemen pangkalan data, ia mempengaruhi beberapa kawasan aplikasi yang sedang diuji.
Elemen dinamik adalah benar-benar kandungan, dengan pemformatan dibentangkan dalam reka bentuk. Kotak teks dan butang biasanya digunakan dengan pengecam dinamik.
Apabila anda mengautomasikan tapak web dinamik, skrip akan pecah sebaik sahaja kandungan berubah, menyebabkan ujian anda gagal. Kemudian anda perlu mengemas kini kes ujian anda setiap kali, yang merupakan tugas yang memakan masa.
Kita mesti sentiasa memahami bagaimana elemen ini bertindak apabila halaman dimuat semula atau sesi baharu dimulakan. Kami boleh menyediakan strategi untuk berinteraksi dengan elemen ini setelah kami memahaminya.
Sama seperti pemilih pautan separa dalam Selenium, kami boleh menggunakan carian Xpath dengan elemen padanan Teks permulaan.
Semua nod yang mengikuti nod konteks disenaraikan di bawah. Kita boleh menggunakan 'yang berikut' untuk menentukan elemen yang disenaraikan di bawah dalam senarai elemen web.
Beberapa elemen dinamik mengandungi nilai statik; berdasarkan nilai tersebut; kita boleh mencari elemen tersebut menggunakan fungsi 'mengandungi'. Sebagai contoh, terdapat rentetan statik 'Hstpl-12345' dalam nama kelas butang HTML di atas. Sebagai contoh, kita boleh menggunakan XPath untuk mencari elemen butang dengan nama kelas yang mengandungi perkataan 'Hstpl.'
Apabila terdapat berbilang elemen dalam DOM dengan atribut yang serupa, ia boleh menjadi mencabar untuk mencarinya, terutamanya apabila ia dinamik.
Sebagai contoh, katakan terdapat sepuluh butang pada halaman, dan anda ingin mencari yang kelima. Kemudian kami mencari elemen dengan teg ‘butang’ dan pergi ke indeks kelima senarai butang untuk mencari elemen tersebut.
Xpath Mutlak menggunakan keseluruhan laluan daripada Elemen Akar kepada elemen tertentu. Seperti yang ditunjukkan di bawah, Xpath mutlak bermula dengan HTML dan garis miring ke hadapan (/). Untuk menjana Xpaths, gunakan laluan api (firebug).
Walau bagaimanapun, mereka lebih cenderung kepada regresi kerana perubahan kecil dalam DOM menyebabkannya tidak betul atau merujuk kepada elemen lain.
Oleh itu, menggunakan Xpath mutlak tidak dianggap sebagai amalan terbaik dalam kebanyakan kes, tetapi ia menyelesaikan masalah elemen Dinamik.
Kaedah lain untuk mengendalikan elemen dinamik ialah mencari semua elemen dengan nama Teg yang sama dan kemudian mencari elemen yang diperlukan berdasarkan sama ada ia mengandungi teks, nilai atau atribut elemen.
Artikel ini menunjukkan cara menggunakan fungsi XPath mengandungi(), bermula-dengan(), dan teks() dengan atribut dan teks untuk mengenal pasti elemen secara unik dalam struktur DOM HTML.
Dalam Selenium, XPath digunakan untuk mencari elemen apabila pencari lain gagal. Terdapat dua jenis Selenium XPath: Absolute XPath dan Relative XPath.
Sumber: Artikel ini pada asalnya diterbitkan di testgrid.io.
Atas ialah kandungan terperinci Cara Menulis dan Mengendalikan XPath Dinamik Dalam Selenium [dengan Taktik]. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!