NAME
Firefox::Marionette::Element - Represents a Firefox element retrieved using the Marionette protocol
VERSION
Version 1.03
SYNOPSIS
use Firefox::Marionette();
use v5.10;
my $firefox = Firefox::Marionette->new()->go('https://metacpan.org/');
my $element = $firefox->find('//input[@id="search-input"]');
$element->type('Test::More');
DESCRIPTION
This module handles the implementation of a Firefox Element using the Marionette protocol
SUBROUTINES/METHODS
new
returns a new element.
uuid
returns the browser generated UUID connected with this element.
browser
returns the browser connected with the element.
click
sends a 'click' to the element. The browser will wait for any page load to complete or the session's page_load duration to elapse before returning, which, by default is 5 minutes. The click method is also used to choose an option in a select dropdown.
use Firefox::Marionette();
my $firefox = Firefox::Marionette->new(visible => 1)->go('https://ebay.com');
my $select = $firefox->find_tag('select');
foreach my $option ($select->find_tag('option')) {
if ($option->property('value') == 58058) { # Computers/Tablets & Networking
$option->click();
}
}
clear
clears any user supplied input from the element
text
returns the text that is contained by that element (if any)
tag_name
returns the relevant tag name. For example 'a' or 'input'.
rect
returns the current position and size of the element
send_keys
*** DEPRECATED - see type. ***
type
accepts a scalar string as a parameter. It sends the string to this element, such as filling out a text box. This method returns the browser to aid in chaining methods.
switch_to_shadow_root
switches to this element's shadow root
switch_to_frame
switches to this frame within the current window.
attribute
accepts a scalar name a parameter. It returns the initial value of the attribute with the supplied name. Compare with the current value returned by property method.
property
accepts a scalar name a parameter. It returns the current value of the property with the supplied name. Compare with the initial value returned by attribute method.
css
accepts a scalar CSS property name as a parameter. It returns the value of the computed style for that property.
selfie
returns a File::Temp object containing a lossless PNG image screenshot of the element.
accepts the following optional parameters as a hash;
hash - return a SHA256 hex encoded digest of the PNG image rather than the image itself
full - take a screenshot of the whole document unless the first element parameter has been supplied.
scroll - scroll to the element supplied
highlights - a reference to a list containing elements to draw a highlight around
is_enabled
returns true or false if the element is enabled.
is_selected
returns true or false if the element is selected.
is_displayed
returns true or false if the element is displayed.
find
accepts an xpath expression expression> as the first parameter and returns the first element that matches this expression.
This method is subject to the implicit timeout.
use Firefox::Marionette();
use v5.10;
my $firefox = Firefox::Marionette->new()->go('https://metacpan.org/');
my $div = $firefox->find_class('main-content');
$div->find('//input[@id="search-input"]')->type('Test::More');
# OR in list context
my $div = $firefox->find_class('main-content');
foreach my $element ($div->find('//input[@id="search-input"]')) {
$element->type('Test::More');
}
find_id
accepts an id as the first parameter and returns the first element with a matching 'id' property.
This method is subject to the implicit timeout.
use Firefox::Marionette();
use v5.10;
my $firefox = Firefox::Marionette->new()->go('https://metacpan.org/');
my $div = $firefox->find_class('main-content');
$div->find_id('search-input')->type('Test::More');
# OR in list context
my $div = $firefox->find_class('main-content');
foreach my $element ($div->find_id('search-input')) {
$element->type('Test::More');
}
find_name
This method returns the first element with a matching 'name' property.
This method is subject to the implicit timeout.
use Firefox::Marionette();
use v5.10;
my $firefox = Firefox::Marionette->new()->go('https://metacpan.org/');
my $div = $firefox->find_class('main-content');
$div->find_name('q')->type('Test::More');
# OR in list context
my $div = $firefox->find_class('main-content');
foreach my $element ($div->find_name('q')) {
$element->type('Test::More');
}
find_class
accepts a class name as the first parameter and returns the first element with a matching 'class' property.
This method is subject to the implicit timeout.
use Firefox::Marionette();
use v5.10;
my $firefox = Firefox::Marionette->new()->go('https://metacpan.org/');
my $div = $firefox->find_class('main-content');
$div->find_class('form-control home-search-input')->type('Test::More');
# OR in list context
my $div = $firefox->find_class('main-content');
foreach my $element ($div->find_class('form-control home-search-input')) {
$element->type('Test::More');
}
find_selector
accepts a CSS Selector as the first parameter and returns the first element that matches that selector.
This method is subject to the implicit timeout.
use Firefox::Marionette();
use v5.10;
my $firefox = Firefox::Marionette->new()->go('https://metacpan.org/');
my $div = $firefox->find_class('main-content');
$div->find_selector('input.home-search-input')->type('Test::More');
# OR in list context
my $div = $firefox->find_class('main-content');
foreach my $element ($div->find_selector('input.home-search-input')) {
$element->type('Test::More');
}
find_tag
accepts a tag name as the first parameter and returns the first element with this tag name.
This method is subject to the implicit timeout.
use Firefox::Marionette();
use v5.10;
my $firefox = Firefox::Marionette->new()->go('https://metacpan.org/');
my $div = $firefox->find_class('main-content');
my $input = $div->find_tag('input');
# OR in list context
my $div = $firefox->find_class('main-content');
foreach my $element ($div->find_tag('input')) {
# do something
}
find_link
accepts a text string as the first parameter and returns the first link element that has a matching link text.
This method is subject to the implicit timeout.
use Firefox::Marionette();
use v5.10;
my $firefox = Firefox::Marionette->new()->go('https://metacpan.org/');
my $div = $firefox->find_class('container-fluid');
$div->find_link('API')->click();
# OR in list context
my $div = $firefox->find_class('container-fluid');
foreach my $element ($div->find_link('API')) {
$element->click();
}
find_partial
accepts a text string as the first parameter and returns the first link element that has a partially matching link text.
This method is subject to the implicit timeout.
use Firefox::Marionette();
use v5.10;
my $firefox = Firefox::Marionette->new()->go('https://metacpan.org/');
my $div = $firefox->find_class('container-fluid');
$div->find_partial('AP')->click();
# OR in list context
my $div = $firefox->find_class('container-fluid');
foreach my $element ($div->find_partial('AP')) {
$element->click();
}
DIAGNOSTICS
None.
CONFIGURATION AND ENVIRONMENT
Firefox::Marionette::Element requires no configuration files or environment variables.
DEPENDENCIES
None.
INCOMPATIBILITIES
None reported.
BUGS AND LIMITATIONS
No bugs have been reported.
Please report any bugs or feature requests to bug-firefox-marionette@rt.cpan.org
, or through the web interface at http://rt.cpan.org.
AUTHOR
David Dick <ddick@cpan.org>
LICENSE AND COPYRIGHT
Copyright (c) 2020, David Dick <ddick@cpan.org>
. All rights reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See "perlartistic" in perlartistic.
DISCLAIMER OF WARRANTY
BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR CORRECTION.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.