Input
This section contains the APIs related to input commands.
Perform Actions
Actions selectThreeOptions = actions.click(options.get(1)).keyDown(Keys.SHIFT).click(options.get(3)).keyUp(Keys.SHIFT); input.perform(windowHandle, selectThreeOptions.getSequences());
/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ActionsTest.java
package dev.selenium.bidirectional.webdriver_bidi; import dev.selenium.BaseTest; import java.util.List; import java.util.Map; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.Keys; import org.openqa.selenium.WebElement; import org.openqa.selenium.bidi.module.Input; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxOptions; import org.openqa.selenium.interactions.Actions; class ActionsTest extends BaseTest { private Input input; private String windowHandle; @BeforeEach public void setup() { FirefoxOptions options = new FirefoxOptions(); options.setCapability("webSocketUrl", true); driver = new FirefoxDriver(options); windowHandle = driver.getWindowHandle(); input = new Input(driver); } @Test void canPerformInputActions() { driver.get("https://www.selenium.dev/selenium/web/formSelectionPage.html"); List<WebElement> options = driver.findElements(By.tagName("option")); Actions actions = new Actions(driver); Actions selectThreeOptions = actions.click(options.get(1)).keyDown(Keys.SHIFT).click(options.get(3)).keyUp(Keys.SHIFT); input.perform(windowHandle, selectThreeOptions.getSequences()); WebElement showButton = driver.findElement(By.name("showselected")); showButton.click(); WebElement resultElement = driver.findElement(By.id("result")); Assertions.assertTrue(resultElement.getText().contains("roquefort parmigiano cheddar")); } @Test void canPerformReleaseAction() { driver.get("https://www.selenium.dev/selenium/web/bidi/release_action.html"); WebElement inputTextBox = driver.findElement(By.id("keys")); Actions sendLowercase = new Actions(driver).keyDown(inputTextBox, "a").keyDown(inputTextBox, "b"); input.perform(windowHandle, sendLowercase.getSequences()); ((JavascriptExecutor) driver).executeScript("resetEvents()"); input.release(windowHandle); List<Map<String, Object>> events = (List<Map<String, Object>>) ((JavascriptExecutor) driver).executeScript("return allEvents.events"); Assertions.assertEquals("KeyB", events.get(0).get("code")); Assertions.assertEquals("KeyA", events.get(1).get("code")); } }
const actions = driver.actions().click(options[1]).keyDown(Key.SHIFT).click(options[3]).keyUp(Key.SHIFT).getSequences() await input.perform(browsingContextId, actions)
/examples/javascript/test/bidirectional/input.spec.js
const assert = require("assert") const firefox = require('selenium-webdriver/firefox') const {By, Key, Builder} = require("selenium-webdriver") const Input = require('selenium-webdriver/bidi/input') describe('Input module', function () { let driver beforeEach(async function () { driver = new Builder() .forBrowser('firefox') .setFirefoxOptions(new firefox.Options().enableBidi()) .build() }) afterEach(async function () { await driver.quit() }) it('can perform input action', async function () { const browsingContextId = await driver.getWindowHandle() const input = await Input(driver) await driver.get('https://www.selenium.dev/selenium/web/formSelectionPage.html') let options = await driver.findElements(By.tagName('option')) const actions = driver.actions().click(options[1]).keyDown(Key.SHIFT).click(options[3]).keyUp(Key.SHIFT).getSequences() await input.perform(browsingContextId, actions) let showButton = await driver.findElement(By.name('showselected')) showButton.click() let resultElement = await driver.findElement(By.id('result')) await resultElement.getText().then(function (text) { assert(text.includes('oquefort parmigiano cheddar'), `text is: ${text}`) }) }) it('can execute release in browsing context', async function () { const browsingContextId = await driver.getWindowHandle() const input = await Input(driver) await driver.get('https://www.selenium.dev/selenium/web/bidi/release_action.html') let inputTextBox = await driver.findElement(By.id('keys')) await driver.executeScript('arguments[0].focus()', inputTextBox) const actions = 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') }) })
Release Actions
Actions sendLowercase = new Actions(driver).keyDown(inputTextBox, "a").keyDown(inputTextBox, "b"); input.perform(windowHandle, sendLowercase.getSequences()); ((JavascriptExecutor) driver).executeScript("resetEvents()"); input.release(windowHandle);
/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ActionsTest.java
package dev.selenium.bidirectional.webdriver_bidi; import dev.selenium.BaseTest; import java.util.List; import java.util.Map; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.Keys; import org.openqa.selenium.WebElement; import org.openqa.selenium.bidi.module.Input; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxOptions; import org.openqa.selenium.interactions.Actions; class ActionsTest extends BaseTest { private Input input; private String windowHandle; @BeforeEach public void setup() { FirefoxOptions options = new FirefoxOptions(); options.setCapability("webSocketUrl", true); driver = new FirefoxDriver(options); windowHandle = driver.getWindowHandle(); input = new Input(driver); } @Test void canPerformInputActions() { driver.get("https://www.selenium.dev/selenium/web/formSelectionPage.html"); List<WebElement> options = driver.findElements(By.tagName("option")); Actions actions = new Actions(driver); Actions selectThreeOptions = actions.click(options.get(1)).keyDown(Keys.SHIFT).click(options.get(3)).keyUp(Keys.SHIFT); input.perform(windowHandle, selectThreeOptions.getSequences()); WebElement showButton = driver.findElement(By.name("showselected")); showButton.click(); WebElement resultElement = driver.findElement(By.id("result")); Assertions.assertTrue(resultElement.getText().contains("roquefort parmigiano cheddar")); } @Test void canPerformReleaseAction() { driver.get("https://www.selenium.dev/selenium/web/bidi/release_action.html"); WebElement inputTextBox = driver.findElement(By.id("keys")); Actions sendLowercase = new Actions(driver).keyDown(inputTextBox, "a").keyDown(inputTextBox, "b"); input.perform(windowHandle, sendLowercase.getSequences()); ((JavascriptExecutor) driver).executeScript("resetEvents()"); input.release(windowHandle); List<Map<String, Object>> events = (List<Map<String, Object>>) ((JavascriptExecutor) driver).executeScript("return allEvents.events"); Assertions.assertEquals("KeyB", events.get(0).get("code")); Assertions.assertEquals("KeyA", events.get(1).get("code")); } }
await input.release(browsingContextId)
/examples/javascript/test/bidirectional/input.spec.js
const assert = require("assert") const firefox = require('selenium-webdriver/firefox') const {By, Key, Builder} = require("selenium-webdriver") const Input = require('selenium-webdriver/bidi/input') describe('Input module', function () { let driver beforeEach(async function () { driver = new Builder() .forBrowser('firefox') .setFirefoxOptions(new firefox.Options().enableBidi()) .build() }) afterEach(async function () { await driver.quit() }) it('can perform input action', async function () { const browsingContextId = await driver.getWindowHandle() const input = await Input(driver) await driver.get('https://www.selenium.dev/selenium/web/formSelectionPage.html') let options = await driver.findElements(By.tagName('option')) const actions = driver.actions().click(options[1]).keyDown(Key.SHIFT).click(options[3]).keyUp(Key.SHIFT).getSequences() await input.perform(browsingContextId, actions) let showButton = await driver.findElement(By.name('showselected')) showButton.click() let resultElement = await driver.findElement(By.id('result')) await resultElement.getText().then(function (text) { assert(text.includes('oquefort parmigiano cheddar'), `text is: ${text}`) }) }) it('can execute release in browsing context', async function () { const browsingContextId = await driver.getWindowHandle() const input = await Input(driver) await driver.get('https://www.selenium.dev/selenium/web/bidi/release_action.html') let inputTextBox = await driver.findElement(By.id('keys')) await driver.executeScript('arguments[0].focus()', inputTextBox) const actions = 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') }) })
Last modified August 4, 2024: refactor(js): update code samples to use mocha and fix line numbers (d4adebb67ba)