Skip to content

Commit 662db2a

Browse files
committed
[rb] test more Firefox addon scenarios
1 parent ba0a025 commit 662db2a

4 files changed

Lines changed: 78 additions & 34 deletions

File tree

common/extensions/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ filegroup(
1111
"//java/test/org/openqa/selenium/firefox:__pkg__",
1212
"//javascript/node/selenium-webdriver:__pkg__",
1313
"//py:__pkg__",
14+
"//rb:__pkg__",
1415
],
1516
)
1617

rb/BUILD.bazel

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,9 @@ ruby_test(
292292
"no-sandbox",
293293
"requires-network",
294294
],
295+
data = [
296+
"//common/extensions",
297+
],
295298
deps = [
296299
":bidi",
297300
":firefox",
@@ -318,6 +321,9 @@ ruby_test(
318321
"no-sandbox",
319322
"requires-network",
320323
],
324+
data = [
325+
"//common/extensions",
326+
],
321327
deps = [
322328
":bidi",
323329
":devtools",

rb/lib/selenium/webdriver/firefox/features.rb

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
# specific language governing permissions and limitations
1818
# under the License.
1919

20-
require 'zip'
21-
2220
module Selenium
2321
module WebDriver
2422
module Firefox
@@ -37,23 +35,11 @@ def commands(command)
3735
end
3836

3937
def install_addon(path, temporary)
40-
if File.directory?(path)
41-
zip = "#{path}.zip"
42-
# Delete zip file if it already exists
43-
File.delete(zip) if File.file?(zip)
44-
45-
Zip::File.open(zip, Zip::File::CREATE) do |z_file|
46-
Dir[File.join(path, "**", "**")].each do |file|
47-
z_file.add(file.sub("#{path}/", ""), file)
48-
end
49-
end
50-
51-
addon = File.open(zip, 'rb') { |crx_file| Base64.strict_encode64 crx_file.read }
52-
# Delete the zip file
53-
File.delete(zip)
54-
else
55-
addon = File.open(path, 'rb') { |crx_file| Base64.strict_encode64 crx_file.read }
56-
end
38+
addon = if File.directory?(path)
39+
Zipper.zip(path)
40+
else
41+
File.open(path, 'rb') { |crx_file| Base64.strict_encode64 crx_file.read }
42+
end
5743

5844
payload = {addon: addon}
5945
payload[:temporary] = temporary unless temporary.nil?

rb/spec/integration/selenium/webdriver/firefox/driver_spec.rb

Lines changed: 66 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ module Selenium
2323
module WebDriver
2424
module Firefox
2525
describe Driver, exclusive: {browser: :firefox} do
26-
let(:extension) { '../../../../../../third_party/firebug/favourite_colour-1.1-an+fx.xpi' }
27-
let(:extension_dir) { '../../../../../../common/extensions/webextensions-selenium-example' }
26+
let(:extensions) { '../../../../../../common/extensions/' }
2827

2928
describe '#print_options' do
3029
let(:magic_number) { 'JVBER' }
@@ -66,27 +65,79 @@ module Firefox
6665
end
6766

6867
describe '#install_addon' do
69-
it 'with path as parameter' do
70-
ext = File.expand_path(extension, __dir__)
71-
driver.install_addon(ext)
68+
it 'install and uninstall xpi file' do
69+
ext = File.expand_path("#{extensions}/webextensions-selenium-example.xpi", __dir__)
70+
id = driver.install_addon(ext)
71+
72+
expect(id).to eq '[email protected]'
73+
driver.navigate.to url_for('blank.html')
74+
75+
injected = driver.find_element(id: "webextensions-selenium-example")
76+
expect(injected.text).to eq "Content injected by webextensions-selenium-example"
77+
78+
driver.uninstall_addon(id)
79+
driver.navigate.refresh
80+
expect(driver.find_elements(id: 'webextensions-selenium-example')).to be_empty
7281
end
7382

74-
it 'with temporary as parameter' do
75-
ext = File.expand_path(extension, __dir__)
76-
driver.install_addon(ext, true)
83+
it 'install and uninstall signed zip file' do
84+
ext = File.expand_path("#{extensions}/webextensions-selenium-example.zip", __dir__)
85+
id = driver.install_addon(ext)
86+
87+
expect(id).to eq '[email protected]'
88+
driver.navigate.to url_for('blank.html')
89+
90+
injected = driver.find_element(id: "webextensions-selenium-example")
91+
expect(injected.text).to eq "Content injected by webextensions-selenium-example"
92+
93+
driver.uninstall_addon(id)
94+
driver.navigate.refresh
95+
expect(driver.find_elements(id: 'webextensions-selenium-example')).to be_empty
7796
end
7897

79-
it 'with path as unpacked directory' do
80-
ext = File.expand_path(extension_dir, __dir__)
81-
driver.install_addon(ext, true)
98+
it 'install and uninstall unsigned zip file' do
99+
ext = File.expand_path("#{extensions}/webextensions-selenium-example-unsigned.zip", __dir__)
100+
id = driver.install_addon(ext, true)
101+
102+
expect(id).to eq '[email protected]'
103+
driver.navigate.to url_for('blank.html')
104+
105+
injected = driver.find_element(id: "webextensions-selenium-example")
106+
expect(injected.text).to eq "Content injected by webextensions-selenium-example"
107+
108+
driver.uninstall_addon(id)
109+
driver.navigate.refresh
110+
expect(driver.find_elements(id: 'webextensions-selenium-example')).to be_empty
82111
end
83-
end
84112

85-
describe '#uninstall_addon' do
86-
it 'uninstalls based on id' do
87-
ext = File.expand_path(extension, __dir__)
113+
it 'install and uninstall signed directory' do
114+
ext = File.expand_path("#{extensions}/webextensions-selenium-example-signed/", __dir__)
88115
id = driver.install_addon(ext)
116+
117+
expect(id).to eq '[email protected]'
118+
driver.navigate.to url_for('blank.html')
119+
120+
injected = driver.find_element(id: "webextensions-selenium-example")
121+
expect(injected.text).to eq "Content injected by webextensions-selenium-example"
122+
123+
driver.uninstall_addon(id)
124+
driver.navigate.refresh
125+
expect(driver.find_elements(id: 'webextensions-selenium-example')).to be_empty
126+
end
127+
128+
it 'install and uninstall unsigned directory' do
129+
ext = File.expand_path("#{extensions}/webextensions-selenium-example/", __dir__)
130+
id = driver.install_addon(ext, true)
131+
132+
expect(id).to eq '[email protected]'
133+
driver.navigate.to url_for('blank.html')
134+
135+
injected = driver.find_element(id: "webextensions-selenium-example")
136+
expect(injected.text).to eq "Content injected by webextensions-selenium-example"
137+
89138
driver.uninstall_addon(id)
139+
driver.navigate.refresh
140+
expect(driver.find_elements(id: 'webextensions-selenium-example')).to be_empty
90141
end
91142
end
92143

0 commit comments

Comments
 (0)