Dalam Model Objek Halaman apakah semua kelas perlu berbagi satu contoh driver?

Dec 19 2020

Saya dapat membuat file BaseTest.java dan mendeklarasikan driver WebDriver statis Publik; di dalamnya. Kemudian semua kelas dapat memperluas dan menggunakan referensi driver yang sama.

Kemudian semua kelas pengujian saya dapat menggunakan contoh yang sama.

Dapatkah saya menggunakan:

driver = new ChromeDriver(); 

dalam setiap metode pengujian atau skenario Mentimun. Saya bingung bagaimana cara menggunakan driver. Apakah pengemudi sesi jendela chrome?

Jawaban

2 JoãoFarias Dec 19 2020 at 16:31

Apakah pengemudi sesi jendela chrome?

Tidak. ChromeDriver mewakili server daripada mengontrol browser Chrome yang berjalan secara lokal. Server akan mengontrol siklus hidup browser, seperti inisiasi, mematikan, dan mengontrol tindakan.

Untuk lebih jelasnya, lihat dokumen

Dapatkah saya membuat driver = new ChromeDriver (); dalam setiap metode pengujian atau skenario Mentimun

Ya, tetapi itu akan tergantung pada konteks Anda. Jika Anda ingin menjalankan beberapa browser secara independen dalam beberapa tindakan, Anda dapat membuat driver baru.

Bonus:

Saya dapat membuat file BaseTest.java dan mendeklarasikan driver WebDriver statis Publik; di dalamnya. Kemudian semua kelas dapat memperluas dan menggunakan referensi driver yang sama.

Ini mungkin berbahaya. Inherantance adalah bentuk penggabungan terkuat yang dapat Anda buat dan memiliki variabel global dapat menyebabkan perubahan perilaku sangat sulit untuk dipahami. Anda mungkin ingin merefaktor kode Anda sehingga instans Driver akan dimasukkan ke dalam Objek Halaman Anda . Dengan cara ini Anda tidak menggabungkan Objek Halaman ke variabel global dan Anda dapat dengan mudah membuat pengujian unit untuk mereka dengan memasukkan pengujian ganda untuk Driver.

2 PDHide Dec 19 2020 at 19:39

Apa itu chromedriver:

chromedriver memiliki kode yang dapat berinteraksi dengan browser. Perintah ini diekspos melalui API (Ini yang Anda lihat saat chromedriver dimulai di localhost: 14563). Dari kode kami mengakses titik akhir api ini untuk memberi tahu pengemudi chrome untuk melakukan sesuatu.

Contoh, saat Anda mengucapkan elem.click (), selenium berbicara ke API dan memberi tahu chromedriver untuk mengklik elem yang ditentukan di browser. Dan driver chrome melakukannya dan mengembalikan respons dari browser dan mengembalikannya ke kode keluar

Mengapa kita membutuhkan kelas dasar

Ini untuk memastikan sesi driver diteruskan di antara kelas yang berbeda. Jika tidak, Anda tidak akan dapat melakukan sesuatu seperti

   page1.sendpassword()
   page1.sendusername()
   page1.submit()
   page2.adduser()

Karena jika Anda memiliki sesi driver yang berbeda untuk halaman1 dan halaman2,

kemudian setelah Anda memulai halaman2. adduser () driver chrome akan dimulai baru dan sesi login Anda sebelumnya tidak akan tersedia sehingga Anda harus masuk lagi

Anda juga tidak dapat menambahkan screenshot atau tindakan khusus driver di kelas listener untuk pelaporan

Anda dapat membaca lebih lanjut tentang kelas dasar di:

Apa tujuan membuat kelas BaseTest yang mendeklarasikan objek WebDriver statis global dalam kerangka POM?

AlexeyR. Dec 19 2020 at 16:33

Instance WebDriver dalam kode Anda adalah jenis saluran yang Anda gunakan untuk berinteraksi dengan satu sesi implementasi driver web. Pada dasarnya apa yang Anda gunakan dalam kode Anda disebut pengikatan klien .

WebDriver adalah server HTTP yang mengekspos REST API ke pengikatan klien Anda (misalnya pustaka Java) di satu sisi dan dapat mengontrol browser di sisi lain.

Jadi semua kode Anda yang diasumsikan bekerja dengan sesi chrome yang sama (mempertahankan cookie, dll.) Harus berbagi contoh web driver yang sama.

Tidak ada yang menghentikan Anda untuk membuat satu penyelam lagi dalam kode Anda. Melalui contoh baru itu, Anda akan mendapatkan kendali atas sesi browser terisolasi paralel yang berbeda.