Class: Selenium::WebDriver::Remote::Bridge Private

Inherits:
Object
  • Object
show all
Includes:
BridgeHelper
Defined in:
lib/selenium/webdriver/remote/bridge.rb,
lib/selenium/webdriver/remote/commands.rb
more...

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Constant Summary collapse

QUIT_ERRORS =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

[IOError]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from BridgeHelper

#element_id_from, #parse_cookie_string, #unwrap_script_result

Constructor Details

#initialize(opts = {}) ⇒ Bridge

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Initializes the bridge with the given server URL.

Parameters:

  • url (String)

    url for the remote server

  • http_client (Object)

    an HTTP client instance that implements the same protocol as Http::Default

  • desired_capabilities (Capabilities)

    an instance of Remote::Capabilities describing the capabilities you want

[View source]

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
# File 'lib/selenium/webdriver/remote/bridge.rb', line 43

def initialize(opts = {})
  opts = opts.dup

  http_client          = opts.delete(:http_client) { Http::Default.new }
  desired_capabilities = opts.delete(:desired_capabilities) { Capabilities.firefox }
  url                  = opts.delete(:url) { "http://#{Platform.localhost}:4444/wd/hub" }

  unless opts.empty?
    raise ArgumentError, "unknown option#{'s' if opts.size != 1}: #{opts.inspect}"
  end

  if desired_capabilities.kind_of?(Symbol)
    unless Capabilities.respond_to?(desired_capabilities)
      raise Error::WebDriverError, "invalid desired capability: #{desired_capabilities.inspect}"
    end

    desired_capabilities = Capabilities.send(desired_capabilities)
  end

  uri = url.kind_of?(URI) ? url : URI.parse(url)
  uri.path += "/" unless uri.path =~ /\/$/

  http_client.server_url = uri

  @http         = http_client
  @capabilities = create_session(desired_capabilities)
end

Instance Attribute Details

#capabilitiesObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


33
34
35
# File 'lib/selenium/webdriver/remote/bridge.rb', line 33

def capabilities
  @capabilities
end

#contextObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


32
33
34
# File 'lib/selenium/webdriver/remote/bridge.rb', line 32

def context
  @context
end

#httpObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


32
33
34
# File 'lib/selenium/webdriver/remote/bridge.rb', line 32

def http
  @http
end

Class Method Details

.command(name, verb, url) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Defines a wrapper method for a command, which ultimately calls #execute.

Parameters:

  • name (Symbol)

    name of the resulting method

  • url (String)

    a URL template, which can include some arguments, much like the definitions on the server. the :session_id parameter is implicitly handled, but the remainder will become required method arguments.

  • verb (Symbol)

    the appropriate http verb, such as :get, :post, or :delete

[View source]

28
29
30
# File 'lib/selenium/webdriver/remote/bridge.rb', line 28

def self.command(name, verb, url)
  COMMANDS[name] = [verb, url.freeze]
end

Instance Method Details

#acceptAlertObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

alerts

[View source]

114
115
116
# File 'lib/selenium/webdriver/remote/bridge.rb', line 114

def acceptAlert
  execute :acceptAlert
end

#addCookie(cookie) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

215
216
217
# File 'lib/selenium/webdriver/remote/bridge.rb', line 215

def addCookie(cookie)
  execute :addCookie, {}, :cookie => cookie
end

#browserObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

71
72
73
# File 'lib/selenium/webdriver/remote/bridge.rb', line 71

def browser
  @browser ||= @capabilities.browser_name.gsub(" ", "_").to_sym
end

#clearElement(element) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

307
308
309
# File 'lib/selenium/webdriver/remote/bridge.rb', line 307

def clearElement(element)
  execute :clearElement, :id => element
end

#clickObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

235
236
237
# File 'lib/selenium/webdriver/remote/bridge.rb', line 235

def click
  execute :click, {}, :button => 0
end

#clickElement(element) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

231
232
233
# File 'lib/selenium/webdriver/remote/bridge.rb', line 231

def clickElement(element)
  execute :clickElement, :id => element
end

#closeObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

