Keyboard actions
There are only 2 actions that can be accomplished with a keyboard: pressing down on a key, and releasing a pressed key. In addition to supporting ASCII characters, each keyboard key has a representation that can be pressed or released in designated sequences.
Keys
In addition to the keys represented by regular unicode, unicode values have been assigned to other keyboard keys for use with Selenium. Each language has its own way to reference these keys; the full list can be found here.
Use the Java Keys enum
Use the Python Keys class
Use the .NET static Keys class
Use the Ruby KEYS constant
Use the JavaScript KEYS constant
Use the Java Keys enum
Key down
new Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .perform();
examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java
package dev.selenium.actions_api; import dev.selenium.BaseChromeTest; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.Platform; import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.Actions; public class KeysTest extends BaseChromeTest { @Test public void keyDown() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); new Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .perform(); WebElement textField = driver.findElement(By.id("textInput")); Assertions.assertEquals("A", textField.getAttribute("value")); } @Test public void keyUp() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); new Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .keyUp(Keys.SHIFT) .sendKeys("b") .perform(); WebElement textField = driver.findElement(By.id("textInput")); Assertions.assertEquals("Ab", textField.getAttribute("value")); } @Test public void sendKeysToActiveElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); new Actions(driver) .sendKeys("abc") .perform(); WebElement textField = driver.findElement(By.id("textInput")); Assertions.assertEquals("abc", textField.getAttribute("value")); } @Test public void sendKeysToDesignatedElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); driver.findElement(By.tagName("body")).click(); WebElement textField = driver.findElement(By.id("textInput")); new Actions(driver) .sendKeys(textField, "Selenium!") .perform(); Assertions.assertEquals("Selenium!", textField.getAttribute("value")); } @Test public void copyAndPaste() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); Keys cmdCtrl = Platform.getCurrent().is(Platform.MAC) ? Keys.COMMAND : Keys.CONTROL; WebElement textField = driver.findElement(By.id("textInput")); new Actions(driver) .sendKeys(textField, "Selenium!") .sendKeys(Keys.ARROW_LEFT) .keyDown(Keys.SHIFT) .sendKeys(Keys.ARROW_UP) .keyUp(Keys.SHIFT) .keyDown(cmdCtrl) .sendKeys("xvv") .keyUp(cmdCtrl) .perform(); Assertions.assertEquals("SeleniumSelenium!", textField.getAttribute("value")); } }
ActionChains(driver)\ .key_down(Keys.SHIFT)\ .send_keys("abc")\ .perform()
examples/python/tests/actions_api/test_keys.py
import sys from selenium.webdriver import Keys, ActionChains from selenium.webdriver.common.by import By def test_key_down(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') ActionChains(driver)\ .key_down(Keys.SHIFT)\ .send_keys("abc")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "ABC" def test_key_up(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') ActionChains(driver)\ .key_down(Keys.SHIFT)\ .send_keys("a")\ .key_up(Keys.SHIFT)\ .send_keys("b")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "Ab" def test_send_keys_to_active_element(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') ActionChains(driver)\ .send_keys("abc")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "abc" def test_send_keys_to_designated_element(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') driver.find_element(By.TAG_NAME, "body").click() text_input = driver.find_element(By.ID, "textInput") ActionChains(driver)\ .send_keys_to_element(text_input, "abc")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "abc" def test_copy_and_paste(firefox_driver): driver = firefox_driver driver.get('https://selenium.dev/selenium/web/single_text_input.html') cmd_ctrl = Keys.COMMAND if sys.platform == 'darwin' else Keys.CONTROL ActionChains(driver)\ .send_keys("Selenium!")\ .send_keys(Keys.ARROW_LEFT)\ .key_down(Keys.SHIFT)\ .send_keys(Keys.ARROW_UP)\ .key_up(Keys.SHIFT)\ .key_down(cmd_ctrl)\ .send_keys("xvv")\ .key_up(cmd_ctrl)\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "SeleniumSelenium!"
.KeyDown(Keys.Shift) .SendKeys("a") .Perform();
examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Interactions; namespace SeleniumDocs.ActionsAPI { [TestClass] public class KeysTest : BaseFirefoxTest { [TestMethod] public void KeyDown() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; new Actions(driver) .KeyDown(Keys.Shift) .SendKeys("a") .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("A", textField.GetAttribute("value")); } [TestMethod] public void KeyUp() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; new Actions(driver) .KeyDown(Keys.Shift) .SendKeys("a") .KeyUp(Keys.Shift) .SendKeys("b") .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("Ab", textField.GetAttribute("value")); } [TestMethod] public void SendKeysToActiveElement() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; new Actions(driver) .SendKeys("abc") .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("abc", textField.GetAttribute("value")); } [TestMethod] public void SendKeysToDesignatedElement() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; driver.FindElement(By.TagName("body")).Click(); IWebElement textField = driver.FindElement(By.Id("textInput")); new Actions(driver) .SendKeys(textField, "abc") .Perform(); Assert.AreEqual("abc", textField.GetAttribute("value")); } [TestMethod] public void CopyAndPaste() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; var capabilities = ((WebDriver)driver).Capabilities; String platformName = (string)capabilities.GetCapability("platformName"); String cmdCtrl = platformName.Contains("mac") ? Keys.Command : Keys.Control; new Actions(driver) .SendKeys("Selenium!") .SendKeys(Keys.ArrowLeft) .KeyDown(Keys.Shift) .SendKeys(Keys.ArrowUp) .KeyUp(Keys.Shift) .KeyDown(cmdCtrl) .SendKeys("xvv") .KeyUp(cmdCtrl) .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("SeleniumSelenium!", textField.GetAttribute("value")); } } }
driver.action .key_down(:shift) .send_keys('a') .perform
examples/ruby/spec/actions_api/keys_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Keys' do let(:driver) { start_session } let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) } it 'key down' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } driver.action .key_down(:shift) .send_keys('a') .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'A' end it 'key up' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } driver.action .key_down(:shift) .send_keys('a') .key_up(:shift) .send_keys('b') .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'Ab' end it 'sends keys to active element' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } driver.action .send_keys('abc') .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'abc' end it 'sends keys to designated element' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' driver.find_element(tag_name: 'body').click wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } text_field = driver.find_element(id: 'textInput') driver.action .send_keys(text_field, 'Selenium!') .perform expect(text_field.attribute('value')).to eq 'Selenium!' end it 'copy and paste' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } cmd_ctrl = driver.capabilities.platform_name.include?('mac') ? :command : :control driver.action .send_keys('Selenium!') .send_keys(:arrow_left) .key_down(:shift) .send_keys(:arrow_up) .key_up(:shift) .key_down(cmd_ctrl) .send_keys('xvv') .key_up(cmd_ctrl) .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'SeleniumSelenium!' end end
await driver.actions() .keyDown(Key.SHIFT) .sendKeys('a') .perform()
examples/javascript/test/actionsApi/keysTest.spec.js
const { By, Key, Browser, Builder} = require('selenium-webdriver') const assert = require('assert') const { platform } = require('node:process') describe('Keyboard Action - Keys test', function() { let driver before(async function() { driver = await new Builder().forBrowser('chrome').build(); }) after(async () => await driver.quit()) it('KeyDown', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') await driver.actions() .keyDown(Key.SHIFT) .sendKeys('a') .perform() const textField = driver.findElement(By.id('textInput')) assert.deepStrictEqual(await textField.getAttribute('value'), 'A') }) it('KeyUp', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') const textField = driver.findElement(By.id('textInput')) await textField.click() await driver.actions() .keyDown(Key.SHIFT) .sendKeys('a') .keyUp(Key.SHIFT) .sendKeys('b') .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'Ab') }) it('sendKeys', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') const textField = driver.findElement(By.id('textInput')) await textField.click() await driver.actions() .sendKeys('abc') .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'abc') }) it('Designated Element', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') await driver.findElement(By.css('body')).click() const textField = await driver.findElement(By.id('textInput')) await driver.actions() .sendKeys(textField, 'abc') .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'abc') }) it('Copy and Paste', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') const textField = await driver.findElement(By.id('textInput')) const cmdCtrl = platform.includes('darwin') ? Key.COMMAND : Key.CONTROL await driver.actions() .click(textField) .sendKeys('Selenium!') .sendKeys(Key.ARROW_LEFT) .keyDown(Key.SHIFT) .sendKeys(Key.ARROW_UP) .keyUp(Key.SHIFT) .keyDown(cmdCtrl) .sendKeys('xvv') .keyUp(cmdCtrl) .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'SeleniumSelenium!') }) })
.keyDown(Keys.SHIFT) .sendKeys("a") .perform()
examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt
package dev.selenium.actions_api import dev.selenium.BaseTest import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test import org.openqa.selenium.By import org.openqa.selenium.HasCapabilities import org.openqa.selenium.Keys import org.openqa.selenium.Platform import org.openqa.selenium.interactions.Actions class KeysTest : BaseTest() { @Test fun keyDown() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .perform() val textField = driver.findElement(By.id("textInput")) Assertions.assertEquals("A", textField.getAttribute("value")) } @Test fun keyUp() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .keyUp(Keys.SHIFT) .sendKeys("b") .perform() val textField = driver.findElement(By.id("textInput")) Assertions.assertEquals("Ab", textField.getAttribute("value")) } @Test fun sendKeysToActiveElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") Actions(driver) .sendKeys("abc") .perform() val textField = driver.findElement(By.id("textInput")) Assertions.assertEquals("abc", textField.getAttribute("value")) } @Test fun sendKeysToDesignatedElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") driver.findElement(By.tagName("body")).click() val textField = driver.findElement(By.id("textInput")) Actions(driver) .sendKeys(textField, "Selenium!") .perform() Assertions.assertEquals("Selenium!", textField.getAttribute("value")) } @Test fun copyAndPaste() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") val platformName = (driver as HasCapabilities).getCapabilities().getPlatformName() val cmdCtrl = if(platformName == Platform.MAC) Keys.COMMAND else Keys.CONTROL val textField = driver.findElement(By.id("textInput")) Actions(driver) .sendKeys(textField, "Selenium!") .sendKeys(Keys.ARROW_LEFT) .keyDown(Keys.SHIFT) .sendKeys(Keys.ARROW_UP) .keyUp(Keys.SHIFT) .keyDown(cmdCtrl) .sendKeys("xvv") .keyUp(cmdCtrl) .perform() Assertions.assertEquals("SeleniumSelenium!", textField.getAttribute("value")) } }
Key up
new Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .keyUp(Keys.SHIFT) .sendKeys("b") .perform();
examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java
package dev.selenium.actions_api; import dev.selenium.BaseChromeTest; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.Platform; import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.Actions; public class KeysTest extends BaseChromeTest { @Test public void keyDown() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); new Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .perform(); WebElement textField = driver.findElement(By.id("textInput")); Assertions.assertEquals("A", textField.getAttribute("value")); } @Test public void keyUp() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); new Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .keyUp(Keys.SHIFT) .sendKeys("b") .perform(); WebElement textField = driver.findElement(By.id("textInput")); Assertions.assertEquals("Ab", textField.getAttribute("value")); } @Test public void sendKeysToActiveElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); new Actions(driver) .sendKeys("abc") .perform(); WebElement textField = driver.findElement(By.id("textInput")); Assertions.assertEquals("abc", textField.getAttribute("value")); } @Test public void sendKeysToDesignatedElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); driver.findElement(By.tagName("body")).click(); WebElement textField = driver.findElement(By.id("textInput")); new Actions(driver) .sendKeys(textField, "Selenium!") .perform(); Assertions.assertEquals("Selenium!", textField.getAttribute("value")); } @Test public void copyAndPaste() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); Keys cmdCtrl = Platform.getCurrent().is(Platform.MAC) ? Keys.COMMAND : Keys.CONTROL; WebElement textField = driver.findElement(By.id("textInput")); new Actions(driver) .sendKeys(textField, "Selenium!") .sendKeys(Keys.ARROW_LEFT) .keyDown(Keys.SHIFT) .sendKeys(Keys.ARROW_UP) .keyUp(Keys.SHIFT) .keyDown(cmdCtrl) .sendKeys("xvv") .keyUp(cmdCtrl) .perform(); Assertions.assertEquals("SeleniumSelenium!", textField.getAttribute("value")); } }
ActionChains(driver)\ .key_down(Keys.SHIFT)\ .send_keys("a")\ .key_up(Keys.SHIFT)\ .send_keys("b")\ .perform()
examples/python/tests/actions_api/test_keys.py
import sys from selenium.webdriver import Keys, ActionChains from selenium.webdriver.common.by import By def test_key_down(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') ActionChains(driver)\ .key_down(Keys.SHIFT)\ .send_keys("abc")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "ABC" def test_key_up(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') ActionChains(driver)\ .key_down(Keys.SHIFT)\ .send_keys("a")\ .key_up(Keys.SHIFT)\ .send_keys("b")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "Ab" def test_send_keys_to_active_element(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') ActionChains(driver)\ .send_keys("abc")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "abc" def test_send_keys_to_designated_element(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') driver.find_element(By.TAG_NAME, "body").click() text_input = driver.find_element(By.ID, "textInput") ActionChains(driver)\ .send_keys_to_element(text_input, "abc")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "abc" def test_copy_and_paste(firefox_driver): driver = firefox_driver driver.get('https://selenium.dev/selenium/web/single_text_input.html') cmd_ctrl = Keys.COMMAND if sys.platform == 'darwin' else Keys.CONTROL ActionChains(driver)\ .send_keys("Selenium!")\ .send_keys(Keys.ARROW_LEFT)\ .key_down(Keys.SHIFT)\ .send_keys(Keys.ARROW_UP)\ .key_up(Keys.SHIFT)\ .key_down(cmd_ctrl)\ .send_keys("xvv")\ .key_up(cmd_ctrl)\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "SeleniumSelenium!"
new Actions(driver) .KeyDown(Keys.Shift) .SendKeys("a") .KeyUp(Keys.Shift) .SendKeys("b") .Perform();
examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Interactions; namespace SeleniumDocs.ActionsAPI { [TestClass] public class KeysTest : BaseFirefoxTest { [TestMethod] public void KeyDown() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; new Actions(driver) .KeyDown(Keys.Shift) .SendKeys("a") .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("A", textField.GetAttribute("value")); } [TestMethod] public void KeyUp() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; new Actions(driver) .KeyDown(Keys.Shift) .SendKeys("a") .KeyUp(Keys.Shift) .SendKeys("b") .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("Ab", textField.GetAttribute("value")); } [TestMethod] public void SendKeysToActiveElement() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; new Actions(driver) .SendKeys("abc") .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("abc", textField.GetAttribute("value")); } [TestMethod] public void SendKeysToDesignatedElement() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; driver.FindElement(By.TagName("body")).Click(); IWebElement textField = driver.FindElement(By.Id("textInput")); new Actions(driver) .SendKeys(textField, "abc") .Perform(); Assert.AreEqual("abc", textField.GetAttribute("value")); } [TestMethod] public void CopyAndPaste() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; var capabilities = ((WebDriver)driver).Capabilities; String platformName = (string)capabilities.GetCapability("platformName"); String cmdCtrl = platformName.Contains("mac") ? Keys.Command : Keys.Control; new Actions(driver) .SendKeys("Selenium!") .SendKeys(Keys.ArrowLeft) .KeyDown(Keys.Shift) .SendKeys(Keys.ArrowUp) .KeyUp(Keys.Shift) .KeyDown(cmdCtrl) .SendKeys("xvv") .KeyUp(cmdCtrl) .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("SeleniumSelenium!", textField.GetAttribute("value")); } } }
driver.action .key_down(:shift) .send_keys('a') .key_up(:shift) .send_keys('b') .perform
examples/ruby/spec/actions_api/keys_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Keys' do let(:driver) { start_session } let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) } it 'key down' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } driver.action .key_down(:shift) .send_keys('a') .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'A' end it 'key up' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } driver.action .key_down(:shift) .send_keys('a') .key_up(:shift) .send_keys('b') .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'Ab' end it 'sends keys to active element' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } driver.action .send_keys('abc') .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'abc' end it 'sends keys to designated element' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' driver.find_element(tag_name: 'body').click wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } text_field = driver.find_element(id: 'textInput') driver.action .send_keys(text_field, 'Selenium!') .perform expect(text_field.attribute('value')).to eq 'Selenium!' end it 'copy and paste' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } cmd_ctrl = driver.capabilities.platform_name.include?('mac') ? :command : :control driver.action .send_keys('Selenium!') .send_keys(:arrow_left) .key_down(:shift) .send_keys(:arrow_up) .key_up(:shift) .key_down(cmd_ctrl) .send_keys('xvv') .key_up(cmd_ctrl) .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'SeleniumSelenium!' end end
await driver.actions() .keyDown(Key.SHIFT) .sendKeys('a') .keyUp(Key.SHIFT) .sendKeys('b') .perform()
examples/javascript/test/actionsApi/keysTest.spec.js
const { By, Key, Browser, Builder} = require('selenium-webdriver') const assert = require('assert') const { platform } = require('node:process') describe('Keyboard Action - Keys test', function() { let driver before(async function() { driver = await new Builder().forBrowser('chrome').build(); }) after(async () => await driver.quit()) it('KeyDown', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') await driver.actions() .keyDown(Key.SHIFT) .sendKeys('a') .perform() const textField = driver.findElement(By.id('textInput')) assert.deepStrictEqual(await textField.getAttribute('value'), 'A') }) it('KeyUp', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') const textField = driver.findElement(By.id('textInput')) await textField.click() await driver.actions() .keyDown(Key.SHIFT) .sendKeys('a') .keyUp(Key.SHIFT) .sendKeys('b') .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'Ab') }) it('sendKeys', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') const textField = driver.findElement(By.id('textInput')) await textField.click() await driver.actions() .sendKeys('abc') .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'abc') }) it('Designated Element', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') await driver.findElement(By.css('body')).click() const textField = await driver.findElement(By.id('textInput')) await driver.actions() .sendKeys(textField, 'abc') .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'abc') }) it('Copy and Paste', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') const textField = await driver.findElement(By.id('textInput')) const cmdCtrl = platform.includes('darwin') ? Key.COMMAND : Key.CONTROL await driver.actions() .click(textField) .sendKeys('Selenium!') .sendKeys(Key.ARROW_LEFT) .keyDown(Key.SHIFT) .sendKeys(Key.ARROW_UP) .keyUp(Key.SHIFT) .keyDown(cmdCtrl) .sendKeys('xvv') .keyUp(cmdCtrl) .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'SeleniumSelenium!') }) })
.keyDown(Keys.SHIFT) .sendKeys("a") .keyUp(Keys.SHIFT) .sendKeys("b") .perform()
examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt
package dev.selenium.actions_api import dev.selenium.BaseTest import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test import org.openqa.selenium.By import org.openqa.selenium.HasCapabilities import org.openqa.selenium.Keys import org.openqa.selenium.Platform import org.openqa.selenium.interactions.Actions class KeysTest : BaseTest() { @Test fun keyDown() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .perform() val textField = driver.findElement(By.id("textInput")) Assertions.assertEquals("A", textField.getAttribute("value")) } @Test fun keyUp() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .keyUp(Keys.SHIFT) .sendKeys("b") .perform() val textField = driver.findElement(By.id("textInput")) Assertions.assertEquals("Ab", textField.getAttribute("value")) } @Test fun sendKeysToActiveElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") Actions(driver) .sendKeys("abc") .perform() val textField = driver.findElement(By.id("textInput")) Assertions.assertEquals("abc", textField.getAttribute("value")) } @Test fun sendKeysToDesignatedElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") driver.findElement(By.tagName("body")).click() val textField = driver.findElement(By.id("textInput")) Actions(driver) .sendKeys(textField, "Selenium!") .perform() Assertions.assertEquals("Selenium!", textField.getAttribute("value")) } @Test fun copyAndPaste() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") val platformName = (driver as HasCapabilities).getCapabilities().getPlatformName() val cmdCtrl = if(platformName == Platform.MAC) Keys.COMMAND else Keys.CONTROL val textField = driver.findElement(By.id("textInput")) Actions(driver) .sendKeys(textField, "Selenium!") .sendKeys(Keys.ARROW_LEFT) .keyDown(Keys.SHIFT) .sendKeys(Keys.ARROW_UP) .keyUp(Keys.SHIFT) .keyDown(cmdCtrl) .sendKeys("xvv") .keyUp(cmdCtrl) .perform() Assertions.assertEquals("SeleniumSelenium!", textField.getAttribute("value")) } }
Send keys
This is a convenience method in the Actions API that combines keyDown and keyUp commands in one action. Executing this command differs slightly from using the element method, but primarily this gets used when needing to type multiple characters in the middle of other actions.
Active Element
new Actions(driver) .sendKeys("abc") .perform();
examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java
package dev.selenium.actions_api; import dev.selenium.BaseChromeTest; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.Platform; import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.Actions; public class KeysTest extends BaseChromeTest { @Test public void keyDown() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); new Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .perform(); WebElement textField = driver.findElement(By.id("textInput")); Assertions.assertEquals("A", textField.getAttribute("value")); } @Test public void keyUp() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); new Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .keyUp(Keys.SHIFT) .sendKeys("b") .perform(); WebElement textField = driver.findElement(By.id("textInput")); Assertions.assertEquals("Ab", textField.getAttribute("value")); } @Test public void sendKeysToActiveElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); new Actions(driver) .sendKeys("abc") .perform(); WebElement textField = driver.findElement(By.id("textInput")); Assertions.assertEquals("abc", textField.getAttribute("value")); } @Test public void sendKeysToDesignatedElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); driver.findElement(By.tagName("body")).click(); WebElement textField = driver.findElement(By.id("textInput")); new Actions(driver) .sendKeys(textField, "Selenium!") .perform(); Assertions.assertEquals("Selenium!", textField.getAttribute("value")); } @Test public void copyAndPaste() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); Keys cmdCtrl = Platform.getCurrent().is(Platform.MAC) ? Keys.COMMAND : Keys.CONTROL; WebElement textField = driver.findElement(By.id("textInput")); new Actions(driver) .sendKeys(textField, "Selenium!") .sendKeys(Keys.ARROW_LEFT) .keyDown(Keys.SHIFT) .sendKeys(Keys.ARROW_UP) .keyUp(Keys.SHIFT) .keyDown(cmdCtrl) .sendKeys("xvv") .keyUp(cmdCtrl) .perform(); Assertions.assertEquals("SeleniumSelenium!", textField.getAttribute("value")); } }
ActionChains(driver)\ .send_keys("abc")\ .perform()
examples/python/tests/actions_api/test_keys.py
import sys from selenium.webdriver import Keys, ActionChains from selenium.webdriver.common.by import By def test_key_down(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') ActionChains(driver)\ .key_down(Keys.SHIFT)\ .send_keys("abc")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "ABC" def test_key_up(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') ActionChains(driver)\ .key_down(Keys.SHIFT)\ .send_keys("a")\ .key_up(Keys.SHIFT)\ .send_keys("b")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "Ab" def test_send_keys_to_active_element(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') ActionChains(driver)\ .send_keys("abc")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "abc" def test_send_keys_to_designated_element(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') driver.find_element(By.TAG_NAME, "body").click() text_input = driver.find_element(By.ID, "textInput") ActionChains(driver)\ .send_keys_to_element(text_input, "abc")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "abc" def test_copy_and_paste(firefox_driver): driver = firefox_driver driver.get('https://selenium.dev/selenium/web/single_text_input.html') cmd_ctrl = Keys.COMMAND if sys.platform == 'darwin' else Keys.CONTROL ActionChains(driver)\ .send_keys("Selenium!")\ .send_keys(Keys.ARROW_LEFT)\ .key_down(Keys.SHIFT)\ .send_keys(Keys.ARROW_UP)\ .key_up(Keys.SHIFT)\ .key_down(cmd_ctrl)\ .send_keys("xvv")\ .key_up(cmd_ctrl)\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "SeleniumSelenium!"
new Actions(driver) .SendKeys("abc")
examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Interactions; namespace SeleniumDocs.ActionsAPI { [TestClass] public class KeysTest : BaseFirefoxTest { [TestMethod] public void KeyDown() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; new Actions(driver) .KeyDown(Keys.Shift) .SendKeys("a") .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("A", textField.GetAttribute("value")); } [TestMethod] public void KeyUp() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; new Actions(driver) .KeyDown(Keys.Shift) .SendKeys("a") .KeyUp(Keys.Shift) .SendKeys("b") .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("Ab", textField.GetAttribute("value")); } [TestMethod] public void SendKeysToActiveElement() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; new Actions(driver) .SendKeys("abc") .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("abc", textField.GetAttribute("value")); } [TestMethod] public void SendKeysToDesignatedElement() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; driver.FindElement(By.TagName("body")).Click(); IWebElement textField = driver.FindElement(By.Id("textInput")); new Actions(driver) .SendKeys(textField, "abc") .Perform(); Assert.AreEqual("abc", textField.GetAttribute("value")); } [TestMethod] public void CopyAndPaste() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; var capabilities = ((WebDriver)driver).Capabilities; String platformName = (string)capabilities.GetCapability("platformName"); String cmdCtrl = platformName.Contains("mac") ? Keys.Command : Keys.Control; new Actions(driver) .SendKeys("Selenium!") .SendKeys(Keys.ArrowLeft) .KeyDown(Keys.Shift) .SendKeys(Keys.ArrowUp) .KeyUp(Keys.Shift) .KeyDown(cmdCtrl) .SendKeys("xvv") .KeyUp(cmdCtrl) .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("SeleniumSelenium!", textField.GetAttribute("value")); } } }
driver.action .send_keys('abc') .perform
examples/ruby/spec/actions_api/keys_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Keys' do let(:driver) { start_session } let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) } it 'key down' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } driver.action .key_down(:shift) .send_keys('a') .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'A' end it 'key up' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } driver.action .key_down(:shift) .send_keys('a') .key_up(:shift) .send_keys('b') .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'Ab' end it 'sends keys to active element' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } driver.action .send_keys('abc') .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'abc' end it 'sends keys to designated element' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' driver.find_element(tag_name: 'body').click wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } text_field = driver.find_element(id: 'textInput') driver.action .send_keys(text_field, 'Selenium!') .perform expect(text_field.attribute('value')).to eq 'Selenium!' end it 'copy and paste' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } cmd_ctrl = driver.capabilities.platform_name.include?('mac') ? :command : :control driver.action .send_keys('Selenium!') .send_keys(:arrow_left) .key_down(:shift) .send_keys(:arrow_up) .key_up(:shift) .key_down(cmd_ctrl) .send_keys('xvv') .key_up(cmd_ctrl) .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'SeleniumSelenium!' end end
await driver.actions() .sendKeys('abc') .perform()
examples/javascript/test/actionsApi/keysTest.spec.js
const { By, Key, Browser, Builder} = require('selenium-webdriver') const assert = require('assert') const { platform } = require('node:process') describe('Keyboard Action - Keys test', function() { let driver before(async function() { driver = await new Builder().forBrowser('chrome').build(); }) after(async () => await driver.quit()) it('KeyDown', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') await driver.actions() .keyDown(Key.SHIFT) .sendKeys('a') .perform() const textField = driver.findElement(By.id('textInput')) assert.deepStrictEqual(await textField.getAttribute('value'), 'A') }) it('KeyUp', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') const textField = driver.findElement(By.id('textInput')) await textField.click() await driver.actions() .keyDown(Key.SHIFT) .sendKeys('a') .keyUp(Key.SHIFT) .sendKeys('b') .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'Ab') }) it('sendKeys', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') const textField = driver.findElement(By.id('textInput')) await textField.click() await driver.actions() .sendKeys('abc') .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'abc') }) it('Designated Element', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') await driver.findElement(By.css('body')).click() const textField = await driver.findElement(By.id('textInput')) await driver.actions() .sendKeys(textField, 'abc') .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'abc') }) it('Copy and Paste', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') const textField = await driver.findElement(By.id('textInput')) const cmdCtrl = platform.includes('darwin') ? Key.COMMAND : Key.CONTROL await driver.actions() .click(textField) .sendKeys('Selenium!') .sendKeys(Key.ARROW_LEFT) .keyDown(Key.SHIFT) .sendKeys(Key.ARROW_UP) .keyUp(Key.SHIFT) .keyDown(cmdCtrl) .sendKeys('xvv') .keyUp(cmdCtrl) .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'SeleniumSelenium!') }) })
.sendKeys("abc") .perform()
examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt
package dev.selenium.actions_api import dev.selenium.BaseTest import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test import org.openqa.selenium.By import org.openqa.selenium.HasCapabilities import org.openqa.selenium.Keys import org.openqa.selenium.Platform import org.openqa.selenium.interactions.Actions class KeysTest : BaseTest() { @Test fun keyDown() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .perform() val textField = driver.findElement(By.id("textInput")) Assertions.assertEquals("A", textField.getAttribute("value")) } @Test fun keyUp() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .keyUp(Keys.SHIFT) .sendKeys("b") .perform() val textField = driver.findElement(By.id("textInput")) Assertions.assertEquals("Ab", textField.getAttribute("value")) } @Test fun sendKeysToActiveElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") Actions(driver) .sendKeys("abc") .perform() val textField = driver.findElement(By.id("textInput")) Assertions.assertEquals("abc", textField.getAttribute("value")) } @Test fun sendKeysToDesignatedElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") driver.findElement(By.tagName("body")).click() val textField = driver.findElement(By.id("textInput")) Actions(driver) .sendKeys(textField, "Selenium!") .perform() Assertions.assertEquals("Selenium!", textField.getAttribute("value")) } @Test fun copyAndPaste() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") val platformName = (driver as HasCapabilities).getCapabilities().getPlatformName() val cmdCtrl = if(platformName == Platform.MAC) Keys.COMMAND else Keys.CONTROL val textField = driver.findElement(By.id("textInput")) Actions(driver) .sendKeys(textField, "Selenium!") .sendKeys(Keys.ARROW_LEFT) .keyDown(Keys.SHIFT) .sendKeys(Keys.ARROW_UP) .keyUp(Keys.SHIFT) .keyDown(cmdCtrl) .sendKeys("xvv") .keyUp(cmdCtrl) .perform() Assertions.assertEquals("SeleniumSelenium!", textField.getAttribute("value")) } }
Designated Element
new Actions(driver) .sendKeys(textField, "Selenium!") .perform();
examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java
package dev.selenium.actions_api; import dev.selenium.BaseChromeTest; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.Platform; import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.Actions; public class KeysTest extends BaseChromeTest { @Test public void keyDown() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); new Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .perform(); WebElement textField = driver.findElement(By.id("textInput")); Assertions.assertEquals("A", textField.getAttribute("value")); } @Test public void keyUp() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); new Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .keyUp(Keys.SHIFT) .sendKeys("b") .perform(); WebElement textField = driver.findElement(By.id("textInput")); Assertions.assertEquals("Ab", textField.getAttribute("value")); } @Test public void sendKeysToActiveElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); new Actions(driver) .sendKeys("abc") .perform(); WebElement textField = driver.findElement(By.id("textInput")); Assertions.assertEquals("abc", textField.getAttribute("value")); } @Test public void sendKeysToDesignatedElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); driver.findElement(By.tagName("body")).click(); WebElement textField = driver.findElement(By.id("textInput")); new Actions(driver) .sendKeys(textField, "Selenium!") .perform(); Assertions.assertEquals("Selenium!", textField.getAttribute("value")); } @Test public void copyAndPaste() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); Keys cmdCtrl = Platform.getCurrent().is(Platform.MAC) ? Keys.COMMAND : Keys.CONTROL; WebElement textField = driver.findElement(By.id("textInput")); new Actions(driver) .sendKeys(textField, "Selenium!") .sendKeys(Keys.ARROW_LEFT) .keyDown(Keys.SHIFT) .sendKeys(Keys.ARROW_UP) .keyUp(Keys.SHIFT) .keyDown(cmdCtrl) .sendKeys("xvv") .keyUp(cmdCtrl) .perform(); Assertions.assertEquals("SeleniumSelenium!", textField.getAttribute("value")); } }
text_input = driver.find_element(By.ID, "textInput") ActionChains(driver)\ .send_keys_to_element(text_input, "abc")\ .perform()
examples/python/tests/actions_api/test_keys.py
import sys from selenium.webdriver import Keys, ActionChains from selenium.webdriver.common.by import By def test_key_down(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') ActionChains(driver)\ .key_down(Keys.SHIFT)\ .send_keys("abc")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "ABC" def test_key_up(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') ActionChains(driver)\ .key_down(Keys.SHIFT)\ .send_keys("a")\ .key_up(Keys.SHIFT)\ .send_keys("b")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "Ab" def test_send_keys_to_active_element(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') ActionChains(driver)\ .send_keys("abc")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "abc" def test_send_keys_to_designated_element(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') driver.find_element(By.TAG_NAME, "body").click() text_input = driver.find_element(By.ID, "textInput") ActionChains(driver)\ .send_keys_to_element(text_input, "abc")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "abc" def test_copy_and_paste(firefox_driver): driver = firefox_driver driver.get('https://selenium.dev/selenium/web/single_text_input.html') cmd_ctrl = Keys.COMMAND if sys.platform == 'darwin' else Keys.CONTROL ActionChains(driver)\ .send_keys("Selenium!")\ .send_keys(Keys.ARROW_LEFT)\ .key_down(Keys.SHIFT)\ .send_keys(Keys.ARROW_UP)\ .key_up(Keys.SHIFT)\ .key_down(cmd_ctrl)\ .send_keys("xvv")\ .key_up(cmd_ctrl)\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "SeleniumSelenium!"
driver.FindElement(By.TagName("body")).Click(); IWebElement textField = driver.FindElement(By.Id("textInput")); new Actions(driver)
examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Interactions; namespace SeleniumDocs.ActionsAPI { [TestClass] public class KeysTest : BaseFirefoxTest { [TestMethod] public void KeyDown() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; new Actions(driver) .KeyDown(Keys.Shift) .SendKeys("a") .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("A", textField.GetAttribute("value")); } [TestMethod] public void KeyUp() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; new Actions(driver) .KeyDown(Keys.Shift) .SendKeys("a") .KeyUp(Keys.Shift) .SendKeys("b") .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("Ab", textField.GetAttribute("value")); } [TestMethod] public void SendKeysToActiveElement() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; new Actions(driver) .SendKeys("abc") .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("abc", textField.GetAttribute("value")); } [TestMethod] public void SendKeysToDesignatedElement() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; driver.FindElement(By.TagName("body")).Click(); IWebElement textField = driver.FindElement(By.Id("textInput")); new Actions(driver) .SendKeys(textField, "abc") .Perform(); Assert.AreEqual("abc", textField.GetAttribute("value")); } [TestMethod] public void CopyAndPaste() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; var capabilities = ((WebDriver)driver).Capabilities; String platformName = (string)capabilities.GetCapability("platformName"); String cmdCtrl = platformName.Contains("mac") ? Keys.Command : Keys.Control; new Actions(driver) .SendKeys("Selenium!") .SendKeys(Keys.ArrowLeft) .KeyDown(Keys.Shift) .SendKeys(Keys.ArrowUp) .KeyUp(Keys.Shift) .KeyDown(cmdCtrl) .SendKeys("xvv") .KeyUp(cmdCtrl) .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("SeleniumSelenium!", textField.GetAttribute("value")); } } }
text_field = driver.find_element(id: 'textInput') driver.action .send_keys(text_field, 'Selenium!') .perform
examples/ruby/spec/actions_api/keys_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Keys' do let(:driver) { start_session } let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) } it 'key down' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } driver.action .key_down(:shift) .send_keys('a') .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'A' end it 'key up' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } driver.action .key_down(:shift) .send_keys('a') .key_up(:shift) .send_keys('b') .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'Ab' end it 'sends keys to active element' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } driver.action .send_keys('abc') .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'abc' end it 'sends keys to designated element' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' driver.find_element(tag_name: 'body').click wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } text_field = driver.find_element(id: 'textInput') driver.action .send_keys(text_field, 'Selenium!') .perform expect(text_field.attribute('value')).to eq 'Selenium!' end it 'copy and paste' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } cmd_ctrl = driver.capabilities.platform_name.include?('mac') ? :command : :control driver.action .send_keys('Selenium!') .send_keys(:arrow_left) .key_down(:shift) .send_keys(:arrow_up) .key_up(:shift) .key_down(cmd_ctrl) .send_keys('xvv') .key_up(cmd_ctrl) .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'SeleniumSelenium!' end end
const textField = await driver.findElement(By.id('textInput')) await driver.actions() .sendKeys(textField, 'abc') .perform()
examples/javascript/test/actionsApi/keysTest.spec.js
const { By, Key, Browser, Builder} = require('selenium-webdriver') const assert = require('assert') const { platform } = require('node:process') describe('Keyboard Action - Keys test', function() { let driver before(async function() { driver = await new Builder().forBrowser('chrome').build(); }) after(async () => await driver.quit()) it('KeyDown', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') await driver.actions() .keyDown(Key.SHIFT) .sendKeys('a') .perform() const textField = driver.findElement(By.id('textInput')) assert.deepStrictEqual(await textField.getAttribute('value'), 'A') }) it('KeyUp', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') const textField = driver.findElement(By.id('textInput')) await textField.click() await driver.actions() .keyDown(Key.SHIFT) .sendKeys('a') .keyUp(Key.SHIFT) .sendKeys('b') .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'Ab') }) it('sendKeys', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') const textField = driver.findElement(By.id('textInput')) await textField.click() await driver.actions() .sendKeys('abc') .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'abc') }) it('Designated Element', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') await driver.findElement(By.css('body')).click() const textField = await driver.findElement(By.id('textInput')) await driver.actions() .sendKeys(textField, 'abc') .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'abc') }) it('Copy and Paste', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') const textField = await driver.findElement(By.id('textInput')) const cmdCtrl = platform.includes('darwin') ? Key.COMMAND : Key.CONTROL await driver.actions() .click(textField) .sendKeys('Selenium!') .sendKeys(Key.ARROW_LEFT) .keyDown(Key.SHIFT) .sendKeys(Key.ARROW_UP) .keyUp(Key.SHIFT) .keyDown(cmdCtrl) .sendKeys('xvv') .keyUp(cmdCtrl) .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'SeleniumSelenium!') }) })
Actions(driver) .sendKeys(textField, "Selenium!") .perform()
examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt
package dev.selenium.actions_api import dev.selenium.BaseTest import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test import org.openqa.selenium.By import org.openqa.selenium.HasCapabilities import org.openqa.selenium.Keys import org.openqa.selenium.Platform import org.openqa.selenium.interactions.Actions class KeysTest : BaseTest() { @Test fun keyDown() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .perform() val textField = driver.findElement(By.id("textInput")) Assertions.assertEquals("A", textField.getAttribute("value")) } @Test fun keyUp() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .keyUp(Keys.SHIFT) .sendKeys("b") .perform() val textField = driver.findElement(By.id("textInput")) Assertions.assertEquals("Ab", textField.getAttribute("value")) } @Test fun sendKeysToActiveElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") Actions(driver) .sendKeys("abc") .perform() val textField = driver.findElement(By.id("textInput")) Assertions.assertEquals("abc", textField.getAttribute("value")) } @Test fun sendKeysToDesignatedElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") driver.findElement(By.tagName("body")).click() val textField = driver.findElement(By.id("textInput")) Actions(driver) .sendKeys(textField, "Selenium!") .perform() Assertions.assertEquals("Selenium!", textField.getAttribute("value")) } @Test fun copyAndPaste() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") val platformName = (driver as HasCapabilities).getCapabilities().getPlatformName() val cmdCtrl = if(platformName == Platform.MAC) Keys.COMMAND else Keys.CONTROL val textField = driver.findElement(By.id("textInput")) Actions(driver) .sendKeys(textField, "Selenium!") .sendKeys(Keys.ARROW_LEFT) .keyDown(Keys.SHIFT) .sendKeys(Keys.ARROW_UP) .keyUp(Keys.SHIFT) .keyDown(cmdCtrl) .sendKeys("xvv") .keyUp(cmdCtrl) .perform() Assertions.assertEquals("SeleniumSelenium!", textField.getAttribute("value")) } }
Copy and Paste
Here’s an example of using all of the above methods to conduct a copy / paste action. Note that the key to use for this operation will be different depending on if it is a Mac OS or not. This code will end up with the text: SeleniumSelenium!
Keys cmdCtrl = Platform.getCurrent().is(Platform.MAC) ? Keys.COMMAND : Keys.CONTROL; WebElement textField = driver.findElement(By.id("textInput")); new Actions(driver) .sendKeys(textField, "Selenium!") .sendKeys(Keys.ARROW_LEFT) .keyDown(Keys.SHIFT) .sendKeys(Keys.ARROW_UP) .keyUp(Keys.SHIFT) .keyDown(cmdCtrl) .sendKeys("xvv") .keyUp(cmdCtrl) .perform(); Assertions.assertEquals("SeleniumSelenium!", textField.getAttribute("value"));
examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java
package dev.selenium.actions_api; import dev.selenium.BaseChromeTest; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.Platform; import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.Actions; public class KeysTest extends BaseChromeTest { @Test public void keyDown() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); new Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .perform(); WebElement textField = driver.findElement(By.id("textInput")); Assertions.assertEquals("A", textField.getAttribute("value")); } @Test public void keyUp() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); new Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .keyUp(Keys.SHIFT) .sendKeys("b") .perform(); WebElement textField = driver.findElement(By.id("textInput")); Assertions.assertEquals("Ab", textField.getAttribute("value")); } @Test public void sendKeysToActiveElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); new Actions(driver) .sendKeys("abc") .perform(); WebElement textField = driver.findElement(By.id("textInput")); Assertions.assertEquals("abc", textField.getAttribute("value")); } @Test public void sendKeysToDesignatedElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); driver.findElement(By.tagName("body")).click(); WebElement textField = driver.findElement(By.id("textInput")); new Actions(driver) .sendKeys(textField, "Selenium!") .perform(); Assertions.assertEquals("Selenium!", textField.getAttribute("value")); } @Test public void copyAndPaste() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html"); Keys cmdCtrl = Platform.getCurrent().is(Platform.MAC) ? Keys.COMMAND : Keys.CONTROL; WebElement textField = driver.findElement(By.id("textInput")); new Actions(driver) .sendKeys(textField, "Selenium!") .sendKeys(Keys.ARROW_LEFT) .keyDown(Keys.SHIFT) .sendKeys(Keys.ARROW_UP) .keyUp(Keys.SHIFT) .keyDown(cmdCtrl) .sendKeys("xvv") .keyUp(cmdCtrl) .perform(); Assertions.assertEquals("SeleniumSelenium!", textField.getAttribute("value")); } }
cmd_ctrl = Keys.COMMAND if sys.platform == 'darwin' else Keys.CONTROL ActionChains(driver)\ .send_keys("Selenium!")\ .send_keys(Keys.ARROW_LEFT)\ .key_down(Keys.SHIFT)\ .send_keys(Keys.ARROW_UP)\ .key_up(Keys.SHIFT)\ .key_down(cmd_ctrl)\ .send_keys("xvv")\ .key_up(cmd_ctrl)\ .perform()
examples/python/tests/actions_api/test_keys.py
import sys from selenium.webdriver import Keys, ActionChains from selenium.webdriver.common.by import By def test_key_down(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') ActionChains(driver)\ .key_down(Keys.SHIFT)\ .send_keys("abc")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "ABC" def test_key_up(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') ActionChains(driver)\ .key_down(Keys.SHIFT)\ .send_keys("a")\ .key_up(Keys.SHIFT)\ .send_keys("b")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "Ab" def test_send_keys_to_active_element(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') ActionChains(driver)\ .send_keys("abc")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "abc" def test_send_keys_to_designated_element(driver): driver.get('https://selenium.dev/selenium/web/single_text_input.html') driver.find_element(By.TAG_NAME, "body").click() text_input = driver.find_element(By.ID, "textInput") ActionChains(driver)\ .send_keys_to_element(text_input, "abc")\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "abc" def test_copy_and_paste(firefox_driver): driver = firefox_driver driver.get('https://selenium.dev/selenium/web/single_text_input.html') cmd_ctrl = Keys.COMMAND if sys.platform == 'darwin' else Keys.CONTROL ActionChains(driver)\ .send_keys("Selenium!")\ .send_keys(Keys.ARROW_LEFT)\ .key_down(Keys.SHIFT)\ .send_keys(Keys.ARROW_UP)\ .key_up(Keys.SHIFT)\ .key_down(cmd_ctrl)\ .send_keys("xvv")\ .key_up(cmd_ctrl)\ .perform() assert driver.find_element(By.ID, "textInput").get_attribute('value') == "SeleniumSelenium!"
var capabilities = ((WebDriver)driver).Capabilities; String platformName = (string)capabilities.GetCapability("platformName"); String cmdCtrl = platformName.Contains("mac") ? Keys.Command : Keys.Control; new Actions(driver) .SendKeys("Selenium!") .SendKeys(Keys.ArrowLeft) .KeyDown(Keys.Shift) .SendKeys(Keys.ArrowUp)
examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Interactions; namespace SeleniumDocs.ActionsAPI { [TestClass] public class KeysTest : BaseFirefoxTest { [TestMethod] public void KeyDown() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; new Actions(driver) .KeyDown(Keys.Shift) .SendKeys("a") .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("A", textField.GetAttribute("value")); } [TestMethod] public void KeyUp() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; new Actions(driver) .KeyDown(Keys.Shift) .SendKeys("a") .KeyUp(Keys.Shift) .SendKeys("b") .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("Ab", textField.GetAttribute("value")); } [TestMethod] public void SendKeysToActiveElement() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; new Actions(driver) .SendKeys("abc") .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("abc", textField.GetAttribute("value")); } [TestMethod] public void SendKeysToDesignatedElement() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; driver.FindElement(By.TagName("body")).Click(); IWebElement textField = driver.FindElement(By.Id("textInput")); new Actions(driver) .SendKeys(textField, "abc") .Perform(); Assert.AreEqual("abc", textField.GetAttribute("value")); } [TestMethod] public void CopyAndPaste() { driver.Url = "https://selenium.dev/selenium/web/single_text_input.html"; var capabilities = ((WebDriver)driver).Capabilities; String platformName = (string)capabilities.GetCapability("platformName"); String cmdCtrl = platformName.Contains("mac") ? Keys.Command : Keys.Control; new Actions(driver) .SendKeys("Selenium!") .SendKeys(Keys.ArrowLeft) .KeyDown(Keys.Shift) .SendKeys(Keys.ArrowUp) .KeyUp(Keys.Shift) .KeyDown(cmdCtrl) .SendKeys("xvv") .KeyUp(cmdCtrl) .Perform(); IWebElement textField = driver.FindElement(By.Id("textInput")); Assert.AreEqual("SeleniumSelenium!", textField.GetAttribute("value")); } } }
driver.action .send_keys('Selenium!') .send_keys(:arrow_left) .key_down(:shift) .send_keys(:arrow_up) .key_up(:shift) .key_down(cmd_ctrl) .send_keys('xvv') .key_up(cmd_ctrl) .perform
examples/ruby/spec/actions_api/keys_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Keys' do let(:driver) { start_session } let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) } it 'key down' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } driver.action .key_down(:shift) .send_keys('a') .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'A' end it 'key up' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } driver.action .key_down(:shift) .send_keys('a') .key_up(:shift) .send_keys('b') .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'Ab' end it 'sends keys to active element' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } driver.action .send_keys('abc') .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'abc' end it 'sends keys to designated element' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' driver.find_element(tag_name: 'body').click wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } text_field = driver.find_element(id: 'textInput') driver.action .send_keys(text_field, 'Selenium!') .perform expect(text_field.attribute('value')).to eq 'Selenium!' end it 'copy and paste' do driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html' wait.until { driver.find_element(id: 'textInput').attribute('autofocus') } cmd_ctrl = driver.capabilities.platform_name.include?('mac') ? :command : :control driver.action .send_keys('Selenium!') .send_keys(:arrow_left) .key_down(:shift) .send_keys(:arrow_up) .key_up(:shift) .key_down(cmd_ctrl) .send_keys('xvv') .key_up(cmd_ctrl) .perform expect(driver.find_element(id: 'textInput').attribute('value')).to eq 'SeleniumSelenium!' end end
const cmdCtrl = platform.includes('darwin') ? Key.COMMAND : Key.CONTROL await driver.actions() .click(textField) .sendKeys('Selenium!') .sendKeys(Key.ARROW_LEFT) .keyDown(Key.SHIFT) .sendKeys(Key.ARROW_UP) .keyUp(Key.SHIFT) .keyDown(cmdCtrl) .sendKeys('xvv') .keyUp(cmdCtrl) .perform()
examples/javascript/test/actionsApi/keysTest.spec.js
const { By, Key, Browser, Builder} = require('selenium-webdriver') const assert = require('assert') const { platform } = require('node:process') describe('Keyboard Action - Keys test', function() { let driver before(async function() { driver = await new Builder().forBrowser('chrome').build(); }) after(async () => await driver.quit()) it('KeyDown', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') await driver.actions() .keyDown(Key.SHIFT) .sendKeys('a') .perform() const textField = driver.findElement(By.id('textInput')) assert.deepStrictEqual(await textField.getAttribute('value'), 'A') }) it('KeyUp', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') const textField = driver.findElement(By.id('textInput')) await textField.click() await driver.actions() .keyDown(Key.SHIFT) .sendKeys('a') .keyUp(Key.SHIFT) .sendKeys('b') .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'Ab') }) it('sendKeys', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') const textField = driver.findElement(By.id('textInput')) await textField.click() await driver.actions() .sendKeys('abc') .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'abc') }) it('Designated Element', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') await driver.findElement(By.css('body')).click() const textField = await driver.findElement(By.id('textInput')) await driver.actions() .sendKeys(textField, 'abc') .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'abc') }) it('Copy and Paste', async function() { await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html') const textField = await driver.findElement(By.id('textInput')) const cmdCtrl = platform.includes('darwin') ? Key.COMMAND : Key.CONTROL await driver.actions() .click(textField) .sendKeys('Selenium!') .sendKeys(Key.ARROW_LEFT) .keyDown(Key.SHIFT) .sendKeys(Key.ARROW_UP) .keyUp(Key.SHIFT) .keyDown(cmdCtrl) .sendKeys('xvv') .keyUp(cmdCtrl) .perform() assert.deepStrictEqual(await textField.getAttribute('value'), 'SeleniumSelenium!') }) })
val textField = driver.findElement(By.id("textInput")) Actions(driver) .sendKeys(textField, "Selenium!") .sendKeys(Keys.ARROW_LEFT) .keyDown(Keys.SHIFT) .sendKeys(Keys.ARROW_UP) .keyUp(Keys.SHIFT) .keyDown(cmdCtrl) .sendKeys("xvv") .keyUp(cmdCtrl) .perform()
examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt
package dev.selenium.actions_api import dev.selenium.BaseTest import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test import org.openqa.selenium.By import org.openqa.selenium.HasCapabilities import org.openqa.selenium.Keys import org.openqa.selenium.Platform import org.openqa.selenium.interactions.Actions class KeysTest : BaseTest() { @Test fun keyDown() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .perform() val textField = driver.findElement(By.id("textInput")) Assertions.assertEquals("A", textField.getAttribute("value")) } @Test fun keyUp() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") Actions(driver) .keyDown(Keys.SHIFT) .sendKeys("a") .keyUp(Keys.SHIFT) .sendKeys("b") .perform() val textField = driver.findElement(By.id("textInput")) Assertions.assertEquals("Ab", textField.getAttribute("value")) } @Test fun sendKeysToActiveElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") Actions(driver) .sendKeys("abc") .perform() val textField = driver.findElement(By.id("textInput")) Assertions.assertEquals("abc", textField.getAttribute("value")) } @Test fun sendKeysToDesignatedElement() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") driver.findElement(By.tagName("body")).click() val textField = driver.findElement(By.id("textInput")) Actions(driver) .sendKeys(textField, "Selenium!") .perform() Assertions.assertEquals("Selenium!", textField.getAttribute("value")) } @Test fun copyAndPaste() { driver.get("https://www.selenium.dev/selenium/web/single_text_input.html") val platformName = (driver as HasCapabilities).getCapabilities().getPlatformName() val cmdCtrl = if(platformName == Platform.MAC) Keys.COMMAND else Keys.CONTROL val textField = driver.findElement(By.id("textInput")) Actions(driver) .sendKeys(textField, "Selenium!") .sendKeys(Keys.ARROW_LEFT) .keyDown(Keys.SHIFT) .sendKeys(Keys.ARROW_UP) .keyUp(Keys.SHIFT) .keyDown(cmdCtrl) .sendKeys("xvv") .keyUp(cmdCtrl) .perform() Assertions.assertEquals("SeleniumSelenium!", textField.getAttribute("value")) } }