Преглед изворни кода

Extend upload_file such that it can accept testing data

Remove testFiles which were non-mockable
George S. Baugh пре 11 година
родитељ
комит
8b24ebb020
5 измењених фајлова са 35 додато и 14 уклоњено
  1. 24 8
      lib/Selenium/Remote/Driver.pm
  2. 4 2
      t/01-driver.t
  3. 7 2
      t/mock-recordings/01-driver-mock-linux.json
  4. 0 1
      t/uploadTest
  5. 0 1
      uploadTest

+ 24 - 8
lib/Selenium/Remote/Driver.pm

@@ -2349,6 +2349,9 @@ sub button_up {
     machine. That file then can be used for testing file upload on web
     forms. Returns the remote-server's path to the file.
 
+    Passing raw data as an argument past the filename will upload
+    that rather than the file's contents.
+
  Usage:
     my $remote_fname = $driver->upload_file( $fname );
     my $element = $driver->find_element( '//input[@id="file"]' );
@@ -2360,17 +2363,17 @@ sub button_up {
 # org.openqa.selenium.remote.RemoteWebElement java class.
 
 sub upload_file {
-    my ( $self, $filename ) = @_;
-    if ( not -r $filename ) { die "upload_file: no such file: $filename"; }
-    my $string = "";    # buffer
-    zip $filename => \$string
-      or die "zip failed: $ZipError\n";    # compress the file into string
-    my $res = { 'command' => 'uploadFile' };    # /session/:SessionId/file
-    require MIME::Base64;
+    my ( $self, $filename, $raw_content ) = @_;
 
+    #If no processing is passed, send the argument raw
     my $params = {
-        file => MIME::Base64::encode_base64($string)          # base64-encoded string
+        file => $raw_content
     };
+
+    #Otherwise, zip/base64 it.
+    $params = $self->_prepare_file($filename) if !defined($raw_content);
+
+    my $res = { 'command' => 'uploadFile' };    # /session/:SessionId/file
     my $ret = $self->_execute_command( $res, $params );
 
     #WORKAROUND: Since this is undocumented selenium functionality, work around a bug.
@@ -2382,6 +2385,19 @@ sub upload_file {
     return $ret;
 }
 
+sub _prepare_file {
+    my ($self,$filename) = @_;
+    if ( not -r $filename ) { die "upload_file: no such file: $filename"; }
+    my $string = "";    # buffer
+    zip $filename => \$string
+      or die "zip failed: $ZipError\n";    # compress the file into string
+    require MIME::Base64;
+
+    return {
+        file => MIME::Base64::encode_base64($string)          # base64-encoded string
+    };
+}
+
 =head2 get_text
 
  Description:

+ 4 - 2
t/01-driver.t

@@ -499,8 +499,10 @@ LOGS: {
 
 UPLOAD: {
     #Webdriver only returns the full filename if there isn't any path components in it, so test both cases
-    like( $driver->upload_file('uploadTest'),qr/uploadTest$/,'upload_file returns FULL path to the file: cwd');
-    like( $driver->upload_file('t/uploadTest'),qr/uploadTest$/,'upload_file returns FULL path to the file: subdir');
+    my $testFile = "UEsDBBQACAAIAFtuNEYAAAAAAAAAAAAAAAAKABUAdXBsb2FkVGVzdFVUCQADjbG+VJ6xvlRVeAQA\n6APoAytJLS4BAFBLBwgMfn/YBgAAAAQAAABQSwECFAMUAAgACABbbjRGDH5/2AYAAAAEAAAACgAN\nAAAAAAAAAAAApIEAAAAAdXBsb2FkVGVzdFVUBQABjbG+VFV4AABQSwUGAAAAAAEAAQBFAAAAUwAA\nAAAA\n";
+    my $otherTestFile = "UEsDBBQACAAIAFtuNEYAAAAAAAAAAAAAAAAMABUAdC91cGxvYWRUZXN0VVQJAAOesb5UnrG+VFV4\nBADoA+gDK0ktLgEAUEsHCAx+f9gGAAAABAAAAFBLAQIUAxQACAAIAFtuNEYMfn/YBgAAAAQAAAAM\nAA0AAAAAAAAAAACkgQAAAAB0L3VwbG9hZFRlc3RVVAUAAZ6xvlRVeAAAUEsFBgAAAAABAAEARwAA\nAFUAAAAAAA==\n";
+    like( $driver->upload_file('uploadTest',$testFile),qr/uploadTest$/,'upload_file returns FULL path to the file: cwd');
+    like( $driver->upload_file('t/uploadTest',$otherTestFile),qr/uploadTest$/,'upload_file returns FULL path to the file: subdir');
 }
 
 QUIT: {

+ 7 - 2
t/mock-recordings/01-driver-mock-linux.json

@@ -253,11 +253,16 @@
    "POST session/36fe41df-65fc-4f99-bcb0-3cad4b8c6f2d/execute {\"args\":[\"checky\"],\"script\":\"\\n          var arg1 = arguments[0];\\n          var elem = window.document.getElementById(arg1);\\n          return elem;\\n        \"}" : [
       "HTTP/1.1 200 OK\nCache-Control: no-cache\nCache-Control: no-cache\nConnection: close\nDate: Wed, 05 Nov 2014 04:44:10 GMT\nServer: Jetty/5.1.x (Linux/3.2.0-23-generic-pae i386 java/1.7.0_51\nContent-Length: 168\nContent-Type: application/json; charset=utf-8\nExpires: Thu, 01 Jan 1970 00:00:00 GMT\nExpires: Thu, 01 Jan 1970 00:00:00 GMT\nClient-Date: Wed, 05 Nov 2014 04:44:10 GMT\nClient-Peer: 127.0.0.1:4444\nClient-Response-Num: 1\n\n{\"status\":0,\"sessionId\":\"36fe41df-65fc-4f99-bcb0-3cad4b8c6f2d\",\"value\":{\"ELEMENT\":\"0\"},\"state\":\"success\",\"class\":\"org.openqa.selenium.remote.Response\",\"hCode\":26539503}\n"
    ],
-   "POST session/36fe41df-65fc-4f99-bcb0-3cad4b8c6f2d/file {\"file\":\"UEsDBBQACAAIAAR0M0YAAAAAAAAAAAAAAAAMABUAdC91cGxvYWRUZXN0VVQJAANTbL1UyGm9VFV4\\nBADoA+gDK0ktLuECAFBLBwjGNbk7BwAAAAUAAABQSwECFAMUAAgACAAEdDNGxjW5OwcAAAAFAAAA\\nDAANAAAAAAAAAAAApIEAAAAAdC91cGxvYWRUZXN0VVQFAAFTbL1UVXgAAFBLBQYAAAAAAQABAEcA\\nAABWAAAAAAA=\\n\"}" : [
-      "HTTP/1.1 200 OK\nCache-Control: no-cache\nCache-Control: no-cache\nConnection: close\nDate: Mon, 19 Jan 2015 21:08:27 GMT\nServer: Jetty/5.1.x (Linux/3.13.0-43-generic amd64 java/1.7.0_65\nContent-Length: 229\nContent-Type: application/json; charset=utf-8\nExpires: Thu, 01 Jan 1970 00:00:00 GMT\nExpires: Thu, 01 Jan 1970 00:00:00 GMT\nClient-Date: Mon, 19 Jan 2015 21:08:27 GMT\nClient-Peer: 192.168.122.26:4444\nClient-Response-Num: 1\n\n{\"sessionId\":\"36fe41df-65fc-4f99-bcb0-3cad4b8c6f2d\",\"status\":0,\"state\":\"success\",\"value\":\"/tmp/ffacbf13-4890-49cc-a61e-92eb7a59ff95/upload5692048746335716335file/t\",\"class\":\"org.openqa.selenium.remote.Response\",\"hCode\":925394417}\n"
+   "POST session/36fe41df-65fc-4f99-bcb0-3cad4b8c6f2d/file {\"file\":\"UEsDBBQACAAIAFtuNEYAAAAAAAAAAAAAAAAMABUAdC91cGxvYWRUZXN0VVQJAAOesb5UnrG+VFV4\\nBADoA+gDK0ktLgEAUEsHCAx+f9gGAAAABAAAAFBLAQIUAxQACAAIAFtuNEYMfn/YBgAAAAQAAAAM\\nAA0AAAAAAAAAAACkgQAAAAB0L3VwbG9hZFRlc3RVVAUAAZ6xvlRVeAAAUEsFBgAAAAABAAEARwAA\\nAFUAAAAAAA==\\n\"}" : [
+      "HTTP/1.1 200 OK\nCache-Control: no-cache\nCache-Control: no-cache\nConnection: close\nDate: Tue, 20 Jan 2015 19:50:54 GMT\nServer: Jetty/5.1.x (Linux/3.13.0-43-generic amd64 java/1.7.0_65\nContent-Length: 229\nContent-Type: application/json; charset=utf-8\nExpires: Thu, 01 Jan 1970 00:00:00 GMT\nExpires: Thu, 01 Jan 1970 00:00:00 GMT\nClient-Date: Tue, 20 Jan 2015 19:50:54 GMT\nClient-Peer: 192.168.122.26:4444\nClient-Response-Num: 1\n\n{\"sessionId\":\"36fe41df-65fc-4f99-bcb0-3cad4b8c6f2d\",\"status\":0,\"state\":\"success\",\"value\":\"/tmp/36fe41df-65fc-4f99-bcb0-3cad4b8c6f2d/upload6211514373071992646file/t\",\"class\":\"org.openqa.selenium.remote.Response\",\"hCode\":354871875}\n"
    ],
+<<<<<<< HEAD
     "POST session/36fe41df-65fc-4f99-bcb0-3cad4b8c6f2d/file {\"file\":\"UEsDBBQACAAIAKh5M0YAAAAAAAAAAAAAAAAKABUAdXBsb2FkVGVzdFVUCQADcXO9VGxzvVRVeAQA\\n6APoAytJLS7hAgBQSwcIxjW5OwcAAAAFAAAAUEsBAhQDFAAIAAgAqHkzRsY1uTsHAAAABQAAAAoA\\nDQAAAAAAAAAAAKSBAAAAAHVwbG9hZFRlc3RVVAUAAXFzvVRVeAAAUEsFBgAAAAABAAEARQAAAFQA\\nAAAAAA==\\n\"}" : [
       "HTTP/1.1 200 OK\nCache-Control: no-cache\nCache-Control: no-cache\nConnection: close\nDate: Mon, 19 Jan 2015 21:14:33 GMT\nServer: Jetty/5.1.x (Linux/3.13.0-43-generic amd64 java/1.7.0_65\nContent-Length: 239\nContent-Type: application/json; charset=utf-8\nExpires: Thu, 01 Jan 1970 00:00:00 GMT\nExpires: Thu, 01 Jan 1970 00:00:00 GMT\nClient-Date: Mon, 19 Jan 2015 21:14:33 GMT\nClient-Peer: 192.168.122.26:4444\nClient-Response-Num: 1\n\n{\"sessionId\":\"36fe41df-65fc-4f99-bcb0-3cad4b8c6f2d\",\"status\":0,\"state\":\"success\",\"value\":\"/tmp/b172f61c-3c28-48dd-a8f3-bdfafd0d7169/upload2815452634228483073file/uploadTest\",\"class\":\"org.openqa.selenium.remote.Response\",\"hCode\":1511467738}\n"
 >>>>>>> Add unit tests for upload_file method.
+=======
+   "POST session/36fe41df-65fc-4f99-bcb0-3cad4b8c6f2d/file {\"file\":\"UEsDBBQACAAIAFtuNEYAAAAAAAAAAAAAAAAKABUAdXBsb2FkVGVzdFVUCQADjbG+VJ6xvlRVeAQA\\n6APoAytJLS4BAFBLBwgMfn/YBgAAAAQAAABQSwECFAMUAAgACABbbjRGDH5/2AYAAAAEAAAACgAN\\nAAAAAAAAAAAApIEAAAAAdXBsb2FkVGVzdFVUBQABjbG+VFV4AABQSwUGAAAAAAEAAQBFAAAAUwAA\\nAAAA\\n\"}" : [
+      "HTTP/1.1 200 OK\nCache-Control: no-cache\nCache-Control: no-cache\nConnection: close\nDate: Tue, 20 Jan 2015 19:50:54 GMT\nServer: Jetty/5.1.x (Linux/3.13.0-43-generic amd64 java/1.7.0_65\nContent-Length: 238\nContent-Type: application/json; charset=utf-8\nExpires: Thu, 01 Jan 1970 00:00:00 GMT\nExpires: Thu, 01 Jan 1970 00:00:00 GMT\nClient-Date: Tue, 20 Jan 2015 19:50:54 GMT\nClient-Peer: 192.168.122.26:4444\nClient-Response-Num: 1\n\n{\"sessionId\":\"36fe41df-65fc-4f99-bcb0-3cad4b8c6f2d\",\"status\":0,\"state\":\"success\",\"value\":\"/tmp/36fe41df-65fc-4f99-bcb0-3cad4b8c6f2d/upload1327928706126941321file/uploadTest\",\"class\":\"org.openqa.selenium.remote.Response\",\"hCode\":567175767}\n"
+>>>>>>> Extend upload_file such that it can accept testing data
    ]
 }

+ 0 - 1
t/uploadTest

@@ -1 +0,0 @@
-test

+ 0 - 1
uploadTest

@@ -1 +0,0 @@
-test