geordi 0.15.7 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/setup-firefox-for-selenium +2 -2
- data/lib/geordi/cuc.rb +2 -2
- data/lib/geordi/firefox_for_selenium.rb +211 -0
- data/lib/geordi/version.rb +1 -1
- metadata +6 -6
- data/lib/geordi/setup_firefox_for_selenium.rb +0 -119
@@ -1,5 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
require File.dirname(__FILE__) + "/../lib/geordi/
|
2
|
+
require File.dirname(__FILE__) + "/../lib/geordi/firefox_for_selenium"
|
3
3
|
require 'tempfile'
|
4
4
|
|
5
|
-
Geordi::
|
5
|
+
Geordi::FirefoxForSelenium.install
|
data/lib/geordi/cuc.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require "rubygems"
|
2
|
-
require File.join(File.dirname(__FILE__), '
|
2
|
+
require File.join(File.dirname(__FILE__), 'firefox_for_selenium')
|
3
3
|
require 'tempfile'
|
4
4
|
|
5
5
|
module Geordi
|
@@ -82,7 +82,7 @@ module Geordi
|
|
82
82
|
|
83
83
|
|
84
84
|
def use_firefox_for_selenium
|
85
|
-
"PATH=#{Geordi::
|
85
|
+
"PATH=#{Geordi::FirefoxForSelenium.path_from_config}:$PATH"
|
86
86
|
end
|
87
87
|
|
88
88
|
|
@@ -0,0 +1,211 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
module Geordi
|
4
|
+
module FirefoxForSelenium
|
5
|
+
|
6
|
+
FIREFOX_FOR_SELENIUM_BASE_PATH = Pathname.new('~/bin/firefoxes').expand_path
|
7
|
+
FIREFOX_FOR_SELENIUM_PROFILE_NAME = 'firefox-for-selenium'
|
8
|
+
DEFAULT_FIREFOX_VERSION = "5.0.1"
|
9
|
+
VERSION_SPECIFICATION_FILE = Pathname.new(".firefox-version")
|
10
|
+
|
11
|
+
def self.install
|
12
|
+
Installer.new.run
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.path_from_config
|
16
|
+
PathFromConfig.new.run
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.path(version)
|
20
|
+
FIREFOX_FOR_SELENIUM_BASE_PATH.join(version)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.binary(version, name = "firefox")
|
24
|
+
path(version).join(name)
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
class PathFromConfig
|
29
|
+
|
30
|
+
def run
|
31
|
+
get_version
|
32
|
+
validate_install
|
33
|
+
path
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def path
|
39
|
+
FirefoxForSelenium.path(@version)
|
40
|
+
end
|
41
|
+
|
42
|
+
def get_version
|
43
|
+
@version = version_from_cuc_file || default_version
|
44
|
+
end
|
45
|
+
|
46
|
+
def default_version
|
47
|
+
puts "No firefox version given, defaulting to #{DEFAULT_FIREFOX_VERSION}."
|
48
|
+
puts "Specify a version by putting it in a file named \"#{VERSION_SPECIFICATION_FILE}\"."
|
49
|
+
puts
|
50
|
+
DEFAULT_FIREFOX_VERSION
|
51
|
+
end
|
52
|
+
|
53
|
+
def validate_install
|
54
|
+
unless FirefoxForSelenium.binary(@version).exist?
|
55
|
+
puts "Firefox #{@version} not found."
|
56
|
+
puts "Install it with"
|
57
|
+
puts " setup-firefox-for-selenium #{@version}"
|
58
|
+
puts
|
59
|
+
puts "Press ENTER to continue anyway or press CTRL+C to abort."
|
60
|
+
gets
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def version_from_cuc_file
|
65
|
+
File.read(VERSION_SPECIFICATION_FILE).strip if VERSION_SPECIFICATION_FILE.exist?
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
class Installer
|
72
|
+
|
73
|
+
def run
|
74
|
+
parse_version
|
75
|
+
say_hello
|
76
|
+
check_if_run_before
|
77
|
+
download_firefox
|
78
|
+
create_separate_profile # do this before the patching because the patched binary calls firefox with a profile that does not yet exist
|
79
|
+
patch_old_firefox
|
80
|
+
configure_old_firefox
|
81
|
+
kkthxbb
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
private
|
86
|
+
|
87
|
+
def execute_command(cmd)
|
88
|
+
system(cmd) or raise "Error while executing command: #{cmd}"
|
89
|
+
end
|
90
|
+
|
91
|
+
def run_firefox_for_selenium(args = '')
|
92
|
+
execute_command("PATH=#{path}:$PATH firefox #{args}")
|
93
|
+
end
|
94
|
+
|
95
|
+
def die(message)
|
96
|
+
puts message
|
97
|
+
puts
|
98
|
+
exit(1)
|
99
|
+
end
|
100
|
+
|
101
|
+
def path
|
102
|
+
FirefoxForSelenium.path(@version)
|
103
|
+
end
|
104
|
+
|
105
|
+
def download_url
|
106
|
+
"ftp://ftp.mozilla.org/pub/firefox/releases/#{@version}/"
|
107
|
+
end
|
108
|
+
|
109
|
+
def binary
|
110
|
+
FirefoxForSelenium.binary(@version)
|
111
|
+
end
|
112
|
+
|
113
|
+
def original_binary
|
114
|
+
FirefoxForSelenium.binary(@version, "firefox-original")
|
115
|
+
end
|
116
|
+
|
117
|
+
def parse_version
|
118
|
+
@version = ARGV.pop
|
119
|
+
@version or die("Usage: setup_firefox_for_selenium VERSION")
|
120
|
+
end
|
121
|
+
|
122
|
+
def say_hello
|
123
|
+
execute_command('clear')
|
124
|
+
puts "Whenever Firefox updates, Selenium breaks. This is annoying."
|
125
|
+
puts "This script will help you create an unchanging version of Firefox for your Selenium tests."
|
126
|
+
puts
|
127
|
+
puts "In particular, this new copy of Firefox will have the following properties:"
|
128
|
+
puts
|
129
|
+
puts "- It won't update itself with a newer version"
|
130
|
+
puts "- It can co-exist with your regular Firefox installation (which you can update at will)"
|
131
|
+
puts "- It will use a profile separate from the one you use for regular Firefox browsing"
|
132
|
+
puts "- It will not try to re-use existing Firefox windows"
|
133
|
+
puts "- It will automatically be used for your Selenium scenarios if you run your Cucumber using the cuc binary from the geordi gem."
|
134
|
+
puts "- It will live in #{path}"
|
135
|
+
puts
|
136
|
+
puts "Press ENTER when you're ready to begin."
|
137
|
+
gets
|
138
|
+
end
|
139
|
+
|
140
|
+
def check_if_run_before
|
141
|
+
if original_binary.exist?
|
142
|
+
puts "This version seems to be already installed."
|
143
|
+
puts
|
144
|
+
puts "Press ENTER to continue anyway or press CTRL+C to abort."
|
145
|
+
gets
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def download_firefox
|
150
|
+
path.mkpath
|
151
|
+
puts "Please download an old version of Firefox from #{download_url} and unpack it to #{path}."
|
152
|
+
puts "Don't create an extra #{path.join("firefox")} directory."
|
153
|
+
puts
|
154
|
+
puts "Press ENTER when you're done."
|
155
|
+
gets
|
156
|
+
File.file?(binary) or raise "Could not find #{binary}"
|
157
|
+
end
|
158
|
+
|
159
|
+
def create_separate_profile
|
160
|
+
puts "Creating a separate profile named '#{FIREFOX_FOR_SELENIUM_PROFILE_NAME}' so your own profile will be safe..."
|
161
|
+
# don't use the patched firefox binary for this, we don't want to give a -p parameter here
|
162
|
+
execute_command("PATH=#{path}:$PATH firefox -no-remote -CreateProfile #{FIREFOX_FOR_SELENIUM_PROFILE_NAME}")
|
163
|
+
puts
|
164
|
+
end
|
165
|
+
|
166
|
+
def patch_old_firefox
|
167
|
+
puts "Patching #{binary} so it uses the new profile and never re-uses windows from other Firefoxes..."
|
168
|
+
execute_command("mv #{binary} #{original_binary}")
|
169
|
+
execute_command("mv #{binary}-bin #{original_binary}-bin")
|
170
|
+
patched_binary = Tempfile.new('firefox')
|
171
|
+
patched_binary.write <<eos
|
172
|
+
#!/usr/bin/env ruby
|
173
|
+
exec('#{original_binary}', '-no-remote', '-P', '#{FIREFOX_FOR_SELENIUM_PROFILE_NAME}', *ARGV)
|
174
|
+
eos
|
175
|
+
patched_binary.close
|
176
|
+
execute_command("mv #{patched_binary.path} #{binary}")
|
177
|
+
execute_command("chmod +x #{binary}")
|
178
|
+
puts
|
179
|
+
end
|
180
|
+
|
181
|
+
def configure_old_firefox
|
182
|
+
puts "This script will now open the patched copy of Firefox."
|
183
|
+
puts
|
184
|
+
puts "Please perform the following steps manually:"
|
185
|
+
puts
|
186
|
+
puts "- Disable the default browser check when Firefox launches"
|
187
|
+
puts "- Check that the version number is correct (#{@version})"
|
188
|
+
puts "- Disable all automatic updates under Edit / Preferences / Advanced / Update (do this quickly or Firefox will already have updated)"
|
189
|
+
puts "- You should not see your bookmarks, addons, plugins from your regular Firefox profile"
|
190
|
+
puts
|
191
|
+
puts "Press ENTER when you're ready to open Firefox and perform these steps."
|
192
|
+
gets
|
193
|
+
run_firefox_for_selenium
|
194
|
+
end
|
195
|
+
|
196
|
+
def kkthxbb
|
197
|
+
puts "Congratulations, you're done!"
|
198
|
+
puts
|
199
|
+
puts "Your patched copy of Firefox will be used when you run Cucumber using the cuc binary that comes with the geordi gem."
|
200
|
+
puts "If you prefer to run Cucumber on your own, you must call it like this:"
|
201
|
+
puts
|
202
|
+
puts " PATH=#{path}:$PATH cucumber"
|
203
|
+
puts
|
204
|
+
puts "Enjoy!"
|
205
|
+
puts
|
206
|
+
end
|
207
|
+
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
data/lib/geordi/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geordi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 95
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 16
|
9
|
+
- 0
|
10
|
+
version: 0.16.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Henning Koch
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2013-
|
18
|
+
date: 2013-10-10 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -89,8 +89,8 @@ files:
|
|
89
89
|
- lib/geordi/capistrano.rb
|
90
90
|
- lib/geordi/cuc.rb
|
91
91
|
- lib/geordi/dump_loader.rb
|
92
|
+
- lib/geordi/firefox_for_selenium.rb
|
92
93
|
- lib/geordi/gitpt.rb
|
93
|
-
- lib/geordi/setup_firefox_for_selenium.rb
|
94
94
|
- lib/geordi/version.rb
|
95
95
|
has_rdoc: true
|
96
96
|
homepage: http://makandra.com
|
@@ -1,119 +0,0 @@
|
|
1
|
-
module Geordi
|
2
|
-
class SetupFirefoxForSelenium
|
3
|
-
|
4
|
-
FIREFOX_FOR_SELENIUM_PATH = '/opt/firefox-for-selenium'
|
5
|
-
FIREFOX_FOR_SELENIUM_BINARY = "#{FIREFOX_FOR_SELENIUM_PATH}/firefox"
|
6
|
-
ORIGINAL_FIREFOX_BINARY = "#{FIREFOX_FOR_SELENIUM_PATH}/firefox-original"
|
7
|
-
FIREFOX_FOR_SELENIUM_PROFILE_NAME = 'firefox-for-selenium'
|
8
|
-
|
9
|
-
class << self
|
10
|
-
|
11
|
-
def execute_command(cmd)
|
12
|
-
system(cmd) or raise "Error while executing command: #{cmd}"
|
13
|
-
end
|
14
|
-
|
15
|
-
def run_firefox_for_selenium(args = '')
|
16
|
-
execute_command("PATH=#{FIREFOX_FOR_SELENIUM_PATH}:$PATH firefox #{args}")
|
17
|
-
end
|
18
|
-
|
19
|
-
def say_hello
|
20
|
-
execute_command('clear')
|
21
|
-
puts "Whenever Firefox updates, Selenium breaks. This is annoying."
|
22
|
-
puts "This script will help you create an unchanging version of Firefox for your Selenium tests."
|
23
|
-
puts
|
24
|
-
puts "In particular, this new copy of Firefox will have the following properties:"
|
25
|
-
puts
|
26
|
-
puts "- It won't update itself with a newer version"
|
27
|
-
puts "- It can co-exist with your regular Firefox installation (which you can update at will)"
|
28
|
-
puts "- It will use a profile separate from the one you use for regular Firefox browsing"
|
29
|
-
puts "- It will not try to re-use existing Firefox windows"
|
30
|
-
puts "- It will automatically be used for your Selenium scenarios if you run your Cucumber using the cuc binary from the geordi gem."
|
31
|
-
puts "- It will live in #{FIREFOX_FOR_SELENIUM_PATH}"
|
32
|
-
puts
|
33
|
-
puts "At some point, this script will ask you for your user password, because some operations need to be run as root."
|
34
|
-
puts
|
35
|
-
puts "Press ENTER when you're ready to begin."
|
36
|
-
gets
|
37
|
-
end
|
38
|
-
|
39
|
-
def check_if_run_before
|
40
|
-
if File.exists?(ORIGINAL_FIREFOX_BINARY)
|
41
|
-
puts "It looks like you have run this script before. No good can come from running this script a second time on the same copy of Firefox."
|
42
|
-
puts
|
43
|
-
puts "Press ENTER to continue anyway or press CTRL+C to abort."
|
44
|
-
gets
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def download_old_firefox
|
49
|
-
puts "Please download an old version of Firefox from ftp://ftp.mozilla.org/pub/firefox/releases/5.0.1/ and unpack it to #{FIREFOX_FOR_SELENIUM_PATH}"
|
50
|
-
puts
|
51
|
-
puts "Press ENTER when you're done."
|
52
|
-
gets
|
53
|
-
File.file?(FIREFOX_FOR_SELENIUM_BINARY) or raise "Could not find #{FIREFOX_FOR_SELENIUM_BINARY}"
|
54
|
-
end
|
55
|
-
|
56
|
-
def create_separate_profile
|
57
|
-
puts "Creating a separate profile named '#{FIREFOX_FOR_SELENIUM_PROFILE_NAME}' so your own profile will be safe..."
|
58
|
-
# don't use the patched firefox binary for this, we don't want to give a -p parameter here
|
59
|
-
execute_command("PATH=#{FIREFOX_FOR_SELENIUM_PATH}:$PATH firefox -no-remote -CreateProfile #{FIREFOX_FOR_SELENIUM_PROFILE_NAME}")
|
60
|
-
puts
|
61
|
-
end
|
62
|
-
|
63
|
-
def patch_old_firefox
|
64
|
-
puts "Patching #{FIREFOX_FOR_SELENIUM_BINARY} so it uses the new profile and never re-uses windows from other Firefoxes..."
|
65
|
-
execute_command("sudo mv #{FIREFOX_FOR_SELENIUM_BINARY} #{ORIGINAL_FIREFOX_BINARY}")
|
66
|
-
execute_command("sudo mv #{FIREFOX_FOR_SELENIUM_BINARY}-bin #{ORIGINAL_FIREFOX_BINARY}-bin")
|
67
|
-
patched_binary = Tempfile.new('firefox')
|
68
|
-
patched_binary.write <<eos
|
69
|
-
#!/usr/bin/env ruby
|
70
|
-
exec('#{ORIGINAL_FIREFOX_BINARY}', '-no-remote', '-P', '#{FIREFOX_FOR_SELENIUM_PROFILE_NAME}', *ARGV)
|
71
|
-
eos
|
72
|
-
patched_binary.close
|
73
|
-
execute_command("sudo mv #{patched_binary.path} #{FIREFOX_FOR_SELENIUM_BINARY}")
|
74
|
-
execute_command("sudo chmod +x #{FIREFOX_FOR_SELENIUM_BINARY}")
|
75
|
-
execute_command("sudo chmod +x #{FIREFOX_FOR_SELENIUM_BINARY}")
|
76
|
-
puts
|
77
|
-
end
|
78
|
-
|
79
|
-
def configure_old_firefox
|
80
|
-
puts "This script will now open the patched copy of Firefox."
|
81
|
-
puts
|
82
|
-
puts "Please perform the following steps manually:"
|
83
|
-
puts
|
84
|
-
puts "- Disable the default browser check when Firefox launches"
|
85
|
-
puts "- Check that the version number is that of the old Firefox version you copied to #{FIREFOX_FOR_SELENIUM_PATH}"
|
86
|
-
puts "- Disable all automatic updates under Edit / Preferences / Advanced / Update (do this quickly or Firefox will already have updated)"
|
87
|
-
puts "- You should not see your bookmarks, addons, plugins from your regular Firefox profile"
|
88
|
-
puts
|
89
|
-
puts "Press ENTER when you're ready to open Firefox and perform these steps."
|
90
|
-
gets
|
91
|
-
run_firefox_for_selenium
|
92
|
-
end
|
93
|
-
|
94
|
-
def kkthxbb
|
95
|
-
puts "Congratulations, you're done!"
|
96
|
-
puts
|
97
|
-
puts "Your patched copy of Firefox will be used when you run Cucumber using the cuc binary that comes with the geordi gem."
|
98
|
-
puts "If you prefer to run Cucumber on your own, you must call it like this:"
|
99
|
-
puts
|
100
|
-
puts " PATH=#{FIREFOX_FOR_SELENIUM_PATH}:$PATH cucumber"
|
101
|
-
puts
|
102
|
-
puts "Enjoy!"
|
103
|
-
puts
|
104
|
-
end
|
105
|
-
|
106
|
-
def run
|
107
|
-
say_hello
|
108
|
-
check_if_run_before
|
109
|
-
download_old_firefox
|
110
|
-
create_separate_profile # do this before the patching because the patched binary calls firefox with a profile that does not yet exist
|
111
|
-
patch_old_firefox
|
112
|
-
configure_old_firefox
|
113
|
-
kkthxbb
|
114
|
-
end
|
115
|
-
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|