Robot Framework Keywords mit der Selenium IDE aufzeichnen

1 Kommentar

In fast allen Projekten bei codecentric benutzen wir das Robot Framework für Akzeptanztests. Das Robot Framework ist ein Schlüsselwort-getriebenes Testautomatisierungsframework. Eine Einführung dazu ist hier verfügbar.

Die Selenium IDE ist ein Firefox-Addon, welches den Entwickler bei der Aufzeichnung der Testfälle unterstützt. Ein interessantes Feature ist die Möglichkeit aus verschiedenen Zwischenablage-Formaten auszuwählen, in welches das Testskript konvertiert werden kann, zum Beispiel HTML (default), JUnit, Python oder Ruby.

Während der Startphase meines aktuellen Projektes kam ich auf die Idee ein Format für das Robot Framework zu entwickeln. Nach nur wenigen Suchanfragen bei Google hab ich schnell gemerkt, dass es nicht wirklich kompliziert ist die Selenium IDE zu erweitern. Der Plan ist also, dass man mit dem Firefox Addon die Möglichkeit hat die Testfälle aufzuzeichnen und direkt durch kopieren und einfügen das Robot Keyword Format erhält.

Das Ziel

Ein Selenium Befehl besteht aus 3 Attributen: selenium-command, target und value. Das default-Format ist immer HTML und sieht so aus:

<tr>
	<td>select</td>
	<td>id=feldId</td>
	<td>Test</td>
</tr>

Das Format in Java:

selenium.select("id=feldId", "Test");

Wir wollen sowas erhalten:

Select From List  id=feldId  test

Die API

Für die Implementierung braucht man nur ein paar Methoden implementieren. Die formatCommands-Methode konvertiert den Testfall bzw. die einzelnen Kommandos in das Zielformat.

function formatCommands(commands) {
  var result = '';
  for (var i = 0; i < commands.length; i++) {
    var command = commands[i];
    if (command.type == 'command') {
      var keyword = KEYWORDS[command.command];
      if(keyword == null){
      	keyword = "Call Selenium Api  " + command.command;
      }
      var target = command.target.replace(/id=/, '');
      result += keyword + SEPARATOR + target + SEPARATOR + command.value + "\n";
      keyword = null;
    }
  }
  return result;
}

Die parse-Methode liest den String des erzeugten Test Cases ein und aktualisiert ggf. vorgenommene Änderungen. Zusätzlich ist es möglich weitere Optionen und Methoden zu definieren, aber die benötigen wir hier erstmal nicht.

function parse(testCase, source) {
  var doc = source;
  var commands = [];
  while (doc.length > 0) {
    var line = /(.*)(\r\n|[\r\n])?/.exec(doc);
    var array = line[1].split(SEPARATOR);
    if (array.length >= 3) {
      var command = new Command();
      command.command = array[0];
      command.target = array[1];
      command.value = array[2];
      commands.push(command);
    }
    doc = doc.substr(line[0].length);
  }
  testCase.setCommands(commands);
}

Interessanter ist die folgende Definition:

//Mapping: Selenium Commands on to Selenium Robot Keywords
var KEYWORDS = {
  type: "Input Text",
  select: "Select From List",
  verifyValue: "Textfield Should Contain"
  //[...]
};
 
//Separator for splitting commands(2 blanks)
var SEPARATOR = "  ";

Standardmäßig wird immer das generische “Call Selenium Api”-Keyword mit der korrespondierenden Selenium-Methode generiert. Aber ich denke es ist besser, wenn direkt die Robot Keywords erzeugt werden. Also muss man hier ein Mapping definieren. Es ist auch möglich die Standard Keywords durch Eigene auszutauschen. Ich würde hier empfehlen, dass man erst dann ein Mapping definiert, wenn das Keyword bereits mit der zu testenden Anwendung ausprobiert wurde. So kann man direkt erkennen, wenn ein neues Keyword im Test verwendet wurde, weil in dem generierten Testfall dann „Call Selenium Api“ auftaucht.

Installation

  1. Selenium IDE öffnen
  2. Zu „Options → Options… → Formats“ navigieren
  3. Eine neue Format-Definition mit dem Namen “robotframework-rc” hinzufügen
  4. Die Inhalte der Datei “robotframework-rc.js” einfügen

Usage

Nun ist es sehr einfach die Testfälle aufzuzeichnen und direkt die Robot Keywords daraus zu generieren. Einfach unter Options->Clipboard Format den Eintrag „robotframework-rc“ auswählen. Generell ist zu empfehlen keine kompletten Testläufe mit der Selenium IDE aufzuzeichnen und sie 1:1 in einen Robot Tests zu kopieren. Das Haupteinsatzargument von Schlüsselwort-getriebenen Tests ist Wiederverwendbarkeit 😉 Aber zumindest die initiale Aufzeichnung ist nun sehr einfach.

Selenium IDE

Robot Framework Keywords

Select From List  feldId  Test
Input Text  feldId2  AnotherValue
Textfield Should Contain  feldId  Test

Der komplette Quellcode ist auf https://github.com/denschu/selenium-ide-format-robotframework verfügbar. Freue mich natürlich über Feedback :-) In meinem nächsten Blogeintrag zeige ich, wie man eigene Locators in Selenium implementiert.

Autor

Dennis Schulte

Dennis Schulte

Dennis Schulte ist seit 2009 als Senior IT Consultant bei der codecentric AG tätig. Er unterstützt seine Kunden insbesondere im Bereich Enterprise-Architekturen und der Optimierung von IT-Prozessen. Aufgrund seiner langjährigen Erfahrung als Architekt und Entwickler verfügt er über ein umfassendes Wissen im Bereich Java EE und Open-Source-Technologien und hier insbesondere im Umfeld Spring Batch und Massendatenverarbeitung. Seine Projektschwerpunkte liegen in der Architekturberatung und der Durchführung von Projekten im Versicherungsumfeld.

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Kommentare

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *