بناء إطار سيلينيوم هجين مدفوع بالبيانات وموجه بالكلمات الرئيسية



تشرح هذه المدونة ما هو إطار عمل السيلينيوم ، وفوائده ، وكيفية تنفيذ أطر عمل Data Driven ، Keyword Driven & Hybrid في السيلينيوم.

السابق في هذه السلسلة أعطاك التعرف على المفاهيم الأساسية في اختبار السيلينيوم.ومع ذلك ، في هذه المدونة ، سأخبرك بكيفية استخدام إطار عمل سيلينيوم لتحسين بنية الكود الخاص بك ، وهذا سيقترب منك لتصبح .

ما هو هيكل السيلينيوم؟

إطار عمل السيلينيوم هو بنية رمز لجعل صيانة الكود أبسط ، وقابلية قراءة الكود بشكل أفضل. يتضمن إطار العمل تقسيم الكود بأكمله إلى أجزاء أصغر من الكود ، والتي تختبر وظيفة معينة.





تم تنظيم الكود بحيث يتم فصل 'مجموعة البيانات' عن 'حالة الاختبار' الفعلية التي ستختبر وظائف تطبيق الويب. يمكن أيضًا تنظيمها بطريقة يتم فيها استدعاء حالات الاختبار التي يلزم تنفيذها (استدعاء) من تطبيق خارجي (مثل ملف csv.).

هناك عدد من الأطر ، ولكن 3 من أطر عمل السيلينيوم شائعة الاستخدام هي:



ستتم مناقشة هذه الأطر مع عرض توضيحي في هذه المدونة. ولكن قبل المضي قدمًا ، دعني أخبرك لماذا يجب أن يكون هناك إطار عمل للسيلينيوم ، وما الفوائد التي ستجنيها من استخدامها.

لماذا نحتاج إلى إطار السيلينيوم؟

بدون وجود إطار عمل ، ستكون هناك حالة اختبار واحدة ستشمل وظيفة الاختبار بأكملها. الجزء المخيف هو أن حالة الاختبار الفردية هذه لديها القدرة على رفع ما يصل إلى مليون سطر من التعليمات البرمجية. لذلك من الواضح جدًا أن حالة الاختبار الضخمة جدًا ستكون صعبة القراءة. حتى إذا كنت ترغب في تعديل أي وظيفة لاحقًا ، فستواجه صعوبة في تعديل الكود.

هو خريج وماجستير نفس الشيء

نظرًا لأن تنفيذ إطار العمل ، سيؤدي إلى أجزاء أكواد أصغر ولكن متعددة ، فهناك فوائد مختلفة.



فوائد هيكل السيلينيوم

  • زيادة إعادة استخدام التعليمات البرمجية
  • تحسين قراءة الكود
  • قابلية أعلى
  • نص مخفضاعمال صيانة

الآن بعد أن تعرفت على أساسيات الأطر ، دعني أوضح كل منها بالتفصيل.

الإطار المستند إلى البيانات

إطار العمل المستند إلى البيانات في السيلينيوم هو تقنية فصل 'مجموعة البيانات' عن 'حالة الاختبار' الفعلية (الرمز). يعتمد إطار العمل هذا تمامًا على بيانات اختبار الإدخال. يتم تغذية بيانات الاختبار من مصادر خارجية مثل ملف Excel أو ملف CSV أو أي قاعدة بيانات.

إطار عمل مدفوع بالبيانات - إطار سيلينيوم - edureka

نظرًا لأن حالة الاختبار منفصلة عن مجموعة البيانات ، يمكننا بسهولة تعديل حالة الاختبار لوظيفة معينة دون إجراء تغييرات بالجملة على الكود الخاص بك. على سبيل المثال ، إذا كنت تريد تعديل رمز وظيفة تسجيل الدخول ، فيمكنك تعديل ذلك فقط بدلاً من الاضطرار أيضًا إلى تعديل أي جزء تابع آخر في نفس الرمز.

إلى جانب ذلك ، يمكنك أيضًا التحكم بسهولة في مقدار البيانات التي يجب اختبارها. يمكنك بسهولة زيادة عدد معلمات الاختبار عن طريق إضافة المزيد من حقول اسم المستخدم وكلمة المرور إلى ملف Excel (أو مصادر أخرى).

على سبيل المثال ، إذا اضطررت إلى التحقق من تسجيل الدخول إلى صفحة ويب ، فيمكنني الاحتفاظ بمجموعة بيانات اعتماد اسم المستخدم وكلمة المرور في ملف Excel وتمرير بيانات الاعتماد إلى الكود لأداء التشغيل الآلي على المتصفح في ملف فئة Java منفصل.

