Module: JsshSocket

Included in:
FireWatir::Container, FireWatir::ElementCollections
Defined in:
lib/firewatir/jssh_socket.rb

Instance Method Summary collapse

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_socketObject



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