Skip to content

Commit 429950f

Browse files
committed
add example code for Firefox Addons
1 parent fd87f30 commit 429950f

File tree

19 files changed

+281
-10
lines changed

19 files changed

+281
-10
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
.idea
22
public/
3-
resources
43
node_modules
54
.DS_Store
65
website_and_docs/.hugo_build.lock
6+
website_and_docs/resources
77

88
**/target/*
99
.classpath
Lines changed: 61 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
using System;
2+
using System.IO;
13
using Microsoft.VisualStudio.TestTools.UnitTesting;
4+
using OpenQA.Selenium;
25
using OpenQA.Selenium.Firefox;
36
using WebDriverManager;
47
using WebDriverManager.DriverConfigs.Impl;
@@ -8,15 +11,69 @@ namespace SeleniumDocs.Browsers
811
[TestClass]
912
public class FirefoxTest
1013
{
11-
[TestMethod]
12-
public void BasicOptions()
14+
private FirefoxDriver driver;
15+
16+
[TestCleanup]
17+
public void QuitDriver()
18+
{
19+
driver.Quit();
20+
}
21+
22+
[TestInitialize]
23+
public void SetupDriver()
1324
{
1425
new DriverManager().SetUpDriver(new FirefoxConfig());
26+
}
1527

28+
[TestMethod]
29+
public void BasicOptions()
30+
{
1631
var options = new FirefoxOptions();
17-
var driver = new FirefoxDriver(options);
32+
driver = new FirefoxDriver(options);
33+
}
1834

19-
driver.Quit();
35+
[TestMethod]
36+
public void InstallAddon()
37+
{
38+
driver = new FirefoxDriver();
39+
40+
string baseDir = AppDomain.CurrentDomain.BaseDirectory;
41+
string extensionFilePath = Path.Combine(baseDir, "../../../Extensions/webextensions-selenium-example.xpi");
42+
driver.InstallAddOnFromFile(Path.GetFullPath(extensionFilePath));
43+
44+
driver.Url = "https://www.selenium.dev/selenium/web/blank.html";
45+
46+
IWebElement injected = driver.FindElement(By.Id("webextensions-selenium-example"));
47+
Assert.AreEqual("Content injected by webextensions-selenium-example", injected.Text);
2048
}
49+
50+
[TestMethod]
51+
public void UnInstallAddon()
52+
{
53+
driver = new FirefoxDriver();
54+
55+
string baseDir = AppDomain.CurrentDomain.BaseDirectory;
56+
string extensionFilePath = Path.Combine(baseDir, "../../../extensions/webextensions-selenium-example.xpi");
57+
string extensionId = driver.InstallAddOnFromFile(Path.GetFullPath(extensionFilePath));
58+
driver.UninstallAddOn(extensionId);
59+
60+
driver.Url = "https://www.selenium.dev/selenium/web/blank.html";
61+
Assert.AreEqual(driver.FindElements(By.Id("webextensions-selenium-example")).Count, 0);
62+
}
63+
64+
[TestMethod]
65+
public void InstallUnsignedAddon()
66+
{
67+
driver = new FirefoxDriver();
68+
69+
string baseDir = AppDomain.CurrentDomain.BaseDirectory;
70+
string extensionDirPath = Path.Combine(baseDir, "../../../extensions/webextensions-selenium-example/");
71+
driver.InstallAddOnFromDirectory(Path.GetFullPath(extensionDirPath), true);
72+
73+
driver.Url = "https://www.selenium.dev/selenium/web/blank.html";
74+
75+
IWebElement injected = driver.FindElement(By.Id("webextensions-selenium-example"));
76+
Assert.AreEqual("Content injected by webextensions-selenium-example", injected.Text);
77+
}
2178
}
2279
}
Binary file not shown.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
((function(document) {
2+
var div = document.createElement('div');
3+
div.id = 'webextensions-selenium-example'
4+
div.textContent = "Content injected by webextensions-selenium-example";
5+
document.body.appendChild(div);
6+
})(document))
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"manifest_version": 2,
3+
"name": "webextensions-selenium-example",
4+
"description": "Inject a div with id webextensions-selenium-example to verify that WebExtensions work in Firefox/Selenium" ,
5+
"version": "0.1",
6+
"content_scripts": [
7+
{
8+
"matches": ["https://*/*","http://*/*"],
9+
"js": ["inject.js"]
10+
}
11+
],
12+
"applications": {
13+
"gecko": {
14+
15+
}
16+
}
17+
}

examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,17 @@
22

33
import io.github.bonigarcia.wdm.WebDriverManager;
44
import org.junit.jupiter.api.AfterEach;
5+
import org.junit.jupiter.api.Assertions;
56
import org.junit.jupiter.api.BeforeAll;
67
import org.junit.jupiter.api.Test;
8+
import org.openqa.selenium.By;
9+
import org.openqa.selenium.WebElement;
710
import org.openqa.selenium.firefox.FirefoxDriver;
811
import org.openqa.selenium.firefox.FirefoxOptions;
912

