selenium-webdriver 0.0.24 → 0.0.25

Sign up to get free protection for your applications and to get access to all the features.
Files changed (207) hide show
  1. data/{common/src/rb/CHANGES → CHANGES} +13 -0
  2. data/{common/src/rb/README → README} +1 -1
  3. data/{common/src/rb/lib → lib}/selenium-webdriver.rb +0 -0
  4. data/{common/src/rb/lib → lib}/selenium/webdriver.rb +2 -1
  5. data/{common/src/rb/lib → lib}/selenium/webdriver/bridge_helper.rb +0 -0
  6. data/{common/src/rb/lib → lib}/selenium/webdriver/child_process.rb +0 -0
  7. data/{chrome/src/rb/lib → lib}/selenium/webdriver/chrome.rb +0 -0
  8. data/{chrome/src/rb/lib → lib}/selenium/webdriver/chrome/bridge.rb +2 -2
  9. data/{chrome/src/rb/lib → lib}/selenium/webdriver/chrome/command_executor.rb +0 -0
  10. data/lib/selenium/webdriver/chrome/extension.zip +0 -0
  11. data/{chrome/src/rb/lib → lib}/selenium/webdriver/chrome/launcher.rb +26 -20
  12. data/{common/src/rb/lib → lib}/selenium/webdriver/core_ext/dir.rb +0 -0
  13. data/{common/src/rb/lib → lib}/selenium/webdriver/core_ext/string.rb +0 -0
  14. data/{common/src/rb/lib → lib}/selenium/webdriver/driver.rb +0 -0
  15. data/{common/src/rb/lib → lib}/selenium/webdriver/driver_extensions/takes_screenshot.rb +0 -0
  16. data/{common/src/rb/lib → lib}/selenium/webdriver/element.rb +0 -0
  17. data/{common/src/rb/lib → lib}/selenium/webdriver/error.rb +0 -0
  18. data/{common/src/rb/lib → lib}/selenium/webdriver/file_reaper.rb +2 -1
  19. data/{common/src/rb/lib → lib}/selenium/webdriver/find.rb +0 -0
  20. data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox.rb +2 -1
  21. data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/binary.rb +32 -6
  22. data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/bridge.rb +0 -0
  23. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  24. data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/launcher.rb +0 -0
  25. data/lib/selenium/webdriver/firefox/native/linux/amd64/x_ignore_nofocus.so +0 -0
  26. data/lib/selenium/webdriver/firefox/native/linux/x86/x_ignore_nofocus.so +0 -0
  27. data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/profile.rb +37 -72
  28. data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/profiles_ini.rb +0 -0
  29. data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/util.rb +0 -0
  30. data/{jobbie/src/rb/lib → lib}/selenium/webdriver/ie.rb +2 -2
  31. data/{jobbie/src/rb/lib → lib}/selenium/webdriver/ie/bridge.rb +7 -2
  32. data/{jobbie/src/rb/lib → lib}/selenium/webdriver/ie/lib.rb +0 -0
  33. data/{jobbie/prebuilt/Win32/Release → lib/selenium/webdriver/ie/native/win32}/InternetExplorerDriver.dll +0 -0
  34. data/lib/selenium/webdriver/ie/native/x64/InternetExplorerDriver.dll +0 -0
  35. data/{jobbie/src/rb/lib → lib}/selenium/webdriver/ie/util.rb +0 -0
  36. data/{common/src/rb/lib → lib}/selenium/webdriver/keys.rb +0 -0
  37. data/{common/src/rb/lib → lib}/selenium/webdriver/navigation.rb +0 -0
  38. data/{common/src/rb/lib → lib}/selenium/webdriver/options.rb +0 -0
  39. data/{common/src/rb/lib → lib}/selenium/webdriver/platform.rb +5 -1
  40. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote.rb +0 -0
  41. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/bridge.rb +0 -0
  42. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/capabilities.rb +0 -0
  43. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/commands.rb +0 -0
  44. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/http/common.rb +0 -0
  45. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/http/curb.rb +0 -0
  46. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/http/default.rb +5 -1
  47. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/response.rb +0 -0
  48. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/server_error.rb +0 -0
  49. data/{common/src/rb/lib → lib}/selenium/webdriver/target_locator.rb +0 -0
  50. data/{common/src/rb/lib → lib}/selenium/webdriver/timeouts.rb +0 -0
  51. data/lib/selenium/webdriver/zip_helper.rb +30 -0
  52. metadata +73 -214
  53. data/COPYING +0 -204
  54. data/chrome/prebuilt/Win32/Release/npchromedriver.dll +0 -0
  55. data/chrome/prebuilt/x64/Release/npchromedriver.dll +0 -0
  56. data/chrome/src/extension/background.html +0 -9
  57. data/chrome/src/extension/background.js +0 -1029
  58. data/chrome/src/extension/content_script.js +0 -1488
  59. data/chrome/src/extension/icons/busy.png +0 -0
  60. data/chrome/src/extension/icons/free.png +0 -0
  61. data/chrome/src/extension/manifest-nonwin.json +0 -19
  62. data/chrome/src/extension/manifest-win.json +0 -20
  63. data/chrome/src/extension/utils.js +0 -231
  64. data/common/src/js/abstractcommandprocessor.js +0 -132
  65. data/common/src/js/asserts.js +0 -296
  66. data/common/src/js/by.js +0 -149
  67. data/common/src/js/command.js +0 -380
  68. data/common/src/js/core/Blank.html +0 -7
  69. data/common/src/js/core/InjectedRemoteRunner.html +0 -8
  70. data/common/src/js/core/RemoteRunner.html +0 -101
  71. data/common/src/js/core/SeleniumLog.html +0 -109
  72. data/common/src/js/core/TestPrompt.html +0 -145
  73. data/common/src/js/core/TestRunner-splash.html +0 -55
  74. data/common/src/js/core/TestRunner.html +0 -165
  75. data/common/src/js/core/icons/all.png +0 -0
  76. data/common/src/js/core/icons/continue.png +0 -0
  77. data/common/src/js/core/icons/continue_disabled.png +0 -0
  78. data/common/src/js/core/icons/pause.png +0 -0
  79. data/common/src/js/core/icons/pause_disabled.png +0 -0
  80. data/common/src/js/core/icons/selected.png +0 -0
  81. data/common/src/js/core/icons/step.png +0 -0
  82. data/common/src/js/core/icons/step_disabled.png +0 -0
  83. data/common/src/js/core/lib/cssQuery/cssQuery-p.js +0 -6
  84. data/common/src/js/core/lib/cssQuery/src/cssQuery-level2.js +0 -142
  85. data/common/src/js/core/lib/cssQuery/src/cssQuery-level3.js +0 -150
  86. data/common/src/js/core/lib/cssQuery/src/cssQuery-standard.js +0 -53
  87. data/common/src/js/core/lib/cssQuery/src/cssQuery.js +0 -356
  88. data/common/src/js/core/lib/prototype.js +0 -2006
  89. data/common/src/js/core/lib/scriptaculous/builder.js +0 -101
  90. data/common/src/js/core/lib/scriptaculous/controls.js +0 -815
  91. data/common/src/js/core/lib/scriptaculous/dragdrop.js +0 -915
  92. data/common/src/js/core/lib/scriptaculous/effects.js +0 -958
  93. data/common/src/js/core/lib/scriptaculous/scriptaculous.js +0 -47
  94. data/common/src/js/core/lib/scriptaculous/slider.js +0 -283
  95. data/common/src/js/core/lib/scriptaculous/unittest.js +0 -383
  96. data/common/src/js/core/lib/snapsie.js +0 -91
  97. data/common/src/js/core/scripts/find_matching_child.js +0 -69
  98. data/common/src/js/core/scripts/htmlutils.js +0 -8716
  99. data/common/src/js/core/scripts/injection.html +0 -72
  100. data/common/src/js/core/scripts/selenium-api.js +0 -3291
  101. data/common/src/js/core/scripts/selenium-browserbot.js +0 -2457
  102. data/common/src/js/core/scripts/selenium-browserdetect.js +0 -153
  103. data/common/src/js/core/scripts/selenium-commandhandlers.js +0 -379
  104. data/common/src/js/core/scripts/selenium-executionloop.js +0 -175
  105. data/common/src/js/core/scripts/selenium-logging.js +0 -148
  106. data/common/src/js/core/scripts/selenium-remoterunner.js +0 -695
  107. data/common/src/js/core/scripts/selenium-testrunner.js +0 -1362
  108. data/common/src/js/core/scripts/selenium-version.js +0 -5
  109. data/common/src/js/core/scripts/ui-doc.html +0 -808
  110. data/common/src/js/core/scripts/ui-element.js +0 -1644
  111. data/common/src/js/core/scripts/ui-map-sample.js +0 -979
  112. data/common/src/js/core/scripts/user-extensions.js +0 -3
  113. data/common/src/js/core/scripts/user-extensions.js.sample +0 -75
  114. data/common/src/js/core/scripts/xmlextras.js +0 -153
  115. data/common/src/js/core/selenium-logo.png +0 -0
  116. data/common/src/js/core/selenium-test.css +0 -43
  117. data/common/src/js/core/selenium.css +0 -316
  118. data/common/src/js/core/xpath/dom.js +0 -566
  119. data/common/src/js/core/xpath/javascript-xpath-0.1.11.js +0 -2816
  120. data/common/src/js/core/xpath/util.js +0 -549
  121. data/common/src/js/core/xpath/xmltoken.js +0 -149
  122. data/common/src/js/core/xpath/xpath.js +0 -2481
  123. data/common/src/js/extension/README +0 -2
  124. data/common/src/js/extension/dommessenger.js +0 -152
  125. data/common/src/js/factory.js +0 -55
  126. data/common/src/js/future.js +0 -141
  127. data/common/src/js/jsunit.js +0 -40
  128. data/common/src/js/jsunit/app/css/jsUnitStyle.css +0 -50
  129. data/common/src/js/jsunit/app/css/readme +0 -10
  130. data/common/src/js/jsunit/app/emptyPage.html +0 -11
  131. data/common/src/js/jsunit/app/jsUnitCore.js +0 -534
  132. data/common/src/js/jsunit/app/jsUnitMockTimeout.js +0 -81
  133. data/common/src/js/jsunit/app/jsUnitTestManager.js +0 -705
  134. data/common/src/js/jsunit/app/jsUnitTestSuite.js +0 -44
  135. data/common/src/js/jsunit/app/jsUnitTracer.js +0 -102
  136. data/common/src/js/jsunit/app/jsUnitVersionCheck.js +0 -59
  137. data/common/src/js/jsunit/app/main-counts-errors.html +0 -12
  138. data/common/src/js/jsunit/app/main-counts-failures.html +0 -13
  139. data/common/src/js/jsunit/app/main-counts-runs.html +0 -13
  140. data/common/src/js/jsunit/app/main-counts.html +0 -21
  141. data/common/src/js/jsunit/app/main-data.html +0 -178
  142. data/common/src/js/jsunit/app/main-errors.html +0 -23
  143. data/common/src/js/jsunit/app/main-frame.html +0 -19
  144. data/common/src/js/jsunit/app/main-loader.html +0 -45
  145. data/common/src/js/jsunit/app/main-progress.html +0 -25
  146. data/common/src/js/jsunit/app/main-results.html +0 -67
  147. data/common/src/js/jsunit/app/main-status.html +0 -13
  148. data/common/src/js/jsunit/app/testContainer.html +0 -16
  149. data/common/src/js/jsunit/app/testContainerController.html +0 -77
  150. data/common/src/js/jsunit/app/xbDebug.js +0 -306
  151. data/common/src/js/jsunit/changelog.txt +0 -60
  152. data/common/src/js/jsunit/css/jsUnitStyle.css +0 -83
  153. data/common/src/js/jsunit/images/green.gif +0 -0
  154. data/common/src/js/jsunit/images/logo_jsunit.gif +0 -0
  155. data/common/src/js/jsunit/images/powerby-transparent.gif +0 -0
  156. data/common/src/js/jsunit/images/red.gif +0 -0
  157. data/common/src/js/jsunit/licenses/JDOM_license.txt +0 -56
  158. data/common/src/js/jsunit/licenses/Jetty_license.html +0 -213
  159. data/common/src/js/jsunit/licenses/MPL-1.1.txt +0 -470
  160. data/common/src/js/jsunit/licenses/gpl-2.txt +0 -340
  161. data/common/src/js/jsunit/licenses/index.html +0 -141
  162. data/common/src/js/jsunit/licenses/lgpl-2.1.txt +0 -504
  163. data/common/src/js/jsunit/licenses/mpl-tri-license-c.txt +0 -35
  164. data/common/src/js/jsunit/licenses/mpl-tri-license-html.txt +0 -35
  165. data/common/src/js/jsunit/readme.txt +0 -19
  166. data/common/src/js/jsunit/testRunner.html +0 -167
  167. data/common/src/js/jsunit/version.txt +0 -1
  168. data/common/src/js/key.js +0 -117
  169. data/common/src/js/localcommandprocessor.js +0 -171
  170. data/common/src/js/testcase.js +0 -219
  171. data/common/src/js/timing.js +0 -89
  172. data/common/src/js/webdriver.js +0 -860
  173. data/common/src/js/webelement.js +0 -483
  174. data/firefox/prebuilt/Win32/Release/webdriver-firefox.dll +0 -0
  175. data/firefox/prebuilt/amd64/libnoblur64.so +0 -0
  176. data/firefox/prebuilt/i386/libnoblur.so +0 -0
  177. data/firefox/prebuilt/linux/Release/libwebdriver-firefox.so +0 -0
  178. data/firefox/prebuilt/linux64/Release/libwebdriver-firefox.so +0 -0
  179. data/firefox/prebuilt/nsICommandProcessor.xpt +0 -0
  180. data/firefox/prebuilt/nsINativeEvents.xpt +0 -0
  181. data/firefox/prebuilt/nsIResponseHandler.xpt +0 -0
  182. data/firefox/src/extension/chrome.manifest +0 -3
  183. data/firefox/src/extension/components/badCertListener.js +0 -295
  184. data/firefox/src/extension/components/dispatcher.js +0 -495
  185. data/firefox/src/extension/components/driver-component.js +0 -130
  186. data/firefox/src/extension/components/errorcode.js +0 -70
  187. data/firefox/src/extension/components/firefoxDriver.js +0 -831
  188. data/firefox/src/extension/components/json2.js +0 -273
  189. data/firefox/src/extension/components/keytest.html +0 -554
  190. data/firefox/src/extension/components/nsCommandProcessor.js +0 -684
  191. data/firefox/src/extension/components/promptService.js +0 -208
  192. data/firefox/src/extension/components/request.js +0 -219
  193. data/firefox/src/extension/components/response.js +0 -276
  194. data/firefox/src/extension/components/screenshooter.js +0 -81
  195. data/firefox/src/extension/components/session.js +0 -314
  196. data/firefox/src/extension/components/sessionstore.js +0 -226
  197. data/firefox/src/extension/components/socketListener.js +0 -435
  198. data/firefox/src/extension/components/utils.js +0 -1335
  199. data/firefox/src/extension/components/webLoadingListener.js +0 -57
  200. data/firefox/src/extension/components/webdriverserver.js +0 -110
  201. data/firefox/src/extension/components/wrappedElement.js +0 -706
  202. data/firefox/src/extension/content/fxdriver.xul +0 -30
  203. data/firefox/src/extension/content/server.js +0 -95
  204. data/firefox/src/extension/idl/nsICommandProcessor.idl +0 -38
  205. data/firefox/src/extension/idl/nsIResponseHandler.idl +0 -34
  206. data/firefox/src/extension/install.rdf +0 -29
  207. data/jobbie/prebuilt/x64/Release/InternetExplorerDriver.dll +0 -0
