Tiếp tục series về selenium, chúng ta sẽ cùng tìm hiểu về Keyboard actions.
Chúng ta dùng bàn phím để tương tác với các elements trên website. Có 2 actions được thực hiện bằng bàn phím: Nhấn và thả phím.
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
Ngoài các keys được biểu thị bằng Unicode thông thường, các giá trị unicode đã được gán cho các keys khác để sử dụng với Selenium. Mỗi ngôn ngữ có cách riêng để tham chiếu các keys này. Bạn có thể xem đầy đủ danh sách chúng ở đây.
Sử dụng biến KEYS với JS
Key down
await driver.actions()
.keyDown(Key.SHIFT)
.sendKeys('a')
.perform()
Key up
await driver.actions()
.keyDown(Key.SHIFT)
.sendKeys('a')
.keyUp(Key.SHIFT)
.sendKeys('b')
.perform(
Send keys
Đây là một phương thức tiện lợi trong Actions API, nó cho phép kết hợp các lệnh keyDown & keyUp trong cùng một hành động. Việc thực hiện lệnh này hơi khác so với element method, nhưng về cơ bản nó được sử dụn khi cần nhập nhiều characters ở giữa các actions khác.
Active Element
const textField = driver.findElement(By.id('textInput'))
await textField.click()
Designated Element
const textField = await driver.findElement(By.id('textInput'))
await driver.actions()
.sendKeys(textField, 'abc')
.perform()
Copy and Paste
Đây là một ví dụ về sử dụng tất cả những method phía trên để thực hiện copy/paste action.
Lưu ý: key được sử dụng sẽ khác nhau tùy thuộc vào hệ điều hành có phải Mac OS không. Xem đầy đủ ví dụ trên github.
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()
Tài liệu tham khảo: https://www.selenium.dev/documentation/webdriver/actions_api/keyboard/
Cảm ơn mọi người đã đọc bài.