181
182
183
# File 'lib/selenium/webdriver/remote/bridge.rb', line 181

def close
  execute :close
end

#contextClickObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

243
244
245
# File 'lib/selenium/webdriver/remote/bridge.rb', line 243

def contextClick
  execute :click, {}, :button => 2
end

#create_session(desired_capabilities) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

87
88
89
90
91
92
# File 'lib/selenium/webdriver/remote/bridge.rb', line 87

def create_session(desired_capabilities)
  resp = raw_execute :newSession, {}, :desiredCapabilities => desired_capabilities
  @session_id = resp['sessionId'] || raise(Error::WebDriverError, 'no sessionId in returned payload')

  Capabilities.json_create resp['value']
end

#deleteAllCookiesObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

227
228
229
# File 'lib/selenium/webdriver/remote/bridge.rb', line 227

def deleteAllCookies
  execute :deleteAllCookies
end

#deleteCookie(name) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

219
220
221
# File 'lib/selenium/webdriver/remote/bridge.rb', line 219

def deleteCookie(name)
  execute :deleteCookieNamed, :name => name
end

#dismissAlertObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

118
119
120
# File 'lib/selenium/webdriver/remote/bridge.rb', line 118

def dismissAlert
  execute :dismissAlert
end

#doubleClickObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

239
240
241
# File 'lib/selenium/webdriver/remote/bridge.rb', line 239

def doubleClick
  execute :doubleClick
end

#dragElement(element, right_by, down_by) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

340
341
342
# File 'lib/selenium/webdriver/remote/bridge.rb', line 340

def dragElement(element, right_by, down_by)
  execute :dragElement, {:id => element}, :x => right_by, :y => down_by
end

#driver_extensionsObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

75
76
77
# File 'lib/selenium/webdriver/remote/bridge.rb', line 75

def driver_extensions
  [DriverExtensions::HasInputDevices, DriverExtensions::TakesScreenshot]
end

#elementEquals(element, other) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

344
345
346
# File 'lib/selenium/webdriver/remote/bridge.rb', line 344

def elementEquals(element, other)
  execute :elementEquals, :id => element.ref, :other => other.ref
end

#executeAsyncScript(script, *args) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

208
209
210
211
212
213
# File 'lib/selenium/webdriver/remote/bridge.rb', line 208

def executeAsyncScript(script, *args)
  assert_javascript_enabled

  result = execute :executeAsyncScript, {}, :script => script, :args => args
  unwrap_script_result result
end

#executeScript(script, *args) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

201
202
203
204
205
206
# File 'lib/selenium/webdriver/remote/bridge.rb', line 201

def executeScript(script, *args)
  assert_javascript_enabled

  result = execute :executeScript, {}, :script => script, :args => args
  unwrap_script_result result
end

#find_element_by(how, what, parent = nil) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

348
349
350
351
352
353
354
355
356
# File 'lib/selenium/webdriver/remote/bridge.rb', line 348

def find_element_by(how, what, parent = nil)
  if parent
    id = execute :findChildElement, {:id => parent}, {:using => how, :value => what}
  else
    id = execute :findElement, {}, {:using => how, :value => what}
  end

  Element.new self, element_id_from(id)
end

#find_elements_by(how, what, parent = nil) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

358
359
360
361
362
363
364
365
366
# File 'lib/selenium/webdriver/remote/bridge.rb', line 358

def find_elements_by(how, what, parent = nil)
  if parent
    ids = execute :findChildElements, {:id => parent}, {:using => how, :value => what}
  else
    ids = execute :findElements, {}, {:using => how, :value => what}
  end

  ids.map { |id| Element.new self, element_id_from(id) }
end

#get(url) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

94
95
96
# File 'lib/selenium/webdriver/remote/bridge.rb', line 94

def get(url)
  execute :get, {}, :url => url
end

#getActiveElementObject Also known as: switchToActiveElement

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

335
336
337
# File 'lib/selenium/webdriver/remote/bridge.rb', line 335

def getActiveElement
  Element.new self, element_id_from(execute(:getActiveElement))
end

#getAlertTextObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

126
127
128
# File 'lib/selenium/webdriver/remote/bridge.rb', line 126

