Skip to content

Commit 9931d0a

Browse files
authored
Update script commands to fix the failing BiDi tests (#13737)
* [bidi][java] Update Script command to add check for browsing context array * [java] Update tests * [js] Ensure script command uses the browsing contexts correctly
1 parent 82277ab commit 9931d0a

File tree

4 files changed

+57
-41
lines changed

4 files changed

+57
-41
lines changed

java/src/org/openqa/selenium/bidi/module/Script.java

Lines changed: 37 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -262,44 +262,56 @@ public List<RealmInfo> getRealmsInBrowsingContextByType(String browsingContext,
262262
}
263263

264264
public String addPreloadScript(String functionDeclaration) {
265+
Map<String, Object> parameters = new HashMap<>();
266+
parameters.put("functionDeclaration", functionDeclaration);
267+
268+
if (!browsingContextIds.isEmpty()) {
269+
parameters.put("contexts", this.browsingContextIds);
270+
}
271+
265272
return this.bidi.send(
266273
new Command<>(
267274
"script.addPreloadScript",
268-
Map.of("functionDeclaration", functionDeclaration, "contexts", this.browsingContextIds),
275+
parameters,
269276
jsonInput -> {
270277
Map<String, Object> result = jsonInput.read(Map.class);
271278
return result.get("script").toString();
272279
}));
273280
}
274281

275282
public String addPreloadScript(String functionDeclaration, List<ChannelValue> arguments) {
283+
Map<String, Object> parameters = new HashMap<>();
284+
parameters.put("functionDeclaration", functionDeclaration);
285+
parameters.put("arguments", arguments);
286+
287+
if (!browsingContextIds.isEmpty()) {
288+
parameters.put("contexts", this.browsingContextIds);
289+
}
290+
276291
return this.bidi.send(
277292
new Command<>(
278293
"script.addPreloadScript",
279-
Map.of(
280-
"functionDeclaration",
281-
functionDeclaration,
282-
"contexts",
283-
this.browsingContextIds,
284-
"arguments",
285-
arguments),
294+
parameters,
286295
jsonInput -> {
287296
Map<String, Object> result = jsonInput.read(Map.class);
288297
return result.get("script").toString();
289298
}));
290299
}
291300

292301
public String addPreloadScript(String functionDeclaration, String sandbox) {
302+
303+
Map<String, Object> parameters = new HashMap<>();
304+
parameters.put("functionDeclaration", functionDeclaration);
305+
parameters.put("sandbox", sandbox);
306+
307+
if (!browsingContextIds.isEmpty()) {
308+
parameters.put("contexts", this.browsingContextIds);
309+
}
310+
293311
return this.bidi.send(
294312
new Command<>(
295313
"script.addPreloadScript",
296-
Map.of(
297-
"functionDeclaration",
298-
functionDeclaration,
299-
"contexts",
300-
this.browsingContextIds,
301-
"sandbox",
302-
sandbox),
314+
parameters,
303315
jsonInput -> {
304316
Map<String, Object> result = jsonInput.read(Map.class);
305317
return result.get("script").toString();
@@ -308,18 +320,19 @@ public String addPreloadScript(String functionDeclaration, String sandbox) {
308320

309321
public String addPreloadScript(
310322
String functionDeclaration, List<ChannelValue> arguments, String sandbox) {
323+
Map<String, Object> parameters = new HashMap<>();
324+
parameters.put("functionDeclaration", functionDeclaration);
325+
parameters.put("arguments", arguments);
326+
parameters.put("sandbox", sandbox);
327+
328+
if (!browsingContextIds.isEmpty()) {
329+
parameters.put("contexts", this.browsingContextIds);
330+
}
331+
311332
return this.bidi.send(
312333
new Command<>(
313334
"script.addPreloadScript",
314-
Map.of(
315-
"functionDeclaration",
316-
functionDeclaration,
317-
"contexts",
318-
this.browsingContextIds,
319-
"arguments",
320-
arguments,
321-
"sandbox",
322-
sandbox),
335+
parameters,
323336
jsonInput -> {
324337
Map<String, Object> result = jsonInput.read(Map.class);
325338
return result.get("script").toString();

java/test/org/openqa/selenium/bidi/script/ScriptCommandsTest.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import static org.openqa.selenium.testing.Safely.safelyCall;
2323
import static org.openqa.selenium.testing.drivers.Browser.CHROME;
2424
import static org.openqa.selenium.testing.drivers.Browser.EDGE;
25-
import static org.openqa.selenium.testing.drivers.Browser.FIREFOX;
2625
import static org.openqa.selenium.testing.drivers.Browser.IE;
2726
import static org.openqa.selenium.testing.drivers.Browser.SAFARI;
2827

@@ -804,7 +803,6 @@ void canGetRealmInBrowsingContextByType() {
804803
}
805804

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

829827
@Test
830-
@NotYetImplemented(FIREFOX)
831828
void canAddPreloadScriptWithArguments() {
832829
Script script = new Script(driver);
833830
String id =
@@ -839,7 +836,6 @@ void canAddPreloadScriptWithArguments() {
839836
}
840837

841838
@Test
842-
@NotYetImplemented(FIREFOX)
843839
void canAddPreloadScriptWithChannelOptions() {
844840
Script script = new Script(driver);
845841
SerializationOptions serializationOptions = new SerializationOptions();
@@ -853,7 +849,6 @@ void canAddPreloadScriptWithChannelOptions() {
853849
}
854850

855851
@Test
856-
@NotYetImplemented(FIREFOX)
857852
void canAddPreloadScriptInASandbox() {
858853
Script script = new Script(driver);
859854
String id = script.addPreloadScript("() => { window.bar=2; }", "sandbox");

javascript/node/selenium-webdriver/bidi/scriptManager.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ class ScriptManager {
3232
this._driver = driver
3333
}
3434

35-
async init(browsingContextId) {
35+
async init(browsingContextIds) {
3636
if (!(await this._driver.getCapabilities()).get('webSocketUrl')) {
3737
throw Error('WebDriver instance must support BiDi protocol')
3838
}
3939

4040
this.bidi = await this._driver.getBidi()
41-
this._browsingContextId = browsingContextId
41+
this._browsingContextIds = browsingContextIds
4242
}
4343

4444
async disownRealmScript(realmId, handles) {
@@ -173,6 +173,14 @@ class ScriptManager {
173173
sandbox: sandbox,
174174
}
175175

176+
if (Array.isArray(this._browsingContextIds) && this._browsingContextIds.length > 0) {
177+
params.contexts = this._browsingContextIds
178+
}
179+
180+
if (typeof this._browsingContextIds === 'string') {
181+
params.contexts = new Array(this._browsingContextIds)
182+
}
183+
176184
const command = {
177185
method: 'script.addPreloadScript',
178186
params,
@@ -331,8 +339,8 @@ class ScriptManager {
331339
}
332340

333341
async subscribeAndHandleEvent(eventType, callback) {
334-
if (this._browsingContextIds != null) {
335-
await this.bidi.subscribe(eventType, this._browsingContextIds)
342+
if (this.browsingContextIds != null) {
343+
await this.bidi.subscribe(eventType, this.browsingContextIds)
336344
} else {
337345
await this.bidi.subscribe(eventType)
338346
}

javascript/node/selenium-webdriver/test/bidi/script_test.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -540,9 +540,9 @@ suite(
540540
assert.equal(windowRealm.browsingContext, windowId)
541541
})
542542

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

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

@@ -587,7 +587,7 @@ suite(
587587

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

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

@@ -603,7 +603,7 @@ suite(
603603

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

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

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

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

659659
it('can remove preload script', async function () {
660660
const id = await driver.getWindowHandle()
661-
const manager = await ScriptManager(id, driver)
661+
const manager = await ScriptManager([], driver)
662662

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

@@ -683,7 +683,7 @@ suite(
683683

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

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

@@ -696,7 +696,7 @@ suite(
696696

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

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

0 commit comments

Comments
 (0)