Gotcha: Selenium-Tests ohne Netzwerk 0

Posted by fwoeck
on Thursday, May 21

Wenn ich mein Ubuntu-Laptop so ganz ohne Netzwerkverbindung starte – kein LAN/WAN, entsteht ein nerviges Phänomen: der Firefox, der von Selenium bei einem Integrationstest gestartet wird, hält sich für schlau und startet im Offline-Modus.

Kein Problem, würde man denken: es wird ja eh nur auf der 127.0.0.1 getestet. Ha! Auch lokale Seiten lassen sich nicht aufrufen und ergo meldet Selenium einen Sessionfehler.

Das Anlegen von dummy-Gateways, DNS-Servern etc. hat da nichts gebracht (wie kriegt der Browser eigentlich raus, dass kein WAN da ist?). Aber: wenn man den NetworkManager beendet, ist auf einmal alles gut:

sudo /etc/init.d/NetworkManager stop

Schritt Vier: Selenium-Support 0

Posted by fwoeck
on Saturday, March 28

Wie sieht’s mit Selenium in cucumber und Kumpels aus (webrat kann ja kein JScript/Ajax)? Dies sind die Schritte zur Aktivierung:

Ein paar gems

gem install selenium-client
gem install bmabey-database_cleaner

Der database-cleaner besorgt im Selenium-Modus das Rollback der Datenbank. Im webrat-Modus tut Rails dies selbst durch stornierte Transaktionen.

Firefox-Binary verlinken

In Ubuntu muss ein SymLink auf das aktuelle Firefox-Binary gesetzt werden:

sudo ln -s /usr/lib/firefox-3.0.8/firefox /usr/bin/firefox-bin

Weil er direkt auf die Binaryversion zeigt, zerbricht er leider bei Updates.

Anpassung der cucumber-Umgebung

Da sicher nicht alle Features Ajax/JScript benötigen, ist es pfiffig, zwei getrennte Umgebungen – plain (nur webrat) und enhanced (mit selenium) – zu definieren. Dazu legt man eine entsprechende cucumber.yml in’s Rails-root(!) und schafft die Filestruktur wie unten angegeben:

cucumber.yml:

1
2
3
4
5
default: -r features/support/env.rb -r features/support/plain.rb \
           -r features/step_definitions features/plain

selenium: -r features/support/env.rb -r features/support/enhanced.rb \
           -r features/step_definitions features/enhanced

feature-Tree:

features(devel) > tree
.
|-- enhanced
|   `-- 533386.feature
|-- plain
|   `-- 533386.feature
|-- step_definitions
|   |-- session_steps.rb
|   `-- webrat_steps.rb
|-- support
|   |-- enhanced.rb
|   |-- env.rb
|   |-- paths.rb
|   `-- plain.rb

Hier habe ich zu Testzwecken einfach das gleiche 533386.feature-File für beide Umgebungen benutzt.

Die support/enhanced.rb:

1
2
3
4
5
6
7
8
9
10
11
12
require 'spec/expectations'
require 'selenium'
require 'webrat'
 
Webrat.configure do |config|
  config.mode = :selenium
  config.application_environment = :test
end
 
require 'database_cleaner'
require 'database_cleaner/cucumber'
DatabaseCleaner.strategy = :truncation

Wenn man hier das environment auf “test” setzt, benötigt man keine explizite “selenium”-Railsumgebung mehr.

Die support/env.rb:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ENV["RAILS_ENV"] = "test"
require File.expand_path(File.dirname(__FILE__) + '/../../config/environment')
require 'cucumber/rails/world'
require 'cucumber/formatters/unicode'
Cucumber::Rails.bypass_rescue

require 'webrat'

Webrat.configure do |config|
  config.mode = :rails
end

require 'cucumber/rails/rspec'
require 'webrat/core/matchers'
require 'factory_girl'

Es wird hier vor allem das “use_transactional_fixtures” der normalen Konfiguration entfernt. Dies kommt in die support/plain.rb:


Cucumber::Rails.use_transactional_fixtures

Aufruf der beiden Modi

Auf geht’s:

cucumber

allein ruft nun die plain-Features mit webrat auf und das Kommando

cucumber -p selenium

entsprechend die enhanced-Features mit Selenium. Ein manuelles Starten des selenium-Dienstes ist nicht vorher notwendig.

Wichtig: wie sich gezeigt hat, ist das benutzte webrat-Plugin (Version pre 0.4.3) noch buggy. Dieser Patch beseitigt ein Problem, bei dem einzelne Tests zufällig mit 0ms-Timeouts abbrachen..

Integration mit pickler/Tracker

Die Integration mit dem Pivotal Tracker via pickler funktioniert auch in den Unterordnern – man ruft die Features jetzt nur mit Pfad auf:

pickler pull features/enhanced/539953.feature

Hurra, sehr cool das!

Weblinks

  1. cucumber/setting-up-selenium
  2. webrat/selenium.rb
  3. http://seleniumhq.org/download/
  4. groups.google.com/group/webrat
  5. bmabey/database_cleaner
  6. examples/selenium_webrat
  7. http://gist.github.com/83635

Multisession-Firefox mit CookiePie 0

Posted by fwoeck
on Sunday, February 22

Das Firefox-Plugin CookiePie gibt dem User die Option eine separate Session- (aka Cookie-) Verwaltung für jeden Tab zu aktivieren.

So wird es einfach, sich an einer Webseite gleichzeitig mit unterschiedlichen Konten anzumelden, ohne auf einen anderen Browser ausweichen zu müssen.

IPV6 in Ubuntu deaktivieren 0

Posted by fwoeck
on Thursday, December 04

Dies ist schnell getan:

vi /etc/modprobe.d/aliases

...
alias net-pf-10 off ipv6

Wer mag, kann den Support auch im Firefox abstellen: man ändert die Option network.dns.disableIPv6 auf true.