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 my $server_pid = fork();
41 $self->{server_pid} = $server_pid;
45 $self->{src} = Socialtext::WikiFixture::Selenese->new(
46 host => $self->{host},
47 port => $self->{port},
48 browser => $self->{browser},
49 browser_url => $self->{browser_url},
53 if(!defined $self->{src}) {
60 die "timed out waiting for selenium server to start" if $tries == 5;
62 elsif($server_pid == 0) {
65 # muttermutter, can't specify a host for selenium
66 Alien::SeleniumRC::start("-port $self->{port}");
75 # okay, we're done, kill the server.
76 get("http://localhost:$self->{port}/selenium-server/driver/?cmd=shutDownSeleniumServer");
81 my ($self, $dir) = @_;
82 my @tests = File::Find::Rule->file()->name('*.html')->in($dir);
83 for my $test (@tests) {
85 $self->run_tests_for($test);
91 my ($self, $html_file) = @_;
92 my $rows = $self->get_rows_for($html_file);
93 eval { $self->{src}->run_test_table($rows); };
96 my $te = HTML::TableExtract->new;
98 my ($self, $html_file) = @_;
99 my $html = io($html_file)->all;
101 my $table = ($te->tables)[0];
103 [ map { (!defined $_ or $_ eq "\240") ? () : $_ } @$_ ]
104 } grep { defined $_->[1] } $table->rows;