WebDriver Service

אחד הדברים הראשונים שאנו לומדים בעבודה מול Selenium WebDriver הוא לפתוח דפדפן.

הפתיחה עצמה נעשית ע"י יצירת אובייקט מה-WebDriver ואיתחולו ע"י הקריאה לבנאי של המחלקה היורשת (ChromeDriver , SafariDriver וכו') , בבנאי ישנה קריאה להפעלת ה-executable של הדפדפן. זאת אומרת, שבמידה וארצה לפתוח את דפדפן הכרום, אבצע את הפקודה:

WebDriver driver = new ChromeDriver();

 

 

נשאר לנו לטפל רק בדבר אחד קטן אך חשוב והוא הכרום דרייבר עצמו (כאמור לכל דפדפן אנו נעבוד מול הדרייבר שלו בעבודה מול דפדפן הכרום למשל, נשתמש בכרום דרייבר), במידה ולא הגדרנו לו את הנתיב דרך ה-Global Environment Parameters של מערכת ההפעלה, או במקומות קונפיגורביליים אחרים, אנו נצטרך להתייחס לכך בקוד שלנו, כך למשל:

System.setProperty("webdriver.chtome.driver", "C://Selenium/Drivers/chromedriver.exe");

 

פעולת פתיחת הדפדפן היא בד"כ הפעולה האיטית ביותר בריצת האוטומציה שלנו, גם באופן ידני אם נפתח את הדפדפן, יקח לו מספר שניות עד שהוא יטען לגמריי , וזה לאוטומציה זמן יקר.

בד"כ סט הבדיקות שלנו עובד כך שאנו פותחים פעם אחת את הדפדפן, עושים Login למערכת שלנו ואז מבצעים את כל הבדיקות מתוך הסט. אך ישנם מקרים בהם נצטרך לפתוח את הדפדפן כמה פעמים, למשל בבדיקות ה-Login עצמן , או במידה ונרצה לפתוח Session חדש חלק ונקי.

אז הפתרון הבנאלי הוא לסגור את הדפדפן ע"י driver.quit ולפתוח אותו שוב ע"י מה שכבר ראינו:

WebDriver driver = new ChromeDriver();

 

זה יעבוד כמובן, אך כמו שאמרנו, הוא יבזבז לנו זמן יקר. אז מה הפיתרון ?

הפיתרון הוא שימוש ב-Service , ואת הכרום דרייבר ניתן להפעיל דרך Service שיפעל ברקע כל הזמן. בצורה הזו הכרום דרייבר מופעל רק פעם אחת , את דפדפן הכרום נוכל לסגור ולפתוח כמה פעמים שנרצה במהלך סט הבדיקות שלנו וזה ללא ביזבוז הזמן שהיה לוקח לנו לפתוח אותו בצורה הרגילה וכפועל יוצא מכך גם הלוגים שלנו יכללו רק פתיחה אחת של הדפדפן ולא כמה פעמים.

הרעיון פה משתמש מאחורי הקלעים במחלקת ChromeDriverService , ואיתחולו באובייקט ממחלקת ChromeDriverService.Builder (ה-Builder משמש בכדיי להגדיר אובייקט ממחלקת ChromeDriverService)

הנה הקוד שממש אותו:

ChromeDriverService service = new ChromeDriverService.Builder()
.usingDriverExecutable(new File("C://Selenium/Drivers/chromedriver.exe"))
.usingAnyFreePort()
.build();

 

אח"כ נוכל על אובייקט ה-service שיצרנו להפעיל את השירות בתחילת הרצת כל הטסטים שלנו ולסגור אותו בסיום:

service.start();
service.stop();

 

וכעת, כשסיימנו לטפל ב-service נוכל להתפנות ל-driver עצמו ונאתחל אותו כך (עם RemoteWebDriver):

WebDriver driver = new RemoteWebDriver(service.getUrl(), DesiredCapabilities.chrome());

 

כעת נוכל לייצר המון טסטים לצורך הדוגמא ולסגור ולפתוח את הדפדפן כאוות נפשינו לצורך הבדיקות.

הנה קוד דוגמא שממחיש את העניין, נכתבו כאן 3 מקרי בדיקה , כל אחד מהם פותח דפדפן נכנס לאתר מסויים וסוגר את הדפדפן:

public class driverService {
	private static ChromeDriverService service;
	private WebDriver driver;

	@BeforeClass
	public static void startService() throws IOException {
		 service = new ChromeDriverService.Builder()
		.usingDriverExecutable(new File("C://Selenium/Drivers/chromedriver.exe"))
		.usingAnyFreePort()
		.build();
		service.start();
	}

	@AfterClass
	public static void stopService() {
		service.stop();
	}

	@Before
	public void initDriver() {
		driver = new RemoteWebDriver(service.getUrl(), DesiredCapabilities.chrome());
	}

	@After
	public void quitDriver() {
		driver.quit();
	}
	
	@Test
	public void test1() {
		driver.get("http://google.com");
	}
	
	@Test
	public void test2() {
		driver.get("http://bing.com");
	}
	
	@Test
	public void test3() {
		driver.get("http://duckduckgo.com");
	}
}

 

Scroll to Top
דילוג לתוכן