Sebelum ini dalam siri ini telah memberi anda pendedahan tentang konsep asas dalam ujian Selenium.Walau bagaimanapun, dalam blog ini, saya akan memberitahu anda bagaimana menggunakan kerangka Selenium untuk mengoptimumkan struktur kod anda dan ini akan menjadikan anda lebih dekat untuk menjadi .
Apakah kerangka Selenium?
Selenium framework adalah struktur kod untuk menjadikan penyelenggaraan kod lebih mudah, dan pembacaan kod menjadi lebih baik. Kerangka kerja melibatkan pemecahan keseluruhan kod menjadi kepingan kod yang lebih kecil, yang menguji fungsi tertentu.
Kod ini disusun sedemikian rupa sehingga, 'set data' dipisahkan dari 'case test' yang sebenarnya yang akan menguji kefungsian aplikasi web. Ini juga dapat disusun dengan cara di mana, kes ujian yang perlu dijalankan disebut (dipanggil) dari aplikasi luaran (seperti .csv).
Terdapat sejumlah kerangka di luar sana, tetapi 3 kerangka Selenium yang biasa digunakan adalah:
Rangka kerja ini akan dibincangkan dengan demo di blog ini. Tetapi sebelum melangkah lebih jauh, izinkan saya memberitahu anda mengapa kerangka Selenium perlu dibuat, dan apa faedah yang akan anda dapat daripada menggunakannya.
Mengapa kita memerlukan kerangka Selenium?
Tanpa kerangka kerja yang ada, akan ada satu kes ujian yang merangkumi keseluruhan fungsi ujian. Bahagian yang menakutkan adalah, kes ujian tunggal ini mempunyai keupayaan untuk meningkat hingga sejuta baris kod. Oleh itu, sangat jelas bahawa kes ujian yang begitu besar akan sukar dibaca. Walaupun anda mahu mengubah fungsi apa-apa kemudian, anda akan mengalami kesukaran untuk mengubah kodnya.
apa yang dilakukan oleh .innerhtml
Sejak pelaksanaan kerangka kerja, akan menghasilkan potongan kode yang lebih kecil tetapi banyak, ada pelbagai manfaat.
Faedah kerangka Selenium
- Peningkatan penggunaan semula kod
- Pembacaan kod yang lebih baik
- Kemudahalihan yang lebih tinggi
- Skrip yang dikurangkanpenyelenggaraan
Sekarang setelah anda mengetahui asas-asas kerangka kerja, izinkan saya menerangkan masing-masing secara terperinci.
Rangka Kerja Berdasarkan Data
Kerangka Data Driven di Selenium adalah teknik memisahkan 'set data' dari 'case test' sebenarnya (kod). Kerangka ini bergantung sepenuhnya pada data ujian input. Data ujian diberi dari sumber luaran seperti fail excel, file .CSV atau pangkalan data mana pun.
Oleh kerana kes ujian dipisahkan dari kumpulan data, kami dapat dengan mudah mengubah kes ujian fungsi tertentu tanpa membuat perubahan pada kod anda secara besar-besaran. Sebagai contoh, jika anda ingin mengubah kod untuk fungsi log masuk, maka anda boleh mengubahnya bukan perlu mengubah bahagian lain yang bergantung pada kod yang sama.
Selain itu, anda juga dapat dengan mudah mengawal berapa banyak data yang perlu diuji. Anda boleh menambah bilangan parameter ujian dengan menambahkan lebih banyak medan nama pengguna dan kata laluan ke fail excel (atau sumber lain).
Sebagai contoh, jika saya harus memeriksa log masuk ke laman web, maka saya dapat menyimpan set kredensial nama pengguna dan kata laluan dalam fail excel dan meneruskan kelayakan ke kod untuk melakukan automasi pada penyemak imbas dalam fail kelas Java yang terpisah.
Menggunakan Apache POI Dengan Selenium WebDriver
WebDriver tidak secara langsung menyokong pembacaan fail excel. Oleh itu kami menggunakan POI Apache untuk membaca / menulis ke mana-mana dokumen pejabat Microsoft. Anda boleh memuat turun Apache POI (set fail JAR) dari di sini . Muat turun fail zip atau fail tar mengikut keperluan anda dan letakkan bersama dengan set Selenium JARs.
Penyelarasan antara kod utama dan set data akan dijaga oleh Penyedia Data TestNG, yang merupakan perpustakaan yang terdapat sebagai sebahagian daripada fail Apache POI JAR. Untuk tujuan demo, saya telah membuat fail excel yang disebut 'LoginCredentials' di mana nama pengguna dan kata laluan telah disimpan di lajur yang berbeza.
iteratif fibonacci c ++
Lihat kod di bawah untuk memahami kes ujian. Ini adalah kod mudah untuk menguji fungsi masuk aplikasi tempahan penerbangan.
pakej DataDriven import org.openqa.selenium.Dengan import org.openqa.selenium.chrome.ChromeDriver import org.testng.Asert import org.testng.annotations.AfterM Method import org.testng.annotations.DataProvider import org.testng.annotations.Test kelas awam DDTExcel {ChromeDriver driver @Test (dataProvider = 'testdata') public void DemoProject (String username, String password) membuang InterruptException {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = driver.get ChromeDriver () baru ('http://newtours.demoaut.com/') driver.findElement (By.name ('userName')). sendKeys (nama pengguna) driver.findElement (By.name ('kata laluan') send.eys (kata laluan) driver.findElement (By.name ('login')). klik () Thread.sleep (5000) Assert.assertTrue (driver.getTitle (). match ('Cari Penerbangan: Mercury Tours: '),' Kelayakan tidak sah ') System.out.println (' Login berjaya ')} @AfterMethod void ProgramTermination () {driver.quit ()} @DataProvider (name =' testdata ') objek awam [] [] TestDa taFeed () {ReadExcelFile config = ReadExcelFile baru ('C: UsersVardhanworkspaceSeleniumLoginCredentials.xlsx') int rows = config.getRowCount (0) Object [] [] credentials = new Object [baris] [2] untuk (int i = 0iSekiranya anda perhatikan dari atas, kami mempunyai kaedah bernama 'TestDataFeed ()'. Dalam kaedah ini, saya telah membuat contoh objek dari kelas lain bernama 'ReadExcelFile'. Semasa membuat objek ini, saya telah memasukkan jalan fail excel saya yang mengandungi data. Saya telah mendefinisikan lebih lanjut untuk loop untuk mengambil teks dari buku kerja excel.
Tetapi, untuk membaca data dari nombor lembaran, nombor lajur dan nombor baris tertentu, panggilan dibuat ke kelas 'ReadExcelFile'. Kod 'ReadExcelFile' saya ada di bawah.
pakej DataDriven import java.io.File import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook kelas awam ReadExcelFile {XSSFWorkbook wb XSSFSheet excelPath) {cubalah {File src = new File (excelPath) FileInputStream fis = new FileInputStream (src) wb = new XSSFWorkbook (fis)} tangkapan (Pengecualian e) {System.out.println (e.getMessage ())}} awam String getData (int sheetnumber, int baris, int column) {sheet = wb.getSheetAt (sheetnumber) String data = sheet.getRow (baris) .getCell (column) .getStringCellValue () return data} public int getRowCount (int sheetIndex) { int baris = wb.getSheetAt (sheetIndex) .getLastRowNum () baris = baris + 1 baris kembali}}Perhatikan dahulu perpustakaan yang telah saya import. Saya telah mengimport Apache POI XSSF perpustakaan yang digunakan untuk membaca / menulis data untuk unggul fail. Di sini, saya telah membuat konstruktor (objek dengan kaedah yang sama) untuk melepasi nilai: nombor helaian, nombor baris dan nombor lajur. Untuk memahami kerangka ini dengan lebih baik, saya meminta anda untuk membaca video di bawah ini, di mana saya telah menerangkannya secara tersusun.
Rangka Kerja Berdasarkan Data Dalam Selenium WebDriver | Tutorial Selenium
Sekarang mari kita beralih ke kerangka kerja, iaitu kerangka berdasarkan kata kunci.
Rangka Kerja Didorong Kata Kunci
Kerangka kata kunci didorong adalah teknik di mana semua operasi & arahan yang akan dilakukan ditulis secara berasingan dari kes ujian sebenar. Persamaannya dengan kerangka Data Driven adalah bahawa, operasi yang akan dilakukan sekali lagi disimpan dalam fail luaran seperti lembaran Excel.
Operasi yang saya bicarakan hanyalah kaedah yang perlu dijalankan sebagai sebahagian daripada kes ujian. Keuntungan dengan kerangka Kata Kunci adalah anda dapat mengawal fungsi yang ingin anda uji dengan mudah. Anda boleh menentukan kaedah yang menguji fungsi aplikasi dalam fail excel. Oleh itu, hanya nama kaedah yang dinyatakan dalam excel yang akan diuji.
Sebagai contoh, untuk masuk ke aplikasi web, kita dapat menulis beberapa kaedah dalam kes ujian utama, di mana setiap kes ujian akan menguji fungsi tertentu. Untuk menunjukkan pemacu penyemak imbas mungkin ada satu kaedah, untuk mencari bidang nama pengguna & kata laluan, mungkin ada kaedah, untuk menavigasi ke laman web mungkin ada kaedah lain, dll.
Lihat kod di bawah ini untuk memahami bagaimana kerangka itu kelihatan. Garis yang dikomentari dalam kod di bawah berfungsi sebagai penjelasan jika anda tidak faham.
kata kunci pakejDriven import org.openqa.selenium.chrome.ChromeDriver import org.testng.Asert import org.testng.annotations.Test import java.util.concurrent.TimeUnit import org.openqa.selenium.Boleh import org.openqa.selenium.WebDriver public class Actions {public static WebDriver driver public static void openBrowser () {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = ChromeDriver baru ()} awam statik kekosongan menavigasi () {pemandu .manage (). timeout (). implisitlyWait (10, TimeUnit.SECONDS) driver.get ('http://newtours.demoaut.com')} public static void input_Username () {driver.findElement (By.name (' userName ')). sendKeys (' mercury ')} public static void input_Password () {driver.findElement (By.name (' password ')). sendKeys (' mercury ')} public static void click_Login () {driver.findElement (By.name ('login')). Klik ()} @ Uji kekosongan statik awam verifikasi_login () {String pageTitle = driver.getTitle () Assert.assertEquals (pageTitle, 'Find a Flight: Mercury Tours : ')} public static void closeBrowser () {driver.quit ()}}Seperti yang anda lihat, fungsi yang berbeza yang perlu diuji terdapat dalam kaedah terpisah yang menunggu untuk dipanggil. Sekarang, kaedah ini akan dipanggil dari Kelas lain, berdasarkan kehadiran nama kaedah dalam fail excel. Begitu juga, untuk membaca fail excel, dan menghantar kembali hasilnya, saya telah menulis Kelas yang lain. Kedua-duanya dipaparkan di bawah.
Fail kelas menggunakan kaedah, adakah ini.
pakej KeywordDriven kelas awam DriverScript {public static void main (String [] args) membuang Pengecualian {// Menyatakan jalan fail Excel dengan nama fail Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Di sini kita melewati jalan Excel dan SheetName sebagai argumen untuk berhubung dengan fail Excel ReadExcelData.setExcelFile (sPath, 'Sheet1') // Nilai kod keras digunakan untuk baris & lajur Excel buat masa ini // Nilai kod keras digunakan untuk baris Excel & lajur untuk sekarang // Pada bab-bab kemudian kita akan mengganti nilai-nilai kod keras ini dengan varibales // Inilah gelung untuk membaca nilai lajur 3 (Kata Kunci Tindakan) baris demi baris untuk (int iRow = 1iRow<=7iRow++) { String sActions = ReadExcelData.getCellData(iRow, 1) //Comparing the value of Excel cell with all the keywords in the 'Actions' class if(sActions.equals('openBrowser')) { //This will execute if the excel cell value is 'openBrowser' //Action Keyword is called here to perform action Actions.openBrowser() } else if(sActions.equals('navigate')) { Actions.navigate() } else if(sActions.equals('input_Username')) { Actions.input_Username() } else if(sActions.equals('input_Password')) { Actions.input_Password() } else if(sActions.equals('click_Login')) { Actions.click_Login() } else if(sActions.equals('verify_Login')) { Actions.verify_login() } else if(sActions.equals('closeBrowser')) { Actions.closeBrowser() } } } }Dan fail kelas yang membaca nilai Excel adalah ini.
system.exit (0)pakej Kata KunciDriven import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook import org.apache.poi.xssf.usermodel.XSSFCell kelas awam BacaExcel XSSFSheet ExcelWSheet statik peribadi XSSFWorkbook ExcelWBook statik persendirian XSSFCell Cell // Kaedah ini adalah untuk menetapkan laluan Fail dan membuka fail Excel // Lulus Excel Path dan SheetName sebagai Argumen kepada kaedah ini awam static void setExcelFile (String Path, String SheetName) melempar Pengecualian {FileInputStream ExcelFile = baru FileInputStream (Path) ExcelWBook = XSSFWorkbook baru (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // Kaedah ini adalah untuk membaca data ujian dari sel Excel // Dalam ini kita melewati parameter / argumen sebagai Row Num dan Col Num umum String statik getCellData (int RowNum, int ColNum) melontarkan Pengecualian {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () kembali CellData}}Sekarang, mari kita beralih ke bahagian akhir blog rangka Selenium ini, di mana saya akan menunjukkan kepada anda bagaimana membina kerangka hibrid.
Kerangka hibrid
Kerangka hibrid adalah teknik di mana kita dapat memanfaatkan kedua-dua kerangka Selenium Dipacu Data & Kata Kunci dengan sebaik-baiknya. Dengan menggunakan contoh-contoh yang ditunjukkan di atas dalam blog ini, kita dapat membina kerangka hibrid dengan menyimpan kaedah untuk dilaksanakan dalam fail excel (pendekatan berdasarkan kata kunci) dan meneruskan nama kaedah ini ke Kelas Refleksi Java (pendekatan berdasarkan data) dan bukannya membuat Jika tidak gelung di kelas 'DriverScript'.
Lihat kelas 'DriverScript' yang diubah dalam coretan kod di bawah.Di sini, bukannya menggunakan beberapa gelung If / Else, pendekatan berdasarkan data digunakan untuk membaca nama kaedah dari file excel.
pakej HybridFramework import java.lang.reflect.Mode kelas awam DriverScriptJava {// Ini adalah objek kelas, diisytiharkan sebagai 'public static' // Sehingga dapat digunakan di luar ruang lingkup utama [] kaedah awam statik Tindakan tindakanKata kunci awam statik String sActions // Ini adalah objek kelas refleksi, diisytiharkan sebagai 'public static' // Sehingga dapat digunakan di luar ruang lingkup utama [] kaedah public static Method method [] public static void main (String [] args) membuang Pengecualian {// Menyatakan jalan fail Excel dengan nama fail Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Di sini kita melewati jalur Excel dan SheetName untuk berhubung dengan fail Excel // Kaedah ini telah dibuat sebelumnya ReadExcelData.setExcelFile (sPath, 'Sheet1') // Nilai berkod keras digunakan untuk baris & lajur Excel buat masa ini // Kemudian, kita akan menggunakan nilai kod keras ini dengan lebih berkesan // Inilah gelung untuk membaca nilai baris lajur (Kata Kunci Tindakan) mengikut baris // Ini bermaksud gelung ini akan melaksanakan semua langkah yang disebutkan untuk kes ujian dalam lembaran Langkah Uji untuk<=7iRow++) { sActions = ReadExcelData.getCellData(iRow, 1) //A new separate method is created with the name 'execute_Actions' //You will find this method below of the this test //So this statement is doing nothing but calling that piece of code to execute execute_Actions() } } //This method contains the code to perform some action //As it is completely different set of logic, which revolves around the action only, it makes sense to keep it separate from the main driver script //This is to execute test step (Action) private static void execute_Actions() throws Exception { //Here we are instantiating a new object of class 'Actions' actionKeywords = new Actions() //This will load all the methods of the class 'Actions' in it. //It will be like array of method, use the break point here and do the watch method = actionKeywords.getClass().getMethods() //This is a loop which will run for the number of actions in the Action Keyword class //method variable contain all the method and method.length returns the total number of methods for(int i = 0iUntuk memahami konsep kerangka Data Driven, Keyword Driven & Hybrid Driven ini, saya meminta anda untuk menonton video di bawah ini.
Selenium Framework menggunakan Java | Tutorial Selenium | Latihan Selenium Dalam Talian
Saya harap blog ini berguna untuk anda dan memberi anda pemahaman yang jelas tentang apa itu kerangka Selenium, bagaimana bermanfaat dan bagaimana membina struktur kod anda menggunakan 3 kerangka Selenium ini. Nantikan lebih banyak blog dalam siri ini.
Sekiranya anda ingin belajar Selenium dan membina karier dalam domain ujian, maka periksa interaktif kami secara langsung dalam talian di sini, disertakan dengan sokongan 24 * 7 untuk membimbing anda sepanjang tempoh pembelajaran anda. Konsep yang berkaitan dengan 'Selenium Framework' mempunyai liputan mendalam dalam kursus Edureka.
Ada soalan untuk kami? Sila sebutkan di bahagian komen dan kami akan menghubungi anda.