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) = @_;
39 $self->{server_pid} = fork();
40 if(!defined $self->{server_pid}) {
43 if($self->{server_pid} > 0) {
47 $self->{src} = Socialtext::WikiFixture::Selenese->new(
48 host => $self->{host},
49 port => $self->{port},
50 browser => $self->{browser},
51 browser_url => $self->{browser_url},
55 if(!defined $self->{src}) {
62 die "timed out waiting for selenium server to start" if $tries == 5;
64 elsif($self->{server_pid} == 0) {
65 # muttermutter, can't specify a host for selenium
66 exec("$^X -MAlien::SeleniumRC -e 'Alien::SeleniumRC::start(q{-port $self->{port}})'");
72 # okay, we're done, kill the server.
73 get("http://localhost:$self->{port}/selenium-server/driver/?cmd=shutDownSeleniumServer");
79 my ($self, $dir) = @_;
80 my @tests = File::Find::Rule->file()->name('*.html')->in($dir);
81 for my $test (@tests) {
83 $self->run_tests_for($test);
89 my ($self, $html_file) = @_;
90 my $rows = $self->get_rows_for($html_file);
91 $self->{src}->run_test_table($rows);
94 my $te = HTML::TableExtract->new;
96 my ($self, $html_file) = @_;
97 my $html = io($html_file)->all;
99 my $table = ($te->tables)[0];
101 [ map { (!defined $_ or $_ eq "\240") ? () : $_ } @$_ ]
102 } grep { defined $_->[1] } $table->rows;