13+
import java.nio.file.Path;
14+
import java.nio.file.Paths;
15+
1016
public class FirefoxTest {
1117
public FirefoxDriver driver;
1218

@@ -25,4 +31,37 @@ public void basicOptions() {
2531
FirefoxOptions options = new FirefoxOptions();
2632
driver = new FirefoxDriver(options);
2733
}
34+
35+
@Test
36+
public void installAddon() {
37+
driver = new FirefoxDriver();
38+
Path xpiPath = Paths.get("src/test/resources/extensions/selenium-example.xpi");
39+
driver.installExtension(xpiPath);
40+
41+
driver.get("https://www.selenium.dev/selenium/web/blank.html");
42+
WebElement injected = driver.findElement(By.id("webextensions-selenium-example"));
43+
Assertions.assertEquals("Content injected by webextensions-selenium-example", injected.getText());
44+
}
45+
46+
@Test
47+
public void uninstallAddon() {
48+
driver = new FirefoxDriver();
49+
Path xpiPath = Paths.get("src/test/resources/extensions/selenium-example.xpi");
50+
String id = driver.installExtension(xpiPath);
51+
driver.uninstallExtension(id);
52+
53+
driver.get("https://www.selenium.dev/selenium/web/blank.html");
54+
Assertions.assertEquals(driver.findElements(By.id("webextensions-selenium-example")).size(), 0);
55+
}
56+
57+
@Test
58+
public void installUnsignedAddonPath() {
59+
driver = new FirefoxDriver();
60+
Path path = Paths.get("src/test/resources/extensions/selenium-example");
61+
driver.installExtension(path, true);
62+
63+
driver.get("https://www.selenium.dev/selenium/web/blank.html");
64+
WebElement injected = driver.findElement(By.id("webextensions-selenium-example"));
65+
Assertions.assertEquals("Content injected by webextensions-selenium-example", injected.getText());
66+
}
2867
}
Binary file not shown.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
((function(document) {
2+
var div = document.createElement('div');
3+
div.id = 'webextensions-selenium-example'
4+
div.textContent = "Content injected by webextensions-selenium-example";
5+
document.body.appendChild(div);
6+
})(document))
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"manifest_version": 2,
3+
"name": "webextensions-selenium-example",
4+
"description": "Inject a div with id webextensions-selenium-example to verify that WebExtensions work in Firefox/Selenium" ,
5+
"version": "0.1",
6+
"content_scripts": [
7+
{
8+
"matches": ["https://*/*","http://*/*"],
9+
"js": ["inject.js"]
10+
}
11+
],
12+
"applications": {
13+
"gecko": {
14+
15+
}
16+
}
17+
}

examples/python/tests/browsers/test_firefox.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
import os
2+
13
from selenium import webdriver
4+
from selenium.webdriver.common.by import By
25
from selenium.webdriver.firefox.options import Options as FirefoxOptions
36
from selenium.webdriver.firefox.service import Service as FirefoxService
47
from webdriver_manager.firefox import GeckoDriverManager
@@ -10,3 +13,37 @@ def test_basic_options():
1013
driver = webdriver.Firefox(options=options, service=service)
1114

1215
driver.quit()
16+
17+
def test_install_addon(firefox_driver):
18+
driver = firefox_driver
19+
20+
path = os.path.abspath("tests/extensions/webextensions-selenium-example.xpi")
21+
driver.install_addon(path)
22+
23+
driver.get("https://www.selenium.dev/selenium/web/blank.html")
24+
injected = driver.find_element(By.ID, "webextensions-selenium-example")
25+
26+
assert injected.text == "Content injected by webextensions-selenium-example"
27+
28+
29+
def test_uninstall_addon(firefox_driver):
30+
driver = firefox_driver
31+
32+
path = os.path.abspath("tests/extensions/webextensions-selenium-example.xpi")
33+
id = driver.install_addon(path)
34+
driver.uninstall_addon(id)
35+
36+
driver.get("https://www.selenium.dev/selenium/web/blank.html")
37+
assert len(driver.find_elements(By.ID, "webextensions-selenium-example")) == 0
38+
39+
40+
def test_install_unsigned_addon_directory(firefox_driver):
41+
driver = firefox_driver
42+
43+
path = os.path.abspath("tests/extensions/webextensions-selenium-example/")
44+
driver.install_addon(path, temporary=True)
45+
46+
driver.get("https://www.selenium.dev/selenium/web/blank.html")
47+
injected = driver.find_element(By.ID, "webextensions-selenium-example")
48+
49+
assert injected.text == "Content injected by webextensions-selenium-example"

