use strict;
use warnings;
use Test::More;
use Selenium::Remote::Driver;
use FindBin;
use lib $FindBin::Bin . '/lib';
use TestHarness;
$Selenium::Remote::Driver::FORCE_WD2 = 1;
my $harness = TestHarness->new(
this_file => $FindBin::Script
);
my %selenium_args = %{ $harness->base_caps };
my $driver = Selenium::Remote::Driver->new(%selenium_args);
$driver->get('http://danielgempesaw.com/Selenium-Remote-Driver/xhtmlTest.html');
# This depends explicitly on the page we're visiting (xhtmlTest.html),
my %finders = (
class => 'navigation',
class_name => 'navigation',
css => 'html',
id => 'linkId',
link => 'this goes to the same place',
link_text => 'this goes to the same place',
name => 'windowOne',
partial_link_text => 'this goes to the same',
tag_name => 'html',
xpath => '//html'
);
foreach my $by (keys %finders) {
my $locator = $finders{$by};
my $method = 'find_element_by_' . $by;
ok($driver->can($method), $method . ': installed properly');
my $elem = $driver->$method($locator);
ok($elem, $method . ': finds an element properly');
ok($elem->isa('Selenium::Remote::WebElement'), $method . ': element is a WebElement');
{
# Briefly suppress warning output for prettier tests
my $warned = 0;
local $SIG{__WARN__} = sub { $warned++ };
ok(!$driver->$method('missing') , $method . ': does not croak on unavailable elements');
ok($warned, $method . ': unavailable elements throw a warning');
}
}
done_testing;