1
0
Эх сурвалжийг харах

Added a couple new methods, updated tests

  - available_engines
      this is for ime engines/input languages
      I have not yet figured out how to test this on any platform
      The rest of the ime methods will be implemented as soon
      as I can figure out how to test it on any platform
  - send_modifier
      this will send a 'Alt'/'Ctrl' modifier key which is usually
      accompanied with another key.  A test has been added for
      this subroutine
Gordon Child 14 жил өмнө
parent
commit
55c3594428

+ 1 - 0
MANIFEST

@@ -45,3 +45,4 @@ t/www/jquery-1.3.2.js
 t/www/nestedElements.html
 t/www/popup.html
 t/www/xhtmlTest.html
+t/www/metakeys.html

+ 9 - 1
lib/Selenium/Remote/Commands.pm

@@ -68,6 +68,10 @@ sub new {
                     'method' => 'GET',
                     'url' => "session/:sessionId/screenshot"
         },
+        'availableEngines' => {
+                    'method' => 'GET',
+                    'url' => "session/:sessionId/ime/available_engines"
+        },
         'switchToFrame' => {
                 'method' => 'POST',
                 'url' => "session/:sessionId/frame"
@@ -113,7 +117,7 @@ sub new {
                 'url' => "session/:sessionId/element/active"
         },
         'describeElement' => {
-                'method' => 'POST',
+                'method' => 'GET',
                 'url' => "session/:sessionId/element/:id"
         },
         'findChildElement' => {
@@ -140,6 +144,10 @@ sub new {
                'method' => 'POST',
                'url' => "session/:sessionId/element/:id/value"
         },
+        'sendModifier' => {
+               'method' => 'POST',
+               'url' => "session/:sessionId/modifier"
+        },
         'isElementSelected' => {
             'method' => 'GET',
             'url' => "session/:sessionId/element/:id/selected"

+ 53 - 0
lib/Selenium/Remote/Driver.pm

@@ -727,6 +727,25 @@ sub screenshot {
     return $self->_execute_command($res);
 }
 
+=head2 available_engines
+
+ Description:
+    List all available engines on the machine. To use an engine, it has to be present in this list.
+
+ Output:
+    {Array.<string>} A list of available engines
+
+ Usage:
+    print Dumper $driver->available_engines;
+
+=cut
+
+sub available_engines {
+    my ($self) = @_;
+    my $res = { 'command' => 'availableEngines' };
+    return $self->_execute_command($res);
+}
+
 =head2 switch_to_frame
 
  Description:
@@ -1174,6 +1193,40 @@ sub describe_element {
     return "Not yet supported";
 }
 
+=head2 send_modifier
+
+ Description:
+    Send an event to the active element to depress or release a modifier key.
+
+  Input: 2
+    Required:
+      value - String - The modifier key event to be sent. This key must be one 'Ctrl','Shift','Alt',' or 'Command'/'Meta' as defined by the send keys command
+      isdown - Boolean/String - Whether to generate a key down or key up
+
+ Usage:
+    $driver->send_modifier('Alt','down');
+    $elem->send_keys('c');
+    $driver->send_modifier('Alt','up');
+
+    or
+
+    $driver->send_modifier('Alt',1);
+    $elem->send_keys('c');
+    $driver->send_modifier('Alt',0);
+
+=cut
+
+sub send_modifier {
+  my ($self,$modifier,$isdown) = @_;
+  if($isdown =~ /(down|up)/) {
+    $isdown = $isdown =~ /down/ ? 1:0;
+  }
+  my $res = {'command' => 'sendModifier'};
+  my $params = {value => $modifier,
+                isdown => $isdown};
+  return $self->_execute_command($res,$params);
+}
+
 =head2 compare_elements
 
  Description:

+ 9 - 0
t/01-driver-live.t

@@ -40,6 +40,15 @@ CHECK_DRIVER: {
                 is($ret->{'browserName'}, 'firefox', 'Right capabilities');
               }
 
+IME: {
+    SKIP: {
+    eval {$driver->available_engines;};
+    if($@) {
+      skip "ime not available on this system",3;
+    }
+    };
+}
+
 LOAD_PAGE: {
                 $driver->get("$website/index.html");
                 pass('Loaded home page');

+ 20 - 0
t/02-webelement-live.t

@@ -69,6 +69,26 @@ INPUT: {
             };
        }
 
+MODIFIER: {
+            $driver->get("$website/metakeys.html");
+            $elem = $driver->find_element('metainput','id');
+            eval {
+              $driver->send_modifier('Alt','down');
+              $elem->send_keys('c');
+              $driver->send_modifier('Alt','up');
+            };
+            if($@) {
+              TODO: {
+                local $TODO = "modifier keys broken case 1993 and 1427";
+                fail "sent modifier keys";
+              }
+            } else {
+              $elem = $driver->find_element('metaoutput','id');
+              like($elem->get_value,qr/18/,"sent modifier keys");
+              note $elem->get_value;
+            }
+}
+
 IMAGES: {
             $driver->get("$website/dragAndDropTest.html");
             $elem = $driver->find_element('test1', 'id');

+ 16 - 0
t/www/metakeys.html

@@ -0,0 +1,16 @@
+<html>
+<body>
+<h3>Testing meta keys</h3>
+<script type="text/javascript">
+function displayunicode(e){
+  var unicode=e.keyCode? e.keyCode : e.charCode
+  var meta_out = document.getElementById('metaoutput');
+  meta_out.innerHTML = meta_out.innerHTML + unicode + "<br/>";
+}
+</script>
+<form>
+<input id="metainput" type="text" size="2" maxlength="1" onkeyup="displayunicode(event); this.select()" />
+</form>
+<div id="metaoutput"></div>
+</body>
+</html>