תחילת העבודה עם ChromeDriver

בדף הזה מוסבר איך מתחילים להשתמש ב-ChromeDriver כדי לבדוק את האתר ב- מחשב (Windows/Mac/Linux). אפשר גם לקרוא תחילת העבודה עם Android או תחילת העבודה עם ChromeOS.

הגדרה

ChromeDriver הוא קובץ הפעלה נפרד שמשמש את Selenium WebDriver לשליטה ב-Chrome. הוא מנוהל על ידי צוות Chromium בעזרת תורמי התוכן ל-WebDriver. אם אתם לא מכירים את Selenium WebDriver, כדאי לכם לבדוק את האתר של Selenium.

כדי להגדיר את הבדיקות להרצה באמצעות ChromeDriver, יש לבצע את השלבים הבאים:

  • מוודאים ש-Chromium או Google Chrome מותקנים במיקום מזוהה
  • מורידים את הקובץ הבינארי של ChromeDriver לפלטפורמה בקטע הורדות באתר הזה
  • עזרה ל-WebDriver למצוא את קובץ ההפעלה של ChromeDriver שהורד

כל אחד מהשלבים האלה אמור לפתור את הבעיה:

  1. לכלול את המיקום של ChromeDriver במשתנה הסביבה PATH
  2. (Java בלבד) לציין את המיקום באמצעות מאפיין המערכת webdriver.chrome.driver (ראו דוגמה למטה)
  3. (Python בלבד) כוללים את הנתיב אל ChromeDriver בעת יצירת Webdriver.Chrome (ראו דוגמה למטה)

בדיקה לדוגמה

Java:

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.*;
import org.junit.Test;
public class GettingStarted {   
@Test   
public void testGoogleSearch() throws InterruptedException {
  // Optional. If not specified, WebDriver searches the PATH for chromedriver.
  // System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
  // WebDriver driver = new ChromeDriver();
  driver.get("http://www.google.com/"); 
  Thread.sleep(5000);  // Let the user actually see something!
  WebElement searchBox = driver.findElement(By.name("q"));
  searchBox.sendKeys("ChromeDriver");
  searchBox.submit(); 
  Thread.sleep(5000);  // Let the user actually see something!
  driver.quit();  
 }
}

Python:

import time
from selenium import webdriver

driver = webdriver.Chrome('/path/to/chromedriver')  # Optional argument, if not specified will search path.
driver.get('http://www.google.com/');
time.sleep(5) # Let the user actually see something!
search_box = driver.find_element_by_name('q')
search_box.send_keys('ChromeDriver')
search_box.submit()
time.sleep(5) # Let the user actually see something!
driver.quit()

שליטה על משך החיים של ChromeDriver

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

  1. להשתמש ב-ChromeDriverService. האפשרות הזו זמינה לרוב השפות ומאפשרת לכם להפעיל או להפסיק את שרת ChromeDriver בעצמכם. ראו כאן דוגמה ל-Java (עם JUnit 4):
import java.io.*;
import org.junit.*;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.*;
import org.openqa.selenium.remote.*;
public class GettingStartedWithService {
  private static ChromeDriverService service;
  private WebDriver driver;
  @BeforeClass
  public static void createAndStartService() throws IOException {
      service = new ChromeDriverService.Builder()
              .usingDriverExecutable(new File("/path/to/chromedriver"))
              .usingAnyFreePort()
              .build();
      service.start();
  }
  
  @AfterClass   
  public static void stopService() {
    service.stop();
  }

  @Before   
  public void createDriver() {
    driver = new RemoteWebDriver(service.getUrl(), new ChromeOptions());
  }

  @After   public void quitDriver() {
    driver.quit();
  }

  @Test   
  public void testGoogleSearch() {
    driver.get("http://www.google.com");
    // rest of the test...
  }
}

Python:

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
service = Service('/path/to/chromedriver')
service.start()
driver = webdriver.Remote(service.service_url)
driver.get('http://www.google.com/');
time.sleep(5) # Let the user actually see something!
driver.quit()
  1. יש להפעיל את שרת ChromeDriver בנפרד לפני הרצת הבדיקות, ולהתחבר אליו באמצעות Remote WebDriver.

טרמינל:

$ ./chromedriver
Starting ChromeDriver
76.0.3809.68 (...) on port 9515
...

Java:

import java.net.*;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.*;
import org.openqa.selenium.remote.*;  

public class GettingStartedRemote {

  public static void main(String[] args) throws MalformedURLException {
    WebDriver driver = new RemoteWebDriver(
        new URL("http://127.0.0.1:9515"),
        new ChromeOptions());
    driver.get("http://www.google.com");
    driver.quit();
  }
}