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

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

Direct Known Subclasses

Chrome::Bridge, Firefox::Bridge

Constant Summary collapse

QUIT_ERRORS =
[IOError]

Constants included from Find

Find::FINDERS

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

Methods included from Find

#find_element, #find_elements

Constructor Details

#initialize(opts = {}) ⇒ Bridge

Initializes the bridge with the given server URL.

Parameters:

  • url (String)

    url for the remote server

  • http_client (Class)

    an HTTP client class that implements the same interface as DefaultHttpClient

  • desired_capabilities (Capabilities)

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



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/selenium/webdriver/remote/bridge.rb', line 44

def initialize(opts = {})
  opts                 = default_options.merge(opts)
  http_client_class    = opts.delete(:http_client)
  desired_capabilities = opts.delete(:desired_capabilities)
  url                  = opts.delete(:url)

  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 = URI.parse(url)
  uri.path += "/" unless uri.path =~ /\/$/

  @http         = http_client_class.new uri
  @capabilities = create_session(desired_capabilities)
end

Instance Attribute Details

#capabilitiesObject (readonly)

Returns the value of attribute capabilities.



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

def capabilities
  @capabilities
end

#contextObject

Returns the value of attribute context.



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

def context
  @context
end

#httpObject

Returns the value of attribute http.



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

def http
  @http
end

Class Method Details

.command(name, verb, url) ⇒ Object

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



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

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

Instance Method Details

#addCookie(cookie) ⇒ Object



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

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

#browserObject



69
70
71
# File 'lib/selenium/webdriver/remote/bridge.rb', line 69

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

#clearElement(element) ⇒ Object



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

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

#clickElement(element) ⇒ Object

Element functions



261
262
263
# File 'lib/selenium/webdriver/remote/bridge.rb', line 261

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

#closeObject



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

def close
  execute :close
end

#create_session(desired_capabilities) ⇒ Object



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

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



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

def deleteAllCookies
  execute :deleteAllCookies
end

#deleteCookie(name) ⇒ Object



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

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

#dragElement(element, rigth_by, down_by) ⇒ Object



338
339
340
# File 'lib/selenium/webdriver/remote/bridge.rb', line 338

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

#driver_extensionsObject



73
74
75
# File 'lib/selenium/webdriver/remote/bridge.rb', line 73

def driver_extensions
  []
end

#elementEquals(element, other) ⇒ Object



342
343
344
# File 'lib/selenium/webdriver/remote/bridge.rb', line 342

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

#executeScript(script, *args) ⇒ Object



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

def executeScript(script, *args)
  unless capabilities.javascript?
    raise Error::UnsupportedOperationError, "underlying webdriver instance does not support javascript"
  end

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

#findElementByClassName(parent, class_name) ⇒ Object



200
201
202
# File 'lib/selenium/webdriver/remote/bridge.rb', line 200

def findElementByClassName(parent, class_name)
  find_element_by 'class name', class_name, parent
end

#findElementById(parent, id) ⇒ Object



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

def findElementById(parent, id)
  find_element_by 'id', id, parent
end

#findElementByLinkText(parent, link_text) ⇒ Object



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

def findElementByLinkText(parent, link_text)
  find_element_by 'link text', link_text, parent
end

#findElementByName(parent, name) ⇒ Object



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

def findElementByName(parent, name)
  find_element_by 'name', name, parent
end

#findElementByPartialLinkText(parent, link_text) ⇒ Object



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

def findElementByPartialLinkText(parent, link_text)
  find_element_by 'partial link text', link_text, parent
end

#findElementByTagName(parent, tag_name) ⇒ Object



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

def findElementByTagName(parent, tag_name)
  find_element_by 'tag name', tag_name, parent
end

#findElementByXpath(parent, xpath) ⇒ Object



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

def findElementByXpath(parent, xpath)
  find_element_by 'xpath', xpath, parent
end

#findElementsByClassName(parent, class_name) ⇒ Object



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

def findElementsByClassName(parent, class_name)
  find_elements_by 'class name', class_name, parent
end

#findElementsById(parent, id) ⇒ Object



212
213
214
# File 'lib/selenium/webdriver/remote/bridge.rb', line 212

def findElementsById(parent, id)
  find_elements_by 'id', id, parent
end

#findElementsByLinkText(parent, link_text) ⇒ Object



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

def findElementsByLinkText(parent, link_text)
  find_elements_by 'link text', link_text, parent
end

#findElementsByName(parent, name) ⇒ Object



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

def findElementsByName(parent, name)
  find_elements_by 'name', name, parent
end

#findElementsByPartialLinkText(parent, link_text) ⇒ Object



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

def findElementsByPartialLinkText(parent, link_text)
  find_elements_by 'partial link text', link_text, parent
end

#findElementsByTagName(parent, tag_name) ⇒ Object



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

