Skip to content

Commit

Permalink
Update script commands to fix the failing BiDi tests (#13737)
Browse files Browse the repository at this point in the history
* [bidi][java] Update Script command to add check for browsing context array

* [java] Update tests

* [js] Ensure script command uses the browsing contexts correctly
  • Loading branch information
pujagani authored Mar 26, 2024
1 parent 82277ab commit 9931d0a
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 41 deletions.
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

0 comments on commit 9931d0a

Please sign in to comment.