Kaynağa Gözat

Migrated Selenium::Remote::WebElement to Moo

Emmanuel Peroumalnaik 12 yıl önce
ebeveyn
işleme
454f8eb48b
2 değiştirilmiş dosya ile 40 ekleme ve 38 silme
  1. 7 7
      lib/Selenium/Remote/Driver.pm
  2. 33 31
      lib/Selenium/Remote/WebElement.pm

+ 7 - 7
lib/Selenium/Remote/Driver.pm

@@ -1014,7 +1014,7 @@ sub execute_async_script {
 
         # replace any ELEMENTS with WebElement
         if (ref($ret) and (ref($ret) eq 'HASH') and exists $ret->{'ELEMENT'}) {
-            $ret = $self->{webelement_class}->new($ret->{ELEMENT}, $self);
+            $ret = $self->{webelement_class}->new(id => $ret->{ELEMENT}, driver => $self);
         }
         return $ret;
     }
@@ -1087,7 +1087,7 @@ sub _convert_to_webelement {
     if (ref($ret) and (ref($ret) eq 'HASH')) {
         if((keys %$ret==1) and exists $ret->{'ELEMENT'}) {
             # replace an ELEMENT with WebElement
-            return $self->{webelement_class}->new($ret->{ELEMENT}, $self);
+            return $self->{webelement_class}->new(id => $ret->{ELEMENT}, driver => $self);
         }
 
         my %hash;
@@ -1530,7 +1530,7 @@ sub find_element {
             die $@;
           }
         }
-        return $self->{webelement_class}->new($ret_data->{ELEMENT}, $self);
+        return $self->{webelement_class}->new(id => $ret_data->{ELEMENT}, driver => $self);
     }
     else {
         croak "Bad method, expected - class, class_name, css, id, link,
@@ -1586,7 +1586,7 @@ sub find_elements {
         }
         my @elem_obj_arr = ();
         foreach (@$ret_data) {
-          push(@elem_obj_arr, $self->{webelement_class}->new($_->{ELEMENT}, $self));
+          push(@elem_obj_arr, $self->{webelement_class}->new(id => $_->{ELEMENT}, driver => $self));
         }
         return @elem_obj_arr;
     }
@@ -1648,7 +1648,7 @@ sub find_child_element {
             die $@;
           }
         }
-        return $self->{webelement_class}->new($ret_data->{ELEMENT}, $self);
+        return $self->{webelement_class}->new(id => $ret_data->{ELEMENT}, driver => $self);
     }
     else {
         croak "Bad method, expected - class, class_name, css, id, link,
@@ -1707,7 +1707,7 @@ sub find_child_elements {
         my $elem_obj_arr;
         my $i = 0;
         foreach (@$ret_data) {
-            $elem_obj_arr->[$i] = $self->{webelement_class}->new($_->{ELEMENT}, $self);
+            $elem_obj_arr->[$i] = $self->{webelement_class}->new(id => $_->{ELEMENT}, driver => $self);
             $i++;
         }
         return wantarray?@{$elem_obj_arr}:$elem_obj_arr;
@@ -1739,7 +1739,7 @@ sub get_active_element {
     if ($@) {
         croak $@;
     } else {
-        return $self->{webelement_class}->new($ret_data->{ELEMENT}, $self);
+        return $self->{webelement_class}->new(id => $ret_data->{ELEMENT}, driver => $self);
     }
 }
 

+ 33 - 31
lib/Selenium/Remote/WebElement.pm

@@ -1,8 +1,6 @@
 package Selenium::Remote::WebElement;
 
-use strict;
-use warnings;
-
+use Moo;
 use Carp qw(croak);
 
 =head1 NAME
@@ -26,19 +24,18 @@ various element related operations can be carried out.
 
 =cut
 
-sub new {
-    my ($class, $id, $parent) = @_;
-    my $self = {
-        id => $id,
-        driver => $parent,
-    };
-    bless $self, $class or die "Can't bless $class: $!";
-    return $self;
-}
+has 'id' => (
+    is => 'rw',
+);
+
+has 'driver' => (
+    is => 'rw',
+);
+
 
 sub _execute_command {
     my ($self) = shift;
-    return $self->{driver}->_execute_command(@_);
+    return $self->driver->_execute_command(@_);
 }
 
 =head2 click
@@ -100,13 +97,13 @@ sub submit {
 =cut
 
 sub send_keys {
-    my ($self, @strings) = @_;
+    my ( $self, @strings ) = @_;
     my $res = { 'command' => 'sendKeysToElement', 'id' => $self->{id} };
     map { $_ .= "" } @strings;
     my $params = {
         'value' => \@strings,
     };
-    return $self->_execute_command($res, $params);
+    return $self->_execute_command( $res, $params );
 }
 
 =head2 is_selected
@@ -284,14 +281,15 @@ sub clear {
 =cut
 
 sub get_attribute {
-    my ($self, $attr_name) = @_;
-    if (not defined $attr_name) {
+    my ( $self, $attr_name ) = @_;
+    if ( not defined $attr_name ) {
         croak 'Attribute name not provided';
     }
-    my $res = {'command' => 'getElementAttribute',
-               'id' => $self->{id},
-               'name' => $attr_name,
-               };
+    my $res = {
+        'command' => 'getElementAttribute',
+        'id'      => $self->{id},
+        'name'    => $attr_name,
+    };
     return $self->_execute_command($res);
 }
 
@@ -349,16 +347,16 @@ sub is_displayed {
 =cut
 
 sub drag {
-    my ($self, $x, $y) = @_;
-    if ((not defined $x) || (not defined $y)){
+    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 $res = { 'command' => 'dragElement', 'id' => $self->{id} };
     my $params = {
         'x' => $x,
         'y' => $y,
     };
-    return $self->_execute_command($res, $params);
+    return $self->_execute_command( $res, $params );
 }
 
 =head2 get_size
@@ -420,14 +418,15 @@ sub get_text {
 =cut
 
 sub get_css_attribute {
-    my ($self, $attr_name) = @_;
-    if (not defined $attr_name) {
+    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,
-               };
+    my $res = {
+        'command'       => 'getElementValueOfCssProperty',
+        'id'            => $self->{id},
+        'property_name' => $attr_name,
+    };
     return $self->_execute_command($res);
 }
 
@@ -440,6 +439,7 @@ sub get_css_attribute {
     $elem->describe();
 
 =cut
+
 sub describe {
     my ($self) = @_;
     my $res = { 'command' => 'describeElement', 'id' => $self->{id} };
@@ -481,3 +481,5 @@ distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
+480:	hit eof while in pod documentation (no =cut seen)
+	this can cause trouble with some pod utilities