From d51c74ab36065b98a1e9220d4feca2c33fc1e836 Mon Sep 17 00:00:00 2001 From: Puja Jagani Date: Wed, 10 Jan 2024 16:21:07 +0530 Subject: [PATCH] [bidi][js] Add Input module JS command --- .../node/selenium-webdriver/bidi/input.js | 10 ++++ .../selenium-webdriver/lib/test/fileserver.js | 1 + .../test/bidi/input_test.js | 46 +++++++++++++++---- 3 files changed, 48 insertions(+), 9 deletions(-) diff --git a/javascript/node/selenium-webdriver/bidi/input.js b/javascript/node/selenium-webdriver/bidi/input.js index 56cd16c5a4faa..5086899a179ed 100644 --- a/javascript/node/selenium-webdriver/bidi/input.js +++ b/javascript/node/selenium-webdriver/bidi/input.js @@ -47,6 +47,16 @@ class Input { return response } + + async release(browsingContextId) { + const command = { + method: 'input.releaseActions', + params: { + context: browsingContextId, + }, + } + return await this.bidi.send(command) + } } async function updateActions(actions) { diff --git a/javascript/node/selenium-webdriver/lib/test/fileserver.js b/javascript/node/selenium-webdriver/lib/test/fileserver.js index 82085f3730a17..49a449f12e85a 100644 --- a/javascript/node/selenium-webdriver/lib/test/fileserver.js +++ b/javascript/node/selenium-webdriver/lib/test/fileserver.js @@ -115,6 +115,7 @@ const Pages = (function () { addPage('emptyPage', 'bidi/emptyPage.html') addPage('emptyText', 'bidi/emptyText.txt') addPage('redirectedHttpEquiv', 'bidi/redirected_http_equiv.html') + addPage('releaseAction', 'bidi/release_action.html') return pages })() diff --git a/javascript/node/selenium-webdriver/test/bidi/input_test.js b/javascript/node/selenium-webdriver/test/bidi/input_test.js index 35bb9740ed1e5..000a0cf49b444 100644 --- a/javascript/node/selenium-webdriver/test/bidi/input_test.js +++ b/javascript/node/selenium-webdriver/test/bidi/input_test.js @@ -20,9 +20,9 @@ const assert = require('assert') const fileServer = require('../../lib/test/fileserver') const firefox = require('../../firefox') -const { ignore, Pages, suite } = require('../../lib/test') -const { Key, Origin } = require('../../lib/input') -const { Browser, By, until } = require('../..') +const {ignore, Pages, suite} = require('../../lib/test') +const {Key, Origin} = require('../../lib/input') +const {Browser, By, until} = require('../..') const Input = require('../../bidi/input') suite( @@ -66,7 +66,7 @@ suite( const div = await driver.findElement(By.css('div')) const rect = await div.getRect() - assert.deepStrictEqual(rect, { width: 500, height: 500, x: 0, y: 0 }) + assert.deepStrictEqual(rect, {width: 500, height: 500, x: 0, y: 0}) const actions = await driver.actions().click(div).getSequences() @@ -91,11 +91,11 @@ suite( const div = await driver.findElement(By.css('div')) const rect = await div.getRect() - assert.deepStrictEqual(rect, { width: 500, height: 500, x: 0, y: 0 }) + assert.deepStrictEqual(rect, {width: 500, height: 500, x: 0, y: 0}) const actions = await driver .actions() - .move({ x: 10, y: 10, origin: div }) + .move({x: 10, y: 10, origin: div}) .click() .getSequences() @@ -171,9 +171,9 @@ suite( const actions = await driver .actions() - .move({ origin: slide }) + .move({origin: slide}) .press() - .move({ x: 100, y: 100, origin: Origin.POINTER }) + .move({x: 100, y: 100, origin: Origin.POINTER}) .release() .getSequences() @@ -345,6 +345,34 @@ suite( }, ) + it('can execute release in browsing context', async function () { + const browsingContextId = await driver.getWindowHandle() + const input = await Input(driver) + await driver.get(Pages.releaseAction) + + let inputTextBox = await driver.findElement(By.id('keys')) + + await driver.executeScript('arguments[0].focus()', inputTextBox) + + + const actions = await driver + .actions() + .keyDown('a') + .keyDown('b') + .getSequences() + + await input.perform(browsingContextId, actions) + + await driver.executeScript('resetEvents()') + + await input.release(browsingContextId) + + const events = await driver.executeScript('return allEvents.events') + + assert.strictEqual(events[0].code, 'KeyB') + assert.strictEqual(events[1].code, 'KeyA') + }) + async function _getEvents(driver) { await driver.wait(async () => { const events = await driver.executeScript('return allEvents.events;') @@ -354,5 +382,5 @@ suite( } }) }, - { browsers: [Browser.FIREFOX] }, + {browsers: [Browser.FIREFOX]}, )