package Selenium::Remote::WebElement;
use Moo;
use Carp qw(croak);
=head1 NAME
Selenium::Remote::WebElement - Representation of an HTML Element used by Selenium Remote Driver
=cut
=head1 DESCRIPTION
Selenium Webdriver represents all the HTML elements as WebElement. This module
provides a mechanism to represent them as objects & perform various actions on
the related elements. This module should not be instantiated directly by the end
user. Selenium::Remote::Driver instantiates this module when required. Typically,
the find_element method in Selenium::Remote::Driver returns this object on which
various element related operations can be carried out.
=cut
=head1 FUNCTIONS
=cut
has 'id' => (
is => 'rw',
);
has 'driver' => (
is => 'rw',
handles => [qw(_execute_command)],
);
=head2 click
Description:
Click the element.
Usage:
$elem->click();
=cut
sub click {
my ($self) = @_;
my $res = { 'command' => 'clickElement', 'id' => $self->id };
return $self->_execute_command($res);
}
=head2 submit
Description:
Submit a FORM element. The submit command may also be applied to any element
that is a descendant of a FORM element.
Usage:
$elem->submit();
=cut
sub submit {
my ($self) = @_;
my $res = { 'command' => 'submitElement', 'id' => $self->id };
return $self->_execute_command($res);
}
=head2 send_keys
Description:
Send a sequence of key strokes to an element. If you want to send specific
Keyboard events, then use the WDKeys module along with theis method. See e.g.
for reference
Input: 1
Required:
{ARRAY | STRING} - Array of strings or a string.
Usage:
$elem->send_keys('abcd', 'efg');
$elem->send_keys('hijk');
or
# include the WDKeys module
use Selenium::Remote::WDKeys;
.
.
$elem->send_keys(KEYS->{'space'}, KEYS->{'enter'});
=cut
sub send_keys {
my ( $self, @strings ) = @_;
my $res = { 'command' => 'sendKeysToElement', 'id' => $self->id };
map { $_ .= "" } @strings;
my $params = {
'value' => \@strings,
};
return $self->_execute_command( $res, $params );
}
=head2 is_selected
Description:
Determine if an OPTION element, or an INPUT element of type checkbox or
radiobutton is currently selected.
Output:
BOOLEAN - whether the element is selected
Usage:
$elem->is_selected();
=cut
sub is_selected {
my ($self) = @_;
my $res = { 'command' => 'isElementSelected', 'id' => $self->id };
return $self->_execute_command($res);
}
=head2 set_selected
Description:
Select an OPTION element, or an INPUT element of type checkbox or radiobutton.
Usage:
$elem->set_selected();
Note: DEPRECATED -- use click instead
=cut
sub set_selected {
my ($self) = @_;
my $res = { 'command' => 'setElementSelected', 'id' => $self->id };
return $self->_execute_command($res);
}
=head2 toggle
Description:
Toggle whether an OPTION element, or an INPUT element of type checkbox or
radiobutton is currently selected.
Output:
BOOLEAN - Whether the element is selected after toggling its state.
Usage:
$elem->toggle();
Note: DEPRECATED -- use click instead
=cut
sub toggle {
my ($self) = @_;
my $res = { 'command' => 'toggleElement', 'id' => $self->id };
return $self->_execute_command($res);
}
=head2 is_enabled
Description:
Determine if an element is currently enabled.
Output:
BOOLEAN - Whether the element is enabled.
Usage:
$elem->is_enabled();
=cut
sub is_enabled {
my ($self) = @_;
my $res = { 'command' => 'isElementEnabled', 'id' => $self->id };
return $self->_execute_command($res);
}
=head2 get_element_location
Description:
Determine an element's location on the page. The point (0, 0) refers to the
upper-left corner of the page.
Output:
HASH - The X and Y coordinates for the element on the page.
Usage:
$elem->get_element_location();
=cut
sub get_element_location {
my ($self) = @_;
my $res = { 'command' => 'getElementLocation', 'id' => $self->id };
return $self->_execute_command($res);
}
=head2 get_element_location_in_view
Description:
Determine an element's location on the screen once it has been scrolled
into view.
Note: This is considered an internal command and should only be used to
determine an element's location for correctly generating native events.
Output:
{x:number, y:number} The X and Y coordinates for the element on the page.
Usage:
$elem->get_element_location_in_view();
=cut
sub get_element_location_in_view {
my ($self) = @_;
my $res = { 'command' => 'getElementLocationInView', 'id' => $self->id };
return $self->_execute_command($res);
}
=head2 get_tag_name
Description:
Query for an element's tag name.
Output:
STRING - The element's tag name, as a lowercase string.
Usage:
$elem->get_tag_name();
=cut
sub get_tag_name {
my ($self) = @_;
my $res = { 'command' => 'getElementTagName', 'id' => $self->id };
return $self->_execute_command($res);
}
=head2 clear
Description:
Clear a TEXTAREA or text INPUT element's value.
Usage:
$elem->clear();
=cut
sub clear {
my ($self) = @_;
my $res = { 'command' => 'clearElement', 'id' => $self->id };
return $self->_execute_command($res);
}
=head2 get_attribute
Description:
Get the value of an element's attribute.
Input: 1
Required:
STRING - name of the attribute of the element
Output:
{STRING | NULL} The value of the attribute, or null if it is not set on the element.
Usage:
$elem->get_attribute('name');
=cut
sub get_attribute {
my ( $self, $attr_name ) = @_;
if ( not defined $attr_name ) {
croak 'Attribute name not provided';
}
my $res = {
'command' => 'getElementAttribute',
'id' => $self->id,
'name' => $attr_name,
};
return $self->_execute_command($res);
}
=head2 get_value
Description:
Query for the value of an element, as determined by its value attribute.
Output:
{STRING | NULL} The element's value, or null if it doesn't have a value attribute.
Usage:
$elem->get_value();
=cut
sub get_value {
my ($self) = @_;
return $self->get_attribute('value');
}
=head2 is_displayed
Description:
Determine if an element is currently displayed.
Output:
BOOLEAN - Whether the element is displayed.
Usage:
$elem->is_displayed();
=cut
sub is_displayed {
my ($self) = @_;
my $res = { 'command' => 'isElementDisplayed', 'id' => $self->id };
return $self->_execute_command($res);
}
=head2 drag
Description:
Drag and drop an element. The distance to drag an element should be
specified relative to the upper-left corner of the page and it starts at 0,0
Input: 2
Required:
NUMBER - X axis distance in pixels
NUMBER - Y axis distance in pixels
Usage:
$elem->drag(216,158);
=cut
sub drag {
my ( $self, $x, $y ) = @_;
if ( ( not defined $x ) || ( not defined $y ) ) {
croak 'X & Y pixel coordinates not provided';
}
my $res = { 'command' => 'dragElement', 'id' => $self->id };
my $params = {
'x' => $x,
'y' => $y,
};
return $self->_execute_command( $res, $params );
}
=head2 get_size
Description:
Determine an element's size in pixels. The size will be returned with width
and height properties.
Output:
HASH - The width and height of the element, in pixels.
Usage:
$elem->get_size();
=cut
sub get_size {
my ($self) = @_;
my $res = { 'command' => 'getElementSize', 'id' => $self->id };
return $self->_execute_command($res);
}
=head2 get_text
Description:
Get the innerText of the element.
Output:
STRING - innerText of an element
Usage:
$elem->get_text();
=cut
sub get_text {
my ($self) = @_;
my $res = { 'command' => 'getElementText', 'id' => $self->id };
return $self->_execute_command($res);
}
=head2 get_css_attribute
Description:
Query the value of an element's computed CSS property. The CSS property to
query should be specified using the CSS property name, not the JavaScript
property name (e.g. background-color instead of backgroundColor).
Input: 1
Required:
STRING - name of the css-attribute
Output:
STRING - Value of the css attribute
Usage:
$elem->get_css_attribute('background-color');
=cut
sub get_css_attribute {
my ( $self, $attr_name ) = @_;
if ( not defined $attr_name ) {
croak 'CSS attribute name not provided';
}
my $res = {
'command' => 'getElementValueOfCssProperty',
'id' => $self->id,
'property_name' => $attr_name,
};
return $self->_execute_command($res);
}
=head2 describe
Description:
Describe the identified element
Usage:
$elem->describe();
=cut
sub describe {
my ($self) = @_;
my $res = { 'command' => 'describeElement', 'id' => $self->id };
return $self->_execute_command($res);
}
1;
=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<< >>