package Selenium::Remote::Commands;
use Moo;
has '_cmds' => (
is => 'lazy',
reader => 'get_cmds',
builder => sub {
return {
'status' => {
'method' => 'GET',
'url' => 'status'
},
'newSession' => {
'method' => 'POST',
'url' => 'session'
},
'getSessions' => {
'method' => 'GET',
'url' => 'sessions'
},
'getCapabilities' => {
'method' => 'GET',
'url' => 'session/:sessionId'
},
'setTimeout' => {
'method' => 'POST',
'url' => 'session/:sessionId/timeouts'
},
'setAsyncScriptTimeout' => {
'method' => 'POST',
'url' => 'session/:sessionId/timeouts/async_script'
},
'setImplicitWaitTimeout' => {
'method' => 'POST',
'url' => 'session/:sessionId/timeouts/implicit_wait'
},
'quit' => {
'method' => 'DELETE',
'url' => "session/:sessionId"
},
'getCurrentWindowHandle' => {
'method' => 'GET',
'url' => "session/:sessionId/window_handle"
},
'getWindowHandles' => {
'method' => 'GET',
'url' => "session/:sessionId/window_handles"
},
'getWindowSize' => {
'method' => 'GET',
'url' => "session/:sessionId/window/:windowHandle/size"
},
'getWindowPosition' => {
'method' => 'GET',
'url' => "session/:sessionId/window/:windowHandle/position"
},
'setWindowSize' => {
'method' => 'POST',
'url' => "session/:sessionId/window/:windowHandle/size"
},
'setWindowPosition' => {
'method' => 'POST',
'url' => "session/:sessionId/window/:windowHandle/position"
},
'getCurrentUrl' => {
'method' => 'GET',
'url' => "session/:sessionId/url"
},
'get' => {
'method' => 'POST',
'url' => "session/:sessionId/url"
},
'goForward' => {
'method' => 'POST',
'url' => "session/:sessionId/forward"
},
'goBack' => {
'method' => 'POST',
'url' => "session/:sessionId/back"
},
'refresh' => {
'method' => 'POST',
'url' => "session/:sessionId/refresh"
},
'executeScript' => {
'method' => 'POST',
'url' => "session/:sessionId/execute"
},
'executeAsyncScript' => {
'method' => 'POST',
'url' => "session/:sessionId/execute_async"
},
'screenshot' => {
'method' => 'GET',
'url' => "session/:sessionId/screenshot"
},
'availableEngines' => {
'method' => 'GET',
'url' => "session/:sessionId/ime/available_engines"
},
'switchToFrame' => {
'method' => 'POST',
'url' => "session/:sessionId/frame"
},
'switchToWindow' => {
'method' => 'POST',
'url' => "session/:sessionId/window"
},
'getAllCookies' => {
'method' => 'GET',
'url' => "session/:sessionId/cookie"
},
'addCookie' => {
'method' => 'POST',
'url' => "session/:sessionId/cookie"
},
'deleteAllCookies' => {
'method' => 'DELETE',
'url' => "session/:sessionId/cookie"
},
'deleteCookieNamed' => {
'method' => 'DELETE',
'url' => "session/:sessionId/cookie/:name"
},
'getPageSource' => {
'method' => 'GET',
'url' => "session/:sessionId/source"
},
'getTitle' => {
'method' => 'GET',
'url' => "session/:sessionId/title"
},
'findElement' => {
'method' => 'POST',
'url' => "session/:sessionId/element"
},
'findElements' => {
'method' => 'POST',
'url' => "session/:sessionId/elements"
},
'getActiveElement' => {
'method' => 'POST',
'url' => "session/:sessionId/element/active"
},
'describeElement' => {
'method' => 'GET',
'url' => "session/:sessionId/element/:id"
},
'findChildElement' => {
'method' => 'POST',
'url' => "session/:sessionId/element/:id/element"
},
'findChildElements' => {
'method' => 'POST',
'url' => "session/:sessionId/element/:id/elements"
},
'clickElement' => {
'method' => 'POST',
'url' => "session/:sessionId/element/:id/click"
},
'submitElement' => {
'method' => 'POST',
'url' => "session/:sessionId/element/:id/submit"
},
'sendKeysToElement' => {
'method' => 'POST',
'url' => "session/:sessionId/element/:id/value"
},
'sendKeysToActiveElement' => {
'method' => 'POST',
'url' => "session/:sessionId/keys"
},
'sendModifier' => {
'method' => 'POST',
'url' => "session/:sessionId/modifier"
},
'isElementSelected' => {
'method' => 'GET',
'url' => "session/:sessionId/element/:id/selected"
},
'setElementSelected' => {
'method' => 'POST',
'url' => "session/:sessionId/element/:id/selected"
},
'toggleElement' => {
'method' => 'POST',
'url' => "session/:sessionId/element/:id/toggle"
},
'isElementEnabled' => {
'method' => 'GET',
'url' => "session/:sessionId/element/:id/enabled"
},
'getElementLocation' => {
'method' => 'GET',
'url' => "session/:sessionId/element/:id/location"
},
'getElementLocationInView' => {
'method' => 'GET',
'url' => "session/:sessionId/element/:id/location_in_view"
},
'getElementTagName' => {
'method' => 'GET',
'url' => "session/:sessionId/element/:id/name"
},
'clearElement' => {
'method' => 'POST',
'url' => "session/:sessionId/element/:id/clear"
},
'getElementAttribute' => {
'method' => 'GET',
'url' => "session/:sessionId/element/:id/attribute/:name"
},
'elementEquals' => {
'method' => 'GET',
'url' => "session/:sessionId/element/:id/equals/:other"
},
'isElementDisplayed' => {
'method' => 'GET',
'url' => "session/:sessionId/element/:id/displayed"
},
'close' => {
'method' => 'DELETE',
'url' => "session/:sessionId/window"
},
'dragElement' => {
'method' => 'POST',
'url' => "session/:sessionId/element/:id/drag"
},
'getElementSize' => {
'method' => 'GET',
'url' => "session/:sessionId/element/:id/size"
},
'getElementText' => {
'method' => 'GET',
'url' => "session/:sessionId/element/:id/text"
},
'getElementValueOfCssProperty' => {
'method' => 'GET',
'url' => "session/:sessionId/element/:id/css/:propertyName"
},
'mouseMoveToLocation' => {
'method' => 'POST',
'url' => "session/:sessionId/moveto"
},
'getAlertText' => {
'method' => 'GET',
'url' => 'session/:sessionId/alert_text'
},
'sendKeysToPrompt' => {
'method' => 'POST',
'url' => 'session/:sessionId/alert_text'
},
'acceptAlert' => {
'method' => 'POST',
'url' => 'session/:sessionId/accept_alert'
},
'dismissAlert' => {
'method' => 'POST',
'url' => 'session/:sessionId/dismiss_alert'
},
'click' => {
'method' => 'POST',
'url' => 'session/:sessionId/click'
},
'doubleClick' => {
'method' => 'POST',
'url' => 'session/:sessionId/doubleclick'
},
'buttonDown' => {
'method' => 'POST',
'url' => 'session/:sessionId/buttondown'
},
'buttonUp' => {
'method' => 'POST',
'url' => 'session/:sessionId/buttonup'
},
'uploadFile' => {
'method' => 'POST',
'url' => 'session/:sessionId/file'
},
#'setVisible' => {
# 'method' => 'POST',
# 'url' => "session/:sessionId/visible"
#},
#'getVisible' => {
# 'method' => 'GET',
# 'url' => "session/:sessionId/visible"
#},
};
}
);
# helper methods to manipulate the _cmds hash
sub get_url {
my ( $self, $command ) = @_;
return $self->get_cmds->{$command}->{url};
}
sub get_method {
my ( $self, $command ) = @_;
return $self->get_cmds->{$command}->{method};
}
# This method will replace the template & return
sub get_params {
my ( $self, $args ) = @_;
if ( !( defined $args->{'session_id'} ) ) {
return;
}
my $data = {};
my $command = $args->{'command'};
my $url = $self->get_url($command);
# Do the var substitutions.
$url =~ s/:sessionId/$args->{'session_id'}/;
$url =~ s/:id/$args->{'id'}/;
$url =~ s/:name/$args->{'name'}/;
$url =~ s/:propertyName/$args->{'property_name'}/;
$url =~ s/:other/$args->{'other'}/;
$url =~ s/:windowHandle/$args->{'window_handle'}/;
$data->{'method'} = $self->get_method($command);
$data->{'url'} = $url;
return $data;
}
1;
__END__
=pod
=head1 NAME
Selenium::Remote::Commands - Implement commands for Selenium::Remote::Driver
=head1 SEE ALSO
For more information about Selenium , visit the website at
L.
=head1 BUGS
The Selenium issue tracking system is available online at
L.
=head1 CURRENT MAINTAINER
Daniel Gempesaw C<< >>