def findElementsByTagName(parent, tag_name)
  find_elements_by 'tag name', tag_name, parent
end

#findElementsByXpath(parent, xpath) ⇒ Object



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

def findElementsByXpath(parent, xpath)
  find_elements_by 'xpath', xpath, parent
end

#get(url) ⇒ Object



92
93
94
# File 'lib/selenium/webdriver/remote/bridge.rb', line 92

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

#getActiveElementObject Also known as: switchToActiveElement



329
330
331
# File 'lib/selenium/webdriver/remote/bridge.rb', line 329

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

#getAllCookiesObject



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

def getAllCookies
  execute :getAllCookies
end

#getCapabilitiesObject



96
97
98
# File 'lib/selenium/webdriver/remote/bridge.rb', line 96

def getCapabilities
  Capabilities.json_create execute(:getCapabilities)
end

#getCurrentUrlObject



112
113
114
# File 'lib/selenium/webdriver/remote/bridge.rb', line 112

def getCurrentUrl
  execute :getCurrentUrl
end

#getCurrentWindowHandleObject



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

def getCurrentWindowHandle
  execute :getCurrentWindowHandle
end

#getElementAttribute(element, name) ⇒ Object



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

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

#getElementLocation(element) ⇒ Object



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

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

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

#getElementSize(element) ⇒ Object



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

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

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

#getElementTagName(element) ⇒ Object



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

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

#getElementText(element) ⇒ Object



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

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

#getElementValue(element) ⇒ Object



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

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

#getElementValueOfCssProperty(element, prop) ⇒ Object



325
326
327
# File 'lib/selenium/webdriver/remote/bridge.rb', line 325

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

#getPageSourceObject



120
121
122
# File 'lib/selenium/webdriver/remote/bridge.rb', line 120

def getPageSource
  execute :getPageSource
end

#getSpeedObject



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

def getSpeed
  execute :getSpeed
end

#getTitleObject



116
117
118
# File 'lib/selenium/webdriver/remote/bridge.rb', line 116

def getTitle
  execute :getTitle
end

#getVisibleObject



124
125
126
# File 'lib/selenium/webdriver/remote/bridge.rb', line 124

def getVisible
  execute :getVisible
end

#getWindowHandlesObject



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

def getWindowHandles
  execute :getWindowHandles
end

#goBackObject



104
105
106
# File 'lib/selenium/webdriver/remote/bridge.rb', line 104

def goBack
  execute :goBack
end

#goForwardObject



108
109
110
# File 'lib/selenium/webdriver/remote/bridge.rb', line 108

def goForward
  execute :goForward
end

#hoverOverElement(element) ⇒ Object



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

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

#isElementDisplayed(element) ⇒ Object



309
310
311
# File 'lib/selenium/webdriver/remote/bridge.rb', line 309

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

#isElementEnabled(element) ⇒ Object



301
302
303
# File 'lib/selenium/webdriver/remote/bridge.rb', line 301

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

#isElementSelected(element) ⇒ Object



305
306
307
# File 'lib/selenium/webdriver/remote/bridge.rb', line 305

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

#quitObject



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

def quit
  execute :quit
rescue *QUIT_ERRORS
end

#refreshObject



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

def refresh
  execute :refresh
end

#sendKeysToElement(element, string) ⇒ Object



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

def sendKeysToElement(element, string)
  execute :sendKeysToElement, {:id => element}, {:value => string.split(//u)}
end

#session_idObject

Returns the current session ID.



81
82
83
# File 'lib/selenium/webdriver/remote/bridge.rb', line 81

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

#setElementSelected(element) ⇒ Object



321
322
323
# File 'lib/selenium/webdriver/remote/bridge.rb', line 321

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

#setImplicitWaitTimeout(milliseconds) ⇒ Object



100
101
102
# File 'lib/selenium/webdriver/remote/bridge.rb', line 100

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

#setSpeed(value) ⇒ Object



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

def setSpeed(value)
  execute :setSpeed, {}, :speed => value
end

#setVisible(bool) ⇒ Object



128
129
130
# File 'lib/selenium/webdriver/remote/bridge.rb', line 128

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

#submitElement(element) ⇒ Object



313
314
315
# File 'lib/selenium/webdriver/remote/bridge.rb', line 313

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

#switchToDefaultContentObject



140
141
142
# File 'lib/selenium/webdriver/remote/bridge.rb', line 140

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

#switchToFrame(id) ⇒ Object



136
137
138
# File 'lib/selenium/webdriver/remote/bridge.rb', line 136

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

#switchToWindow(name) ⇒ Object



132
133
134
# File 'lib/selenium/webdriver/remote/bridge.rb', line 132

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

#toggleElement(element) ⇒ Object



317
318
319
# File 'lib/selenium/webdriver/remote/bridge.rb', line 317

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