Beliebte Suchanfragen

Cloud Native

DevOps

IT-Security

Agile Methoden

Java

|
//

Robot Framework Keywords mit der Selenium IDE aufzeichnen

9.2.2012 | 3 Minuten Lesezeit

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:

1<tr>
2    <td>select</td>
3    <td>id=feldId</td>
4    <td>Test</td>
5</tr>

Das Format in Java:

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

Wir wollen sowas erhalten:

1Select 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.

1function formatCommands(commands) {
2  var result = '';
3  for (var i = 0; i < commands.length; i++) {
4    var command = commands[i];
5    if (command.type == 'command') {
6      var keyword = KEYWORDS[command.command];
7      if(keyword == null){
8          keyword = "Call Selenium Api  " + command.command;
9      }
10      var target = command.target.replace(/id=/, '');
11      result += keyword + SEPARATOR + target + SEPARATOR + command.value + "\n";
12      keyword = null;
13    }
14  }
15  return result;
16}

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.

1function parse(testCase, source) {
2  var doc = source;
3  var commands = [];
4  while (doc.length > 0) {
5    var line = /(.*)(\r\n|[\r\n])?/.exec(doc);
6    var array = line[1].split(SEPARATOR);
7    if (array.length >= 3) {
8      var command = new Command();
9      command.command = array[0];
10      command.target = array[1];
11      command.value = array[2];
12      commands.push(command);
13    }
14    doc = doc.substr(line[0].length);
15  }
16  testCase.setCommands(commands);
17}

Interessanter ist die folgende Definition:

1//Mapping: Selenium Commands on to Selenium Robot Keywords
2var KEYWORDS = {
3  type: "Input Text",
4  select: "Select From List",
5  verifyValue: "Textfield Should Contain"
6  //[...]
7};
8 
9//Separator for splitting commands(2 blanks)
10var 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

1Select From List  feldId  Test
2Input Text  feldId2  AnotherValue
3Textfield 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.

|

Beitrag teilen

Gefällt mir

0

//

Gemeinsam bessere Projekte umsetzen.

Wir helfen deinem Unternehmen.

Du stehst vor einer großen IT-Herausforderung? Wir sorgen für eine maßgeschneiderte Unterstützung. Informiere dich jetzt.

Hilf uns, noch besser zu werden.

Wir sind immer auf der Suche nach neuen Talenten. Auch für dich ist die passende Stelle dabei.