3.4.5. Registrieren neuer WebDriver-Instanzen

Selenium unterstützt bereits einige Browser direkt für die Verwendung von WebDriver. Dazu gehören Firefox und Internet Explorer. Für andere Browser wie z.B. Google Chrome ist der Clientseitige Teil ebenfalls vorhanden. Für die Verwendung von Google Chrome in einem Test ist jedoch die Installation des WebDriver-Plugins für den Browser erforderlich. Für andere Browser wie z.B. Opera enthält Selenium keine Klassen zur Verwendung von WebDriver. Diese Klassen können dann über externe Quellen bezogen und integriert werden. Im Folgenden wird beschrieben, wie sie externe WebDriver-Instanzen in checkerberry web integrieren können.

Bei der Verwendung von WebDriver prüft checkerberry web zunächst, welcher Browsertyp verwendet werden soll. Zu diesem Zweck verwendet checkerberry web die Methode WebConfiguration.getBrowserType(). Um ein möglichst einfaches Umschalten von Selenium RC und WebDriver zu ermöglichen, werden die Browsertypen von Selenium RC wiederverwendet. Intern werden diese Werte dann den bekannten WebDriver-Instanzen zugeordnet. Die folgende Liste enthält die aktuellen Zuordnungen.

Zur Verwendung eines WebDrivers für einen anderen Browser, muss der neue WebDriver registriert werden. Dazu existiert in WebConfiguration die Methode registerWebDriverCreator(WebDriverCreator creator). Es wird also nicht direkt eine WebDriver-Instanz, sondern ein Creator-Objekt registriert. Auf diese Art und Weise steuert checkerberry web den Zeitpunkt, wann die WebDriver-Instanz erzeugt wird. Dies ist sinnvoll, da mit der Erzeugung der WebDriver-Instanz auch ein Browserfenster geöffnet wird, was nicht bei der Registrierung, sondern vor jedem Test erforderlich ist. Das folgende Code-Beispiel enthält das Interface WebDriverCreator.

Beispiel 3.5. Interface WebDriverCreator

/**
 * Creator für die Erzeugung von {@link WebDriver}-Objekten. Durch die
 * Verwendung eines Creators können verschiedene Implementierungen in der
 * Konfiguration gespeichert werden.
 */
public interface WebDriverCreator {

  /**
   * Erzeugt einen neuen {@link WebDriver}.
   *
   * @return erzeugter {@link WebDriver}.
   */
  WebDriver createWebDriver();

  /**
   * Liste der Browsertypen, die der zugehörige {@link WebDriver} unterstützt.
   *
   * @return Liste der Browsertypen.
   */
  String[] getRegisteredBrowserTypes();

}

Das Interface verfügt über zwei Methoden. Die Methode getRegisteredBrowserTypes liefert alle Browsertypen zurück, die durch den entsprechenden WebDriver abgedeckt werden sollen. Es können dabei auch eigene Namen verwendet werden. Bei der Verwendung von eigenen Namen ist jedoch zu beachten, dass ein einfaches Umschalten zwischen WebDriver und Selenium RC dann nicht mehr möglich ist, da Selenium RC die Browsertypen mit den neuen Namen nicht erkennt. In der Regel ist es jedoch so, dass für jeden Test klar festgelegt wird, ob WebDriver oder Selenium RC verwendet werden soll. Das Umschalten zwischen WebDriver und Selenium RC kommt somit in der Praxis eher selten vor.

In jeder WebConfiguration wird über die Methode getBrowserType ein Browsertyp festgelegt, der für die entsprechenden Tests verwendet werden soll. Diese Methode muss für die Verwendung von WebDriver somit einen der registrierten Namen zurückliefern.

Die Methode createWebDriver wird intern durch checkerberry web verwendet, um die konkrete WebDriver-Instanz zu erzeugen.