استخدام Apache POI مع Selenium WebDriver

لا يدعم WebDriver قراءة ملفات Excel مباشرة. ومن ثم نستخدم أباتشي POI للقراءة / الكتابة إلى أي مستند Microsoft Office. يمكنك تنزيل Apache POI (مجموعة من ملفات JAR) من هنا . قم بتنزيل ملف zip أو ملف tar وفقًا لمتطلباتك وضعه مع مجموعة Selenium JARs.

سيتم الاهتمام بالتنسيق بين الكود الرئيسي ومجموعة البيانات مزودي بيانات TestNG ، وهي مكتبة تأتي كجزء من ملفات Apache POI JAR. لغرض العرض ، قمت بإنشاء ملف Excel يسمى 'LoginCredentials' حيث تم تخزين أسماء المستخدمين وكلمات المرور في أعمدة مختلفة.

مزايا وعيوب بيثون

ألق نظرة على الكود أدناه لفهم حالة الاختبار. إنه رمز بسيط لاختبار وظيفة تسجيل الدخول لتطبيق حجز الطيران.

حزمة DataDriven import org.openqa.selenium.By import org.openqa.selenium.chrome.ChromeDriver import org.testng.Assert import org.testng.annotations.AfterMethod import org.testng.annotations.DataProvider import org.testng.annotations.Test فئة عامة DDTExcel {ChromeDriver driverTest (dataProvider = 'testdata') العام باطل DemoProject (String username، String password) يطرح InterruptException {System.setProperty ('webdriver.chrome.driver'، 'C: UsersVardhanDownloadschromedriver.exe') سائق = جديد ChromeDriver () driver.get ('http://newtours.demoaut.com/') driver.findElement (By.name ('userName')). sendKeys (username) driver.findElement (By.name ('password') )). sendKeys (password) driver.findElement (By.name ('login')). ​​انقر فوق () Thread.sleep (5000) Assert.assertTrue (driver.getTitle (). مباريات ('Find a Flight: Mercury Tours: ')،' بيانات اعتماد غير صالحة ') System.out.println (' تسجيل الدخول ناجح ')}AfterMethod void ProgramTermination () {driver.quit ()}DataProvider (name =' testdata ') public Object [] [] TestDa taFeed () {ReadExcelFile config = new ReadExcelFile ('C: UsersVardhanworkspaceSeleniumLoginCredentials.xlsx') int rows = config.getRowCount (0) Object [] [] أوراق اعتماد = كائن جديد [صفوف] [2] لـ (int i = 0i

إذا لاحظت مما سبق ، فلدينا طريقة باسم “TestDataFeed ()”. في هذه الطريقة ، قمت بإنشاء مثيل كائن لفئة أخرى تسمى 'ReadExcelFile'. أثناء إنشاء مثيل لهذا الكائن ، قمت بتغذية مسار ملف Excel الخاص بي الذي يحتوي على البيانات. لقد قمت بتعريف حلقة for لاسترداد النص من مصنف Excel.

ولكن ، لقراءة البيانات من رقم ورقة معين ورقم العمود ورقم الصف ، يتم إجراء المكالمات إلى فئة 'ReadExcelFile'. رمز 'ReadExcelFile' الخاص بي أدناه.

حزمة DataDriven import java.io.File import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook public class ReadExcelFile {XSSFWorkbook wb XSSFSheet sheet public ReadEx excelPath) {try {File src = new File (excelPath) FileInputStream fis = new FileInputStream (src) wb = new XSSFWorkbook (fis)} catch (استثناء e) {System.out.println (e.getMessage ())}} عام سلسلة getData (int sheetnumber ، int row ، int column) {sheet = wb.getSheetAt (sheetnumber) String data = sheet.getRow (row) .getCell (column) .getStringCellValue () return data} public int getRowCount (int sheetIndex) { int row = wb.getSheetAt (sheetIndex) .getLastRowNum () row = row + 1 return row}}

لاحظ أولاً المكتبات التي قمت باستيرادها. لقد استوردت اباتشي POI XSSF المكتبات التي تُستخدم لقراءة / كتابة البيانات إلى ملفات Excel. هنا ، قمت بإنشاء مُنشئ (كائن من نفس الطريقة) لتمرير القيم: رقم الورقة ورقم الصف ورقم العمود. لفهم هذا الإطار بشكل أفضل ، أطلب منكم الاطلاع على الفيديو أدناه ، حيث شرحت هذا بطريقة منظمة.

إطار العمل المستند إلى البيانات في WebDriver السيلينيوم | دروس السيلينيوم

دعنا الآن ننتقل إلى إطار العمل ، مثل إطار العمل المستند إلى الكلمات الرئيسية.

إطار عمل يحركه الكلمات الرئيسية

إطار عمل الكلمات الرئيسية هو أسلوب يتم فيه كتابة جميع العمليات والتعليمات التي سيتم تنفيذها بشكل منفصل عن حالة الاختبار الفعلية. التشابه مع إطار عمل Data Driven هو أن العمليات التي سيتم تنفيذها يتم تخزينها مرة أخرى في ملف خارجي مثل ورقة Excel.

العمليات التي أتحدث عنها ليست سوى الأساليب التي يجب تنفيذها كجزء من حالة اختبار. تتمثل فائدة إطار عمل Keyword Driven في أنه يمكنك التحكم بسهولة في الوظائف التي تريد اختبارها. يمكنك تحديد الطرق التي تختبر وظائف التطبيق في ملف excel. وبالتالي ، سيتم اختبار أسماء الطرق المحددة في Excel فقط.

على سبيل المثال ، لتسجيل الدخول إلى تطبيق الويب ، يمكننا كتابة عدة طرق في حالة الاختبار الرئيسية ، حيث ستختبر كل حالة اختبار وظائف معينة. لإنشاء مثيل لبرنامج تشغيل المتصفح ، يمكن أن تكون هناك طريقة واحدة ، للعثور على حقول اسم المستخدم وكلمة المرور ، وقد تكون هناك طرق ، للانتقال إلى صفحة ويب ، قد تكون هناك طريقة أخرى ، إلخ.

ألق نظرة على الكود أدناه لفهم كيف يبدو إطار العمل. الأسطر التي تم التعليق عليها في الكود أدناه بمثابة شرح إذا كنت لا تفهم.

package KeywordDriven import org.openqa.selenium.chrome.ChromeDriver import org.testng.Assert import org.testng.annotations.Test import java.util.concurrent.TimeUnit import org.openqa.selenium.By import org.openqa.selenium.WebDriver إجراءات الفئة العامة {public static WebDriver driver public static void openBrowser () {System.setProperty ('webdriver.chrome.driver'، 'C: UsersVardhanDownloadschromedriver.exe') driver = new ChromeDriver ()} تنقل عام ثابت باطل () {driver .manage (). timeouts (). ضمنيًا انتظر (10، TimeUnit.SECONDS) driver.get ('http://newtours.demoaut.com')} إدخال الفراغ العام الثابت 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')). ​​click ()}Test public static void insurance_login () {String pageTitle = driver.getTitle () Assert.assertEquals (pageTitle، 'Find a Flight: Mercury Tours : ')} public static void closeBrowser () {driver.quit ()}}

كما ترى ، فإن الوظائف المختلفة التي يجب اختبارها موجودة في طرق منفصلة في انتظار الاتصال بها. الآن ، سيتم استدعاء هذه الطرق من فئة أخرى ، بناءً على وجود اسم الطريقة في ملف excel. وبالمثل ، لقراءة ملف Excel ، وإرسال النتائج مرة أخرى ، قمت بكتابة فصل آخر. كلاهما معروض أدناه.

ملف الفصل الذي يستدعي الأساليب ، هو هذا.

هي درجة الماجستير تعتبر دراسات عليا
حزمة KeywordDriven public class DriverScript {public static void main (String [] args) تطرح استثناء {// تعريف مسار ملف Excel باسم ملف Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Here نحن نمرر مسار Excel و SheetName كوسائط للتواصل مع ملف Excel ReadExcelData.setExcelFile (sPath، 'Sheet1') // تُستخدم القيم المشفرة الثابتة لصف وأعمدة Excel في الوقت الحالي // يتم استخدام القيم المشفرة الثابتة لصف Excel & الأعمدة في الوقت الحالي // في الفصول اللاحقة سنستبدل هذه القيم المشفرة الصلبة بـ varibales // هذه هي الحلقة لقراءة قيم العمود 3 (Action Keyword) صفًا بعد صف لـ (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() } } } } 

وملف الفصل الذي يقرأ قيم Excel هو هذا.

package KeywordDriven 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 public class ReadExcelData {private static XSSFSheet ExcelWSheet الخاص الثابت XSSFWorkbook ExcelWBook الخاص الثابت XSSFCell Cell // هذه الطريقة هي لتعيين مسار الملف وفتح ملف Excel // تمرير مسار Excel و SheetName كوسائط إلى هذه الطريقة العامة مجموعة باطلة ثابتة ExcelFile (String Path، String SheetName) استثناء {FileInputStream ExcelFile = new FileInputStream (Path) ExcelWBook = جديد XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // هذه الطريقة هي قراءة بيانات الاختبار من خلية Excel // في هذا نقوم بتمرير المعلمات / الوسائط مثل Row Num و Col Num public static String getCellData (int RowNum، int ColNum) يطرح استثناء {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () إرجاع CellData}}

الآن ، دعنا ننتقل إلى الجزء الأخير من مدونة إطار عمل السيلينيوم ، حيث سأوضح لك كيفية إنشاء إطار عمل مختلط.

إطار هجين

إطار العمل الهجين هو تقنية يمكننا من خلالها تحقيق أقصى استفادة من إطار (إطارات) السيلينيوم المستندة إلى البيانات والقائمة الرئيسية. باستخدام الأمثلة الموضحة أعلاه في هذه المدونة ، يمكننا إنشاء إطار عمل مختلط من خلال تخزين طرق التنفيذ في ملف Excel (نهج يعتمد على الكلمات الرئيسية) وتمرير أسماء هذه الطرق إلى فئة انعكاس جافا (نهج يعتمد على البيانات) بدلاً من إنشاء ملف لو غير هذا حلقة في فئة 'DriverScript'.

ألق نظرة على فئة 'DriverScript' المعدلة في مقتطف الشفرة أدناه.هنا ، بدلاً من استخدام عدة حلقات If / Else ، يتم استخدام نهج يعتمد على البيانات لقراءة أسماء الطرق من ملف excel.

package HybridFramework import java.lang.reflect.Method public class DriverScriptJava {// هذا هو كائن فئة ، مُعلن عنه كـ 'public static' // بحيث يمكن استخدامه خارج نطاق الأسلوب الرئيسي [] الطريقة العامة الإجراءات الثابتة الإجراءات العامة الثابتة // هذا هو كائن فئة الانعكاس ، مُعلن عنه كـ 'ثابت عام' // بحيث يمكن استخدامه خارج نطاق الأسلوب الرئيسي [] الأسلوب العام الثابت الأسلوب [] العامة الثابتة الفراغ الرئيسي (سلسلة [] args) يطرح استثناء {// تعريف مسار ملف Excel باسم ملف Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // هنا نقوم بتمرير مسار Excel واسم الورقة للاتصال بملف Excel // هذه الطريقة تم إنشاؤه مسبقًا ReadExcelData.setExcelFile (sPath، 'Sheet1') // يتم استخدام القيم المشفرة الثابتة لصف وأعمدة Excel في الوقت الحالي // لاحقًا ، سنستخدم هذه القيمة المشفرة بشكل أكثر كفاءة // هذه هي الحلقة للقراءة قيم العمود (Action Keyword) الصف بواسطة row // فهذا يعني أن هذه الحلقة ستنفذ جميع الخطوات المذكورة لحالة الاختبار في ورقة خطوات الاختبار لـ (int iRow = 1iRow<=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 = 0i

لفهم مفهوم أطر العمل المستندة إلى البيانات والموجهة بالكلمات الرئيسية والموجهة بشكل أفضل ، أطلب منك مشاهدة الفيديو أدناه.

إطار السيلينيوم باستخدام Java | دروس السيلينيوم | تدريب السيلينيوم عبر الإنترنت

آمل أن تكون هذه المدونة مفيدة لك وقدمت لك فهمًا واضحًا لما هو إطار عمل السيلينيوم ، وكيف يكون مفيدًا وكيفية بناء هيكل الكود الخاص بك باستخدام أطر السيلينيوم الثلاثة. ترقبوا المزيد من المدونات في هذه السلسلة.

إذا كنت ترغب في تعلم السيلينيوم وبناء مستقبل وظيفي في مجال الاختبار ، فقم بإلقاء نظرة على موقعنا التفاعلي المباشر عبر الإنترنت هنا ، يأتي ذلك مع دعم 24 * 7 لإرشادك طوال فترة التعلم. المفاهيم المتعلقة 'إطار السيلينيوم' لها تغطية متعمقة في دورة Edureka.

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات وسنعاود الاتصال بك.