examples/python/tests/conftest.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import pytest
22
from selenium import webdriver
33
from selenium.webdriver.chrome.service import Service as ChromeService
4+
from selenium.webdriver.firefox.service import Service as FirefoxService
45
from webdriver_manager.chrome import ChromeDriverManager
6+
from webdriver_manager.firefox import GeckoDriverManager
57

68

79
@pytest.fixture(scope='function')
@@ -12,3 +14,13 @@ def driver():
1214
yield driver
1315

1416
driver.quit()
17+
18+
19+
@pytest.fixture(scope='function')
20+
def firefox_driver():
21+
service = FirefoxService(executable_path=GeckoDriverManager().install())
22+
driver = webdriver.Firefox(service=service)
23+
24+
yield driver
25+
26+
driver.quit()
Binary file not shown.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
((function(document) {
2+
var div = document.createElement('div');
3+
div.id = 'webextensions-selenium-example'
4+
div.textContent = "Content injected by webextensions-selenium-example";
5+
document.body.appendChild(div);
6+
})(document))
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"manifest_version": 2,
3+
"name": "webextensions-selenium-example",
4+
"description": "Inject a div with id webextensions-selenium-example to verify that WebExtensions work in Firefox/Selenium" ,
5+
"version": "0.1",
6+
"content_scripts": [
7+
{
8+
"matches": ["https://*/*","http://*/*"],
9+
"js": ["inject.js"]
10+
}
11+
],
12+
"applications": {
13+
"gecko": {
14+
15+
}
16+
}
17+
}

examples/ruby/spec/browsers/firefox_spec.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,37 @@
44
require 'webdrivers'
55

66
RSpec.describe 'Firefox' do
7+
let(:driver) { start_firefox }
8+
79
it 'basic options' do
810
options = Selenium::WebDriver::Options.firefox
911
@driver = Selenium::WebDriver.for :firefox, options: options
1012
end
13+
14+
it 'installs addon' do
15+
extension_file_path = File.expand_path('../extensions/webextensions-selenium-example.xpi', __dir__)
16+
driver.install_addon(extension_file_path)
17+
18+
driver.get 'https://www.selenium.dev/selenium/web/blank.html'
19+
injected = driver.find_element(id: 'webextensions-selenium-example')
20+
expect(injected.text).to eq 'Content injected by webextensions-selenium-example'
21+
end
22+
23+
it 'uninstalls addon' do
24+
extension_file_path = File.expand_path('../extensions/webextensions-selenium-example.xpi', __dir__)
25+
extension_id = driver.install_addon(extension_file_path)
26+
driver.uninstall_addon(extension_id)
27+
28+
driver.get 'https://www.selenium.dev/selenium/web/blank.html'
29+
expect(driver.find_elements(id: 'webextensions-selenium-example')).to be_empty
30+
end
31+
32+
it 'installs unsigned addon' do
33+
extension_dir_path = File.expand_path('../extensions/webextensions-selenium-example/', __dir__)
34+
driver.install_addon(extension_dir_path, true)
35+
36+
driver.navigate.to 'https://www.selenium.dev/selenium/web/blank.html'
37+
injected = driver.find_element(id: 'webextensions-selenium-example')
38+
expect(injected.text).to eq 'Content injected by webextensions-selenium-example'
39+
end
1140
end
Binary file not shown.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
((function(document) {
2+
var div = document.createElement('div');
3+
div.id = 'webextensions-selenium-example'
4+
div.textContent = "Content injected by webextensions-selenium-example";
5+
document.body.appendChild(div);
6+
})(document))
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"manifest_version": 2,
3+
"name": "webextensions-selenium-example",
4+
"description": "Inject a div with id webextensions-selenium-example to verify that WebExtensions work in Firefox/Selenium" ,
5+
"version": "0.1",
6+
"content_scripts": [
7+
{
8+
"matches": ["https://*/*","http://*/*"],
9+
"js": ["inject.js"]
10+
}
11+
],
12+
"applications": {
13+
"gecko": {
14+
15+
}
16+
}
17+
}

examples/ruby/spec/spec_helper.rb

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,17 @@
2121
guards.add_condition(:platform, Selenium::WebDriver::Platform.os)
2222
results = guards.disposition
2323
send(*results) if results
24-
25-
def start_session
26-
require 'webdrivers'
27-
@driver = Selenium::WebDriver.for :chrome
28-
end
2924
end
3025

3126
config.after { @driver&.quit }
27+
28+
def start_session
29+
require 'webdrivers'
30+
@driver = Selenium::WebDriver.for :chrome
31+
end
32+
33+
def start_firefox
34+
require 'webdrivers'
35+
@driver = Selenium::WebDriver.for :firefox
36+
end
3237
end

0 commit comments

Comments
 (0)