Module: JsshSocket
- Included in:
- FireWatir::Container, FireWatir::ElementCollections
- Defined in:
- lib/firewatir/jssh_socket.rb
Instance Method Summary collapse
-
#js_eval(str) ⇒ Object
Evaluate javascript and return result.
-
#js_eval_method(method_name) ⇒ Object
evaluate the provides javascript method on the current object and return the result.
- #jssh_socket ⇒ Object
-
#read_socket(socket = jssh_socket) ⇒ Object
Description: Reads the javascript execution result from the jssh socket.
Instance Method Details
#js_eval(str) ⇒ Object
Evaluate javascript and return result. Raise an exception if an error occurred.
3 4 5 6 7 8 9 10 11 12 13 14 15 |
# File 'lib/firewatir/jssh_socket.rb', line 3 def js_eval(str) str.gsub!("\n", "") jssh_socket.send("#{str};\n", 0) value = read_socket() if md = /^(\w+)Error:(.*)$/.match(value) errclassname="JS#{md[1]}Error" unless JsshSocket.const_defined?(errclassname) JsshSocket.const_set(errclassname, Class.new(StandardError)) end raise JsshSocket.const_get(errclassname), md[2] end value end |
#js_eval_method(method_name) ⇒ Object
evaluate the provides javascript method on the current object and return the result
19 20 21 |
# File 'lib/firewatir/jssh_socket.rb', line 19 def js_eval_method method_name js_eval("#{element_object}.#{method_name}") end |
#jssh_socket ⇒ Object
23 24 25 |
# File 'lib/firewatir/jssh_socket.rb', line 23 def jssh_socket $jssh_socket || @container.jssh_socket end |
#read_socket(socket = jssh_socket) ⇒ Object
Description:
Reads the javascript execution result from the jssh socket.
Input: - socket - It is the jssh socket, the only point of communication between the browser and firewatir scripts.
Output: The javascript execution result as string.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/firewatir/jssh_socket.rb', line 37 def read_socket(socket = jssh_socket) return_value = "" data = "" receive = true #puts Thread.list s = nil while(s == nil) do s = Kernel.select([socket] , nil , nil, 1) end #if(s != nil) for stream in s[0] data = stream.recv(1024) #puts "data is : #{data}" while(receive) #while(data.length == 1024) return_value += data if(return_value.include?("\n> ")) receive = false else data = stream.recv(1024) end #puts "return_value is : #{return_value}" #puts "data length is : #{data.length}" end end # If received data is less than 1024 characters or for last data # we read in the above loop #return_value += data # Get the command prompt inserted by JSSH #s = Kernel.select([socket] , nil , nil, 0.3) #if(s != nil) # for stream in s[0] # return_value += socket.recv(1024) # end #end length = return_value.length #puts "Return value before removing command prompt is : #{return_value}" #Remove the command prompt. Every result returned by JSSH has "\n> " at the end. if length <= 3 return_value = "" elsif(return_value[0..2] == "\n> ") return_value = return_value[3..length-1] else #return_value = return_value[0..length-3] return_value = return_value[0..length-4] end #puts "Return value after removing command prompt is : #{return_value}" #socket.flush # make sure that command prompt doesn't get there. if(return_value[return_value.length - 3..return_value.length - 1] == "\n> ") return_value = return_value[0..return_value.length - 4] end if(return_value[0..2] == "\n> ") return_value = return_value[3..return_value.length - 1] end #puts "return value is : #{return_value}" return return_value end |