Ini adalah masalah umum. Saya akan memperhatikan:
Bagaimana Anda menyebutkan elemen
Gunakan id atau kelas css untuk mengidentifikasi elemen. Favour menggunakan ID CSS saat objek unik. Pertimbangkan kerangka kerja yang Anda gunakan, misalnya dengan Ruby on Rails, name
atribut ditetapkan secara otomatis dan dapat (non-intuitif) lebih baik daripada menggunakan css id atau kelas
Bagaimana Anda mengidentifikasi elemen.
Hindari pengidentifikasi posisi seperti yang table/tr/td/td
mendukung formulir seperti td[id="main_vehicle"
atau td[class='alternates']
. Pertimbangkan untuk menggunakan atribut data bila perlu. Bahkan lebih baik mencoba untuk menghindari tag tata letak seperti <td>
semuanya jadi untuk di atas Anda bisa menambahkan span dan menggunakannya, misalnya <span id="main_vehicle">
atau pemilih wildcard seperti di *[id="main_vehicle"]
mana *
sekarang bisa menjadi div, span, td, dll.
Menggunakan uji atribut data spesifik yang hanya digunakan untuk qa dan pengujian.
Hindari kualifikasi yang tidak perlu untuk elemen. Anda mungkin menemukan diri Anda menggunakan yang berikut ini:
body.main div#vehicles > form#vehicle input#primary_vehicle_name
Namun ini mengharuskan bidang input untuk tetap dalam bentuk dengan id kendaraan yang tepat dan pada halaman dengan tubuh yang memiliki kelas utama dan div dengan id kendaraan yang memiliki anak langsung dari bentuk dengan id dari kendaraan. Setiap perubahan pada salah satu dari struktur itu dan tes rusak Dalam hal ini Anda mungkin menemukan itu
input#primary_vehicle_name
cukup untuk mengidentifikasi elemen secara unik.
Hindari tes yang merujuk pada teks yang terlihat. Teks pada halaman yang ditampilkan kepada pengguna biasanya berubah seiring berjalannya waktu ketika situs tersebut dikelola dan diperbarui, jadi gunakan pengidentifikasi seperti css id dan css class atau atribut data. Elemen seperti form
, input
dan select
digunakan dalam bentuk juga merupakan bagian yang baik dari elemen pengidentifikasi, biasanya dalam kombinasi dengan id atau kelas, misalnya li.vehicle
atau input#first-vehicle
Anda juga dapat menambahkan pengidentifikasi Anda sendiri, misalnya <div data-vehicle='dodge'>
. Dengan cara ini Anda dapat menghindari penggunaan ID elemen atau kelas, yang kemungkinan akan diubah oleh pengembang dan perancang. Saya sebenarnya menemukan dari waktu ke waktu bahwa lebih baik bekerja dengan pengembang dan desainer dan mencapai kesepakatan atas nama dan cakupan. Itu susah.
Bagaimana data tetap dipertahankan.
Mirip dengan mengidentifikasi elemen yang sebenarnya, cobalah untuk menghindari nilai identifikasi selektor kode in-line yang mendukung objek halaman - potongan kecil teks yang disimpan dalam variabel atau metode dan dengan demikian dapat digunakan kembali dan juga dipelihara secara terpusat. Contoh variabel javascript yang mengikuti pola ini untuk nilai hard-coded:
storedVars["eqv_auto_year"] = "2015";
storedVars["eqv_auto_make_1"] = "ALFA ROMEO";
storedVars["eqv_auto_make_2"] = "HONDA";`
Lebih banyak pada objek halaman di selenium wiki dan selenium docs
Komunikasi dengan pengembang.
Terlepas dari pendekatan teknis dalam hal 'pengembang melakukan perubahan dan memutus otomatisasi QA' yang merupakan masalah alur kerja. Anda perlu memastikan bahwa: semua orang adalah satu tim yang sama; pengembang menjalankan tes terintegrasi yang sama; standar disepakati dan diikuti oleh kedua kelompok; definisi yang dilakukan mencakup menjalankan dan mungkin memperbarui tes UI; pengembang dan pasangan penguji pada rencana pengujian dan keduanya menghadiri perawatan tiket (jika melakukan Agile) dan berbicara tentang pengujian UI sebagai bagian dari perawatan. Anda harus memastikan bahwa pendekatan dan strategi apa pun yang Anda gunakan untuk penamaan dikoordinasikan dengan pengembang aplikasi. Jika Anda tidak masuk ke halaman yang sama, Anda akan menyukai clash over penamaan objek. Beberapa contoh metode objek halaman yang baru-baru ini saya buat untuk proyek ruby:
def css_email_opt_in_true
'auto_policy[email_opt_in][value=1]'
end
def css_phone_opt_in
'*[name="auto_policy[phone_opt_in]"]'
end
def css_phone_opt_in_true
'input[name=phone_opt_in][value=true]'
end
def css_credit_rating
'auto_policy[credit_rating]'
end
Berikut objek halaman yang sama dengan variabel javascript:
storedVars["css_email_opt_in"] = "css=*[name='auto_policy[email_opt_in]']";
storedVars["css_phone_opt_in"]="css=*[name='auto_policy[phone_opt_in]']";
storedVars["css_phone_opt_in_true"]="css=input[name='phone_opt_in'][value=true]";
storedVars["css_credit_rating"]="css=select[name='auto_policy[credit_rating]']";