Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 37 additions & 24 deletions java/src/org/openqa/selenium/bidi/module/Script.java
Original file line number Diff line number Diff line change
Expand Up @@ -262,44 +262,56 @@ public List<RealmInfo> getRealmsInBrowsingContextByType(String browsingContext,
}

public String addPreloadScript(String functionDeclaration) {
Map<String, Object> parameters = new HashMap<>();
parameters.put("functionDeclaration", functionDeclaration);

if (!browsingContextIds.isEmpty()) {
parameters.put("contexts", this.browsingContextIds);
}

return this.bidi.send(
new Command<>(
"script.addPreloadScript",
Map.of("functionDeclaration", functionDeclaration, "contexts", this.browsingContextIds),
parameters,
jsonInput -> {
Map<String, Object> result = jsonInput.read(Map.class);
return result.get("script").toString();
}));
}

public String addPreloadScript(String functionDeclaration, List<ChannelValue> arguments) {
Map<String, Object> parameters = new HashMap<>();
parameters.put("functionDeclaration", functionDeclaration);
parameters.put("arguments", arguments);

if (!browsingContextIds.isEmpty()) {
parameters.put("contexts", this.browsingContextIds);
}

return this.bidi.send(
new Command<>(
"script.addPreloadScript",
Map.of(
"functionDeclaration",
functionDeclaration,
"contexts",
this.browsingContextIds,
"arguments",
arguments),
parameters,
jsonInput -> {
Map<String, Object> result = jsonInput.read(Map.class);
return result.get("script").toString();
}));
}