def getAlertText
  execute :getAlertText
end

#getAllCookiesObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

223
224
225
# File 'lib/selenium/webdriver/remote/bridge.rb', line 223

def getAllCookies
  execute :getAllCookies
end

#getCapabilitiesObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

98
99
100
# File 'lib/selenium/webdriver/remote/bridge.rb', line 98

def getCapabilities
  Capabilities.json_create execute(:getCapabilities)
end

#getCurrentUrlObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

142
143
144
# File 'lib/selenium/webdriver/remote/bridge.rb', line 142

def getCurrentUrl
  execute :getCurrentUrl
end

#getCurrentWindowHandleObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

193
194
195
# File 'lib/selenium/webdriver/remote/bridge.rb', line 193

def getCurrentWindowHandle
  execute :getCurrentWindowHandle
end

#getElementAttribute(element, name) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

273
274
275
# File 'lib/selenium/webdriver/remote/bridge.rb', line 273

def getElementAttribute(element, name)
  execute :getElementAttribute, :id => element, :name => name
end

#getElementLocation(element) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

285
286
287
288
289
# File 'lib/selenium/webdriver/remote/bridge.rb', line 285

def getElementLocation(element)
  data = execute :getElementLocation, :id => element

  Point.new data['x'], data['y']
end

#getElementLocationOnceScrolledIntoView(element) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

291
292
293
294
295
# File 'lib/selenium/webdriver/remote/bridge.rb', line 291

def getElementLocationOnceScrolledIntoView(element)
  data = execute :getElementLocationOnceScrolledIntoView, :id => element

  Point.new data['x'], data['y']
end

#getElementSize(element) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

297
298
299
300
301
# File 'lib/selenium/webdriver/remote/bridge.rb', line 297

def getElementSize(element)
  data = execute :getElementSize, :id => element

  Dimension.new data['width'], data['height']
end

#getElementTagName(element) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

269
270
271
# File 'lib/selenium/webdriver/remote/bridge.rb', line 269

def getElementTagName(element)
  execute :getElementTagName, :id => element
end

#getElementText(element) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

281
282
283
# File 'lib/selenium/webdriver/remote/bridge.rb', line 281

def getElementText(element)
  execute :getElementText, :id => element
end

#getElementValue(element) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

277
278
279
# File 'lib/selenium/webdriver/remote/bridge.rb', line 277

def getElementValue(element)
  execute :getElementValue, :id => element
end

#getElementValueOfCssProperty(element, prop) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

331
332
333
# File 'lib/selenium/webdriver/remote/bridge.rb', line 331

def getElementValueOfCssProperty(element, prop)
  execute :getElementValueOfCssProperty, :id => element, :property_name => prop
end

#getPageSourceObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

150
151
152
# File 'lib/selenium/webdriver/remote/bridge.rb', line 150

def getPageSource
  execute :getPageSource
end

#getScreenshotObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

197
198
199
# File 'lib/selenium/webdriver/remote/bridge.rb', line 197

def getScreenshot
  execute :screenshot
end

#getTitleObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

146
147
148
# File 'lib/selenium/webdriver/remote/bridge.rb', line 146

def getTitle
  execute :getTitle
end

#getVisibleObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

154
155
156
# File 'lib/selenium/webdriver/remote/bridge.rb', line 154

def getVisible
  execute :getVisible
end

#getWindowHandlesObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

189
190
191
# File 'lib/selenium/webdriver/remote/bridge.rb', line 189

def getWindowHandles
  execute :getWindowHandles
end

#goBackObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

navigation

[View source]

134
135
136
# File 'lib/selenium/webdriver/remote/bridge.rb', line 134

def goBack
  execute :goBack
end

#goForwardObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

138
139
140
# File 'lib/selenium/webdriver/remote/bridge.rb', line 138

def goForward
  execute :goForward
end

#isElementDisplayed(element) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

319
320
321
# File 'lib/selenium/webdriver/remote/bridge.rb', line 319

def isElementDisplayed(element)
  execute :isElementDisplayed, :id => element
end

#isElementEnabled(element) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