@@ -1,3 +1,16 @@
1
+ 0.0.25 (2010-07-19)
2
+ ===================
3
+
4
+ * Prevent Firefox from launching in offline mode (issue #587).
5
+ * Add ability to set Firefox' binary path through Selenium::WebDriver::Firefox::Binary.path=
6
+ * Add ability to install Firefox XPIs through Profile#add_extension.
7
+ * Better packaging/building of Firefox/Chrome extensions, which adds rubyzip as a dependency.
8
+ * Remote client supports HTTPS (issue #613 - thanks kkaempf).
9
+ * Fix error message for TimeOutError in the IE driver (issue #602)
10
+ * Add ability to use Chrome's default profile.
11
+ * Fix for frame behaviour in Chrome (issue #273).
12
+ * Standard gem directory structure (issue #475).
13
+
1
14
  0.0.24 (2010-06-17)
2
15
  ==================
3
16
 
@@ -15,7 +15,7 @@ gem install selenium-webdriver
15
15
 
16
16
  = LICENSE
17
17
 
18
- Copyright 2009 WebDriver committers
18
+ Copyright 2009-2010 WebDriver committers
19
19
 
20
20
  Licensed under the Apache License, Version 2.0 (the "License");
21
21
  you may not use this file except in compliance with the License.
@@ -39,6 +39,7 @@ require "selenium/webdriver/error"
39
39
  require "selenium/webdriver/platform"
40
40
  require "selenium/webdriver/child_process"
41
41
  require "selenium/webdriver/file_reaper"
42
+ require "selenium/webdriver/zip_helper"
42
43
  require "selenium/webdriver/target_locator"
43
44
  require "selenium/webdriver/navigation"
44
45
  require "selenium/webdriver/timeouts"
@@ -61,7 +62,7 @@ module Selenium
61
62
  autoload :Firefox, 'selenium/webdriver/firefox'
62
63
 
63
64
  def self.root
64
- @root ||= File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..", ".."))
65
+ @root ||= File.expand_path(File.join(File.dirname(__FILE__), ".."))
65
66
  end
66
67
 
67
68
  #
@@ -5,10 +5,10 @@ module Selenium
5
5
  # @private
6
6
  class Bridge < Remote::Bridge
7
7
 
8
- def initialize
8
+ def initialize(opts = {})
9
9
  @executor = CommandExecutor.new
10
10
 
11
- @launcher = Launcher.launcher
11
+ @launcher = Launcher.launcher(:default_profile => opts[:default_profile])
12
12
  @launcher.launch(@executor.uri)
13
13
  end
14
14
 
@@ -8,14 +8,14 @@ module Selenium
8
8
 
9
9
  attr_reader :pid
10
10
 
11
- def self.launcher
11
+ def self.launcher(*args)
12
12
  launcher = case Platform.os
13
13
  when :windows
14
- WindowsLauncher.new
14
+ WindowsLauncher.new(*args)
15
15
  when :macosx
16
- MacOSXLauncher.new
16
+ MacOSXLauncher.new(*args)
17
17
  when :unix, :linux
18
- UnixLauncher.new
18
+ UnixLauncher.new(*args)
19
19
  else
20
20
  raise "unknown OS: #{Platform.os}"
21
21
  end
@@ -23,6 +23,11 @@ module Selenium
23
23
  launcher
24
24
  end
25
25
 
26
+ def initialize(opts = {})
27
+ super()
28
+ @default_profile = opts[:default_profile]
29
+ end
30
+
26
31
  def self.binary_path
27
32
  @binary_path ||= (
28
33
  path = possible_paths.find { |f| File.exist?(f) }
@@ -51,7 +56,6 @@ module Selenium
51
56
  cp_r ext_path, tmp_extension_dir
52
57
 
53
58
  if Platform.win?
54
- cp linked_lib_path, tmp_extension_dir
55
59
  mv "#{tmp_extension_dir}/manifest-win.json", "#{tmp_extension_dir}/manifest.json"
56
60
  else
57
61
  mv "#{tmp_extension_dir}/manifest-nonwin.json", "#{tmp_extension_dir}/manifest.json"
@@ -64,19 +68,26 @@ module Selenium
64
68
  end
65
69
 
66
70
  def launch_chrome(server_url)
67
- @process = ChildProcess.new Platform.wrap_in_quotes_if_necessary(self.class.binary_path),
68
- "--load-extension=#{Platform.wrap_in_quotes_if_necessary tmp_extension_dir}",
69
- "--user-data-dir=#{Platform.wrap_in_quotes_if_necessary tmp_profile_dir}",
70
- "--activate-on-launch",
71
- "--disable-hang-monitor",
72
- "--disable-popup-blocking",
73
- "--disable-prompt-on-repost",
74
- server_url
75
- @process.start
71
+ args = [
72
+ Platform.wrap_in_quotes_if_necessary(self.class.binary_path),
73
+ "--load-extension=#{Platform.wrap_in_quotes_if_necessary tmp_extension_dir}",
74
+ "--activate-on-launch",
75
+ "--disable-hang-monitor",
76
+ "--disable-popup-blocking",
77
+ "--disable-prompt-on-repost"
78
+ ]
79
+
80
+ unless @default_profile
81
+ args << "--user-data-dir=#{Platform.wrap_in_quotes_if_necessary tmp_profile_dir}"
82
+ end
83
+
84
+ args << server_url
85
+
86
+ @process = ChildProcess.new(*args).start
76
87
  end
77
88
 
78
89
  def ext_path
79
- @ext_path ||= "#{WebDriver.root}/chrome/src/extension"
90
+ @ext_path ||= ZipHelper.unzip("#{WebDriver.root}/selenium/webdriver/chrome/extension.zip")
80
91
  end
81
92
 
82
93
  def tmp_extension_dir
@@ -122,11 +133,6 @@ module Selenium
122
133
  nil
123
134
  end
124
135
 
125
- def linked_lib_path
126
- # TODO: x64
127
- @linked_lib_path ||= "#{WebDriver.root}/chrome/prebuilt/Win32/Release/npchromedriver.dll"
128
- end
129
-
130
136
  def quit
131
137
  # looks like we need a kill right away on Windows + MRI
132
138
  @process.kill if Platform.engine == :ruby
@@ -8,7 +8,8 @@ module Selenium
8
8
  end
9
9
 
10
10
  def reap?
11
- @reap.nil? || @reap
11
+ @reap = true unless defined?(@reap)
12
+ !!@reap
12
13
  end
13
14
 
14
15
  def tmp_files
@@ -1,5 +1,6 @@
1
1
  require "timeout"
2
2
  require "socket"
3
+ require "rexml/document"
3
4
 
4
5
  require "selenium/webdriver/firefox/util"
5
6
  require "selenium/webdriver/firefox/binary"
@@ -19,7 +20,7 @@ module Selenium
19
20
  DEFAULT_ENABLE_NATIVE_EVENTS = Platform.os == :windows
20
21
  DEFAULT_SECURE_SSL = false
21
22
  DEFAULT_ASSUME_UNTRUSTED_ISSUER = true
22
- DEFAULT_LOAD_NO_FOCUS_LIB = Platform.os == :linux
23
+ DEFAULT_LOAD_NO_FOCUS_LIB = false
23
24
 
24
25
  end
25
26
  end
@@ -5,9 +5,11 @@ module Selenium
5
5
  # @private
6
6
  class Binary
7
7
 
8
- def initialize
9
- ENV['MOZ_NO_REMOTE'] = '1' # able to launch multiple instances
10
- end
8
+ NO_FOCUS_LIBRARY_NAME = "x_ignore_nofocus.so"
9
+ NO_FOCUS_LIBRARIES = [
10
+ ["#{WebDriver.root}/selenium/webdriver/firefox/native/linux/amd64/#{NO_FOCUS_LIBRARY_NAME}", "amd64/#{NO_FOCUS_LIBRARY_NAME}"],
11
+ ["#{WebDriver.root}/selenium/webdriver/firefox/native/linux/x86/#{NO_FOCUS_LIBRARY_NAME}", "x86/#{NO_FOCUS_LIBRARY_NAME}"],
12
+ ]
11
13
 
12
14
  def create_base_profile(name)
13
15
  execute("-CreateProfile", name)
@@ -24,6 +26,12 @@ module Selenium
24
26
 
25
27
  def start_with(profile, *args)
26
28
  ENV['XRE_PROFILE_PATH'] = profile.absolute_path
29
+ ENV['MOZ_NO_REMOTE'] = '1' # able to launch multiple instances
30
+
31
+ if Platform.linux? && (profile.native_events? || profile.load_no_focus_lib?)
32
+ modify_link_library_path profile
33
+ end
34
+
27
35
  execute(*args)
28
36
  cope_with_mac_strangeness(args) if Platform.mac?
29
37
  end
@@ -67,7 +75,27 @@ module Selenium
67
75
 
68
76
  private
69
77
 
78
+ def modify_link_library_path(profile)
79
+ paths = []
80
+ profile_path = profile.absolute_path
81
+
82
+ NO_FOCUS_LIBRARIES.each do |from, to|
83
+ dest = File.join(profile_path, to)
84
+ FileUtils.mkdir_p File.dirname(dest)
85
+ FileUtils.cp from, dest
86
+
87
+ paths << File.expand_path(File.dirname(dest))
88
+ end
89
+
90
+ paths += ENV['LD_LIBRARY_PATH'].to_s.split(File::PATH_SEPARATOR)
91
+
92
+ ENV['LD_LIBRARY_PATH'] = paths.uniq.join(File::PATH_SEPARATOR)
93
+ ENV['LD_PRELOAD'] = NO_FOCUS_LIBRARY_NAME
94
+ end
95
+
70
96
  class << self
97
+ attr_writer :path
98
+
71
99
  def path
72
100
  @path ||= case Platform.os
73
101
  when :macosx
@@ -81,7 +109,7 @@ module Selenium
81
109
  end
82
110
 
83
111
  unless File.file?(@path)
84
- raise Error::WebDriverError, "Could not find Firefox binary. Make sure Firefox is installed (OS: #{Platform.os})"
112
+ raise Error::WebDriverError, "Could not find Firefox binary (os=#{Platform.os}). Make sure Firefox is installed or set the path manually with #{self}.path="
85
113
  end
86
114
 
87
115
  @path
@@ -105,9 +133,7 @@ module Selenium
105
133
  end
106
134
  rescue LoadError
107
135
  # older JRuby or IronRuby does not have win32/registry
108
- nil
109
136
  rescue Win32::Registry::Error
110
- raise Error::WebDriverError, "Firefox not found in the Windows registry. Make sure Firefox is installed"
111
137
  end
112
138
  end # class << self
113
139
 
@@ -3,37 +3,10 @@ module Selenium
3
3
  module Firefox
4
4
  class Profile
5
5
 
6
- ANONYMOUS_PROFILE_NAME = "WEBDRIVER_ANONYMOUS_PROFILE"
7
- EXTENSION_NAME = "fxdriver@googlecode.com"
8
- EM_NAMESPACE_URI = "http://www.mozilla.org/2004/em-rdf#"
9
- NO_FOCUS_LIBRARY_NAME = "libnoblur.so"
10
-
11
- DEFAULT_EXTENSION_SOURCE = File.expand_path("#{WebDriver.root}/firefox/src/extension")
12
-
13
- XPTS = [
14
- ["#{WebDriver.root}/firefox/prebuilt/nsINativeEvents.xpt", "components/nsINativeEvents.xpt"],
15
- ["#{WebDriver.root}/firefox/prebuilt/nsICommandProcessor.xpt", "components/nsICommandProcessor.xpt"],
16
- ["#{WebDriver.root}/firefox/prebuilt/nsIResponseHandler.xpt", "components/nsIResponseHandler.xpt"],
17
- ]
18
-
19
- NATIVE_WINDOWS = [
20
- "#{WebDriver.root}/firefox/prebuilt/Win32/Release/webdriver-firefox.dll",
21
- "platform/WINNT_x86-msvc/components/webdriver-firefox.dll"
22
- ]
23
-
24
- NATIVE_LINUX = [
25
- ["#{WebDriver.root}/firefox/prebuilt/linux/Release/libwebdriver-firefox.so", "platform/Linux_x86-gcc3/components/libwebdriver-firefox.so"],
26
- ["#{WebDriver.root}/firefox/prebuilt/linux64/Release/libwebdriver-firefox.so", "platform/Linux_x86_64-gcc3/components/libwebdriver-firefox.so"]
27
- ]
28
-
29
- NO_FOCUS = [
30
- ["#{WebDriver.root}/firefox/prebuilt/amd64/libnoblur64.so", "amd64/#{NO_FOCUS_LIBRARY_NAME}"],
31
- ["#{WebDriver.root}/firefox/prebuilt/i386/libnoblur.so", "x86/#{NO_FOCUS_LIBRARY_NAME}"],
32
- ]
33
-
34
- SHARED = [
35
- ["#{WebDriver.root}/common/src/js/extension/dommessenger.js", "content/dommessenger.js"]
36
- ]
6
+ ANONYMOUS_PROFILE_NAME = "WEBDRIVER_ANONYMOUS_PROFILE"
7
+ EXTENSION_NAME = "fxdriver@googlecode.com"
8
+ EM_NAMESPACE_URI = "http://www.mozilla.org/2004/em-rdf#"
9
+ WEBDRIVER_EXTENSION_PATH = File.expand_path("#{WebDriver.root}/selenium/webdriver/firefox/extension/webdriver.xpi")
37
10
 
38
11
  attr_reader :name, :directory
39
12
  attr_writer :secure_ssl, :native_events, :load_no_focus_lib
@@ -72,7 +45,6 @@ module Selenium
72
45
 
73
46
  # TODO: replace constants with options hash
74
47
  @port = DEFAULT_PORT
75
- @extension_source = DEFAULT_EXTENSION_SOURCE
76
48
  @native_events = DEFAULT_ENABLE_NATIVE_EVENTS
77
49
  @secure_ssl = DEFAULT_SECURE_SSL
78
50
  @untrusted_issuer = DEFAULT_ASSUME_UNTRUSTED_ISSUER
@@ -132,44 +104,40 @@ module Selenium
132
104
  def add_webdriver_extension(force_creation = false)
133
105
  ext_path = File.join(extensions_dir, EXTENSION_NAME)
134
106
 
135
- if File.exists?(ext_path)
107
+ if File.exists? ext_path
136
108
  return unless force_creation
137
109
  end
138
110
 
139
- FileUtils.rm_rf ext_path
140
- FileUtils.mkdir_p File.dirname(ext_path), :mode => 0700
141
- FileUtils.cp_r @extension_source, ext_path
142
-
143
- from_to = XPTS + SHARED
144
-
145
- if native_events?
146
- case Platform.os
147
- when :linux
148
- NATIVE_LINUX.each do |lib|
149
- from_to << lib
150
- end
151
- when :windows
152
- from_to << NATIVE_WINDOWS
153
- else
154
- raise Error::WebDriverError, "can't enable native events on #{Platform.os.inspect}"
155
- end
156
- end
111
+ add_extension WEBDRIVER_EXTENSION_PATH
112
+ delete_extensions_cache
113
+ end
157
114
 
158
- if load_no_focus_lib?
159
- from_to += NO_FOCUS
160
- modify_link_library_path(NO_FOCUS.map { |source, dest| File.join(ext_path, File.dirname(dest)) })
115
+ #
116
+ # Aadd the extension (directory, .zip or .xpi) at the given path to the profile.
117
+ #
118
+
119
+ def add_extension(path)
120
+ unless File.exist?(path)
121
+ raise Error::WebDriverError, "could not find extension at #{path.inspect}"
161
122
  end
162
123
 
163
- from_to.each do |source, destination|
164
- dest = File.join(ext_path, destination)
165
- FileUtils.mkdir_p File.dirname(dest)
166
- FileUtils.cp source, dest
124
+ if File.directory? path
125
+ root = path
126
+ else
127
+ unless %w[.zip .xpi].include? File.extname(path)
128
+ raise Error::WebDriverError, "expected .zip or .xpi extension, got #{path.inspect}"
129
+ end
130
+
131
+ root = ZipHelper.unzip(path)
167
132
  end
168
133
 
169
- delete_extensions_cache
170
- end
134
+ id = read_id_from_install_rdf(root)
135
+ ext_path = File.join(extensions_dir, id)
171
136
 
172
- # TODO: add_extension
137
+ FileUtils.rm_rf ext_path
138
+ FileUtils.mkdir_p File.dirname(ext_path), :mode => 0700
139
+ FileUtils.cp_r root, ext_path
140
+ end
173
141
 
174
142
  def extensions_dir
175
143
  @extensions_dir ||= File.join(directory, "extensions")
@@ -184,17 +152,6 @@ module Selenium
184
152
  FileUtils.rm_f cache if File.exist?(cache)
185
153
  end
186
154
 
187
- def modify_link_library_path(paths)
188
- old_path = ENV['LD_LIBRARY_PATH']
189
-
190
- unless [nil, ''].include?(old_path)
191
- paths << old_path
192
- end
193
-
194
- ENV['LD_LIBRARY_PATH'] = paths.join(File::PATH_SEPARATOR)
195
- ENV['LD_PRELOAD'] = NO_FOCUS_LIBRARY_NAME
196
- end
197
-
198
155
  def native_events?
199
156
  @native_events == true
200
157
  end
@@ -217,6 +174,13 @@ module Selenium
217
174
 
218
175
  private
219
176
 
177
+ def read_id_from_install_rdf(directory)
178
+ rdf_path = File.join(directory, "install.rdf")
179
+ doc = REXML::Document.new(File.read(rdf_path))
180
+
181
+ REXML::XPath.first(doc, "//em:id").text
182
+ end
183
+
220
184
  def create_tmp_copy(directory)
221
185
  tmp_directory = Dir.mktmpdir("webdriver-rb-profilecopy")
222
186
 
@@ -274,6 +238,7 @@ module Selenium
274
238
  "dom.disable_open_during_load" => 'false',
275
239
  "extensions.update.enabled" => 'false',
276
240
  "extensions.update.notifyUser" => 'false',
241
+ "network.manage-offline-status" => 'false',
277
242
  "security.warn_entering_secure" => 'false',
278
243
  "security.warn_submit_insecure" => 'false',
279
244
  "security.warn_entering_secure.show_once" => 'false',
@@ -4,8 +4,8 @@ module Selenium
4
4
  # @private
5
5
  module IE
6
6
  DLLS = {
7
- :win32 => "#{WebDriver.root}/jobbie/prebuilt/Win32/Release/InternetExplorerDriver.dll",
8
- :x64 => "#{WebDriver.root}/jobbie/prebuilt/x64/Release/InternetExplorerDriver.dll"
7
+ :win32 => "#{WebDriver.root}/selenium/webdriver/ie/native/win32/InternetExplorerDriver.dll",
8
+ :x64 => "#{WebDriver.root}/selenium/webdriver/ie/native/x64/InternetExplorerDriver.dll"
9
9
  }
10
10
  end
11
11
  end