public String addPreloadScript(String functionDeclaration, String sandbox) {

Map<String, Object> parameters = new HashMap<>();
parameters.put("functionDeclaration", functionDeclaration);
parameters.put("sandbox", sandbox);

if (!browsingContextIds.isEmpty()) {
parameters.put("contexts", this.browsingContextIds);
}

return this.bidi.send(
new Command<>(
"script.addPreloadScript",
Map.of(
"functionDeclaration",
functionDeclaration,
"contexts",
this.browsingContextIds,
"sandbox",
sandbox),
parameters,
jsonInput -> {
Map<String, Object> result = jsonInput.read(Map.class);
return result.get("script").toString();
Expand All @@ -308,18 +320,19 @@ public String addPreloadScript(String functionDeclaration, String sandbox) {

public String addPreloadScript(
String functionDeclaration, List<ChannelValue> arguments, String sandbox) {
Map<String, Object> parameters = new HashMap<>();
parameters.put("functionDeclaration", functionDeclaration);
parameters.put("arguments", arguments);
parameters.put("sandbox", sandbox);

if (!browsingContextIds.isEmpty()) {
parameters.put("contexts", this.browsingContextIds);
}

return this.bidi.send(
new Command<>(
"script.addPreloadScript",
Map.of(
"functionDeclaration",
functionDeclaration,
"contexts",
this.browsingContextIds,
"arguments",
arguments,
"sandbox",
sandbox),
parameters,
jsonInput -> {
Map<String, Object> result = jsonInput.read(Map.class);
return result.get("script").toString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import static org.openqa.selenium.testing.Safely.safelyCall;
import static org.openqa.selenium.testing.drivers.Browser.CHROME;
import static org.openqa.selenium.testing.drivers.Browser.EDGE;
import static org.openqa.selenium.testing.drivers.Browser.FIREFOX;
import static org.openqa.selenium.testing.drivers.Browser.IE;
import static org.openqa.selenium.testing.drivers.Browser.SAFARI;

Expand Down Expand Up @@ -804,7 +803,6 @@ void canGetRealmInBrowsingContextByType() {
}

@Test
@NotYetImplemented(FIREFOX)
void canAddPreloadScript() throws ExecutionException, InterruptedException, TimeoutException {
Script script = new Script(driver);
String id = script.addPreloadScript("() => {{ console.log('{preload_script_console_text}') }}");
Expand All @@ -827,7 +825,6 @@ void canAddPreloadScript() throws ExecutionException, InterruptedException, Time
}

@Test
@NotYetImplemented(FIREFOX)
void canAddPreloadScriptWithArguments() {
Script script = new Script(driver);
String id =
Expand All @@ -839,7 +836,6 @@ void canAddPreloadScriptWithArguments() {
}

@Test
@NotYetImplemented(FIREFOX)
void canAddPreloadScriptWithChannelOptions() {
Script script = new Script(driver);
SerializationOptions serializationOptions = new SerializationOptions();
Expand All @@ -853,7 +849,6 @@ void canAddPreloadScriptWithChannelOptions() {
}

@Test
@NotYetImplemented(FIREFOX)
void canAddPreloadScriptInASandbox() {
Script script = new Script(driver);
String id = script.addPreloadScript("() => { window.bar=2; }", "sandbox");
Expand Down
16 changes: 12 additions & 4 deletions javascript/node/selenium-webdriver/bidi/scriptManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ class ScriptManager {
this._driver = driver
}

async init(browsingContextId) {
async init(browsingContextIds) {
if (!(await this._driver.getCapabilities()).get('webSocketUrl')) {
throw Error('WebDriver instance must support BiDi protocol')
}

this.bidi = await this._driver.getBidi()
this._browsingContextId = browsingContextId
this._browsingContextIds = browsingContextIds
}

async disownRealmScript(realmId, handles) {
Expand Down Expand Up @@ -173,6 +173,14 @@ class ScriptManager {
sandbox: sandbox,
}

if (Array.isArray(this._browsingContextIds) && this._browsingContextIds.length > 0) {
params.contexts = this._browsingContextIds
}

if (typeof this._browsingContextIds === 'string') {
params.contexts = new Array(this._browsingContextIds)
}

const command = {
method: 'script.addPreloadScript',
params,
Expand Down Expand Up @@ -331,8 +339,8 @@ class ScriptManager {
}

async subscribeAndHandleEvent(eventType, callback) {
if (this._browsingContextIds != null) {
await this.bidi.subscribe(eventType, this._browsingContextIds)
if (this.browsingContextIds != null) {
await this.bidi.subscribe(eventType, this.browsingContextIds)
} else {
await this.bidi.subscribe(eventType)
}
Expand Down
16 changes: 8 additions & 8 deletions javascript/node/selenium-webdriver/test/bidi/script_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -540,9 +540,9 @@ suite(
assert.equal(windowRealm.browsingContext, windowId)
})

it('can add preload script', async function () {
it('can add preload script test', async function () {
const id = await driver.getWindowHandle()
const manager = await ScriptManager(id, driver)
const manager = await ScriptManager([], driver)

await manager.addPreloadScript("() => { window.foo='bar'; }")

Expand Down Expand Up @@ -587,7 +587,7 @@ suite(

it('can access preload script properties', async function () {
const id = await driver.getWindowHandle()
const manager = await ScriptManager(id, driver)
const manager = await ScriptManager([], driver)

await manager.addPreloadScript('() => { window.preloadScriptFunction = () => window.baz = 42; }')

Expand All @@ -603,7 +603,7 @@ suite(

it('can add preload script to sandbox', async function () {
const id = await driver.getWindowHandle()
const manager = await ScriptManager(id, driver)
const manager = await ScriptManager([], driver)

await manager.addPreloadScript('() => { window.foo = 1; }')
await manager.addPreloadScript('() => { window.bar = 2; }', [], 'sandbox')
Expand Down Expand Up @@ -639,7 +639,7 @@ suite(

it('can remove properties set by preload script', async function () {
const id = await driver.getWindowHandle()
const manager = await ScriptManager(id, driver)
const manager = await ScriptManager([], driver)

await manager.addPreloadScript('() => { window.foo = 42; }')
await manager.addPreloadScript('() => { window.foo = 50; }', [], 'sandbox_1')
Expand All @@ -658,7 +658,7 @@ suite(

it('can remove preload script', async function () {
const id = await driver.getWindowHandle()
const manager = await ScriptManager(id, driver)
const manager = await ScriptManager([], driver)

let script = await manager.addPreloadScript("() => { window.foo='bar'; }")

Expand All @@ -683,7 +683,7 @@ suite(

it('cannot remove same preload script twice', async function () {
const id = await driver.getWindowHandle()
const manager = await ScriptManager(id, driver)
const manager = await ScriptManager([], driver)

let script = await manager.addPreloadScript("() => { window.foo='bar'; }")

Expand All @@ -696,7 +696,7 @@ suite(

it('can remove one of preload script', async function () {
const id = await driver.getWindowHandle()
const manager = await ScriptManager(id, driver)
const manager = await ScriptManager([], driver)

let script_1 = await manager.addPreloadScript("() => { window.bar='foo'; }")

Expand Down