311
312
313
# File 'lib/selenium/webdriver/remote/bridge.rb', line 311

def isElementEnabled(element)
  execute :isElementEnabled, :id => element
end

#isElementSelected(element) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

315
316
317
# File 'lib/selenium/webdriver/remote/bridge.rb', line 315

def isElementSelected(element)
  execute :isElementSelected, :id => element
end

#mouseDownObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

247
248
249
# File 'lib/selenium/webdriver/remote/bridge.rb', line 247

def mouseDown
  execute :mouseDown
end

#mouseMoveTo(element, x = nil, y = nil) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

255
256
257
258
259
260
261
262
263
# File 'lib/selenium/webdriver/remote/bridge.rb', line 255

def mouseMoveTo(element, x = nil, y = nil)
  params = { :element => element }

  if x && y
    params.merge!(:xoffset => x, :yoffset => y)
  end

  execute :mouseMoveTo, {}, params
end

#mouseUpObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

251
252
253
# File 'lib/selenium/webdriver/remote/bridge.rb', line 251

def mouseUp
  execute :mouseUp
end

#quitObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

176
177
178
179
# File 'lib/selenium/webdriver/remote/bridge.rb', line 176

def quit
  execute :quit
rescue *QUIT_ERRORS
end

#refreshObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

185
186
187
# File 'lib/selenium/webdriver/remote/bridge.rb', line 185

def refresh
  execute :refresh
end

#sendKeysToElement(element, keys) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

303
304
305
# File 'lib/selenium/webdriver/remote/bridge.rb', line 303

def sendKeysToElement(element, keys)
  execute :sendKeysToElement, {:id => element}, {:value => keys}
end

#sendModifierKeyToActiveElement(key, down) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

265
266
267
# File 'lib/selenium/webdriver/remote/bridge.rb', line 265

def sendModifierKeyToActiveElement(key, down)
  execute :sendModifierKeyToActiveElement, {}, :value => key, :isdown => down
end

#session_idObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the current session ID.

[View source]

83
84
85
# File 'lib/selenium/webdriver/remote/bridge.rb', line 83

def session_id
  @session_id || raise(Error::WebDriverError, "no current session exists")
end

#setAlertValue(keys) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

122
123
124
# File 'lib/selenium/webdriver/remote/bridge.rb', line 122

def setAlertValue(keys)
  execute :setAlertValue, {}, :text => keys.to_s
end

#setElementSelected(element) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

327
328
329
# File 'lib/selenium/webdriver/remote/bridge.rb', line 327

def setElementSelected(element)
  execute :setElementSelected, :id => element
end

#setImplicitWaitTimeout(milliseconds) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

102
103
104
# File 'lib/selenium/webdriver/remote/bridge.rb', line 102

def setImplicitWaitTimeout(milliseconds)
  execute :setImplicitWaitTimeout, {}, :ms => milliseconds
end

#setScriptTimeout(milliseconds) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

106
107
108
# File 'lib/selenium/webdriver/remote/bridge.rb', line 106

def setScriptTimeout(milliseconds)
  execute :setScriptTimeout, {}, :ms => milliseconds
end

#setVisible(bool) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

158
159
160
# File 'lib/selenium/webdriver/remote/bridge.rb', line 158

def setVisible(bool)
  execute :setVisible, {}, bool
end

#submitElement(element) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

323
324
325
# File 'lib/selenium/webdriver/remote/bridge.rb', line 323

def submitElement(element)
  execute :submitElement, :id => element
end

#switchToDefaultContentObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

170
171
172
# File 'lib/selenium/webdriver/remote/bridge.rb', line 170

def switchToDefaultContent
  execute :switchToFrame, {}, :id => nil
end

#switchToFrame(id) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

166
167
168
# File 'lib/selenium/webdriver/remote/bridge.rb', line 166

def switchToFrame(id)
  execute :switchToFrame, {}, :id => id
end

#switchToWindow(name) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

[View source]

162
163
164
# File 'lib/selenium/webdriver/remote/bridge.rb', line 162

def switchToWindow(name)
  execute :switchToWindow, {}, :name => name
end