Robot Framework Keywords mit der Selenium IDE aufzeichnen

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.

  • Facebook
  • Delicious
  • Digg
  • StumbleUpon
  • Reddit
  • Blogger
  • LinkedIn
Dennis Schulte

7 Antworten auf Robot Framework Keywords mit der Selenium IDE aufzeichnen

  1. Raju sagt:

    Hi i just tried for Robot framework,it is just staying in Selenium IDE.I copied the src file which is given as code and In created Definition name:robotframework-rc,Recored a test and tried to format back to Robot from HTML and i followed the steps what is given in ur website.

  2. Dennis Schulte sagt:

    Hello Raju,
    did you select under “Options->Clipboard Format” the entry “robotframework-rc” and then copied the testcase to the clipboard? Can you give me some additional informations about the testcase?
    Thank you :-)
    Dennis

  3. Best sagt:

    unfortunately I just tried this on selenium IDE 1.8.0 and it isn’t working. there were just a couple basic selenium commands such as open and clickAndWait. Pressing Ctrl+C and CTRL+V even in the Selenium IDE doesn’t copy a step when the clipboard format is set to the custom robotframework one. I think this is because there is an error in the javascript code.. sorry haven’t had time to try and debug where it is breaking..

    • Best sagt:

      Actually a little more playing with it seems that its a Selenium IDE issue. If you try to edit an existing formatter it doesn’t update correctly in the IDE. But if you create a new formatter as described above and then paste the js into it and save it only once.. then it works.
      But if for what ever reason you save it before pasting the js in, it won’t work..

      Thanks for the good work :)

  4. mahima jain sagt:

    Hi ,
    I tried your code … i also refer page https://github.com/denschu/selenium-ide-format-robotframework/blob/master/robotframework-rc.js for robotframework file . i copied this file in source . But when i tried to convert into robot format i didnt get anything except one word undefined .

  5. Jan sagt:

    I tried the exporter. It did sucesfully export the data into some keywords. But the current robotframework dosent support Call Selenium API Keyword. It was removed. https://github.com/rtomac/robotframework-selenium2library/wiki/Differences-From-SeleniumLibrary
    Any suggestion what should i do instead?

  6. Abhishek sagt:

    Hi i want to create a .xpi file for the robot formatter.How i can do that?
    Thanks in advance

Hinterlasse eine Antwort

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

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>