1 package Test::Harness::Selenium;
5 use Socialtext::WikiFixture::Selenese;
6 use HTML::TableExtract;
13 package Test::Builder;
15 use Class::Method::Modifiers;
16 use ExtUtils::MakeMaker qw(prompt);
18 if (!$ENV{AUTOMATED_TESTING}) {
20 my ($orig, $self) = (shift, shift);
21 my $res = $self->$orig(@_);
23 if ('y' eq prompt "Well that didn't work, did it. Bail out?", 'y') {
33 my ($class, $self) = @_;
35 $ENV{DISPLAY} = $self->{xvnc};
36 my $xvnc_pid = fork();
37 if(!defined $xvnc_pid) {
38 die "couldn't fork xvnc: $!";
41 $self->{xvnc_pid} = $xvnc_pid;
44 exec("vncserver", $self->{xvnc});
52 $self->{server_pid} = fork();
53 if(!defined $self->{server_pid}) {
56 if($self->{server_pid} > 0) {
60 $self->{src} = Socialtext::WikiFixture::Selenese->new(
61 host => $self->{host},
62 port => $self->{port},
63 browser => $self->{browser},
64 browser_url => $self->{browser_url},
68 if(!defined $self->{src}) {
75 die "timed out waiting for selenium server to start" if $tries == 5;
77 elsif($self->{server_pid} == 0) {
78 # muttermutter, can't specify a host for selenium
79 exec("$^X -MAlien::SeleniumRC -e 'Alien::SeleniumRC::start(q{-port $self->{port}})'");
85 # okay, we're done, kill the server.
86 get("http://localhost:$self->{port}/selenium-server/driver/?cmd=shutDownSeleniumServer");
92 my ($self, $dir) = @_;
93 my @tests = File::Find::Rule->file()->name('*.html')->in($dir);
94 for my $test (@tests) {
96 $self->run_tests_for($test);
102 my ($self, $html_file) = @_;
103 my $rows = $self->get_rows_for($html_file);
104 $self->{src}->run_test_table($rows);
107 my $te = HTML::TableExtract->new;
109 my ($self, $html_file) = @_;
110 my $html = io($html_file)->all;
112 my $table = ($te->tables)[0];
114 [ map { (!defined $_ or $_ eq "\240") ? () : $_ } @$_ ]
115 } grep { defined $_->[1] } $table->rows;
121 if(exists $self->{xvnc_pid}) {
122 kill("KILL", $self->{xvnc_pid});