鍵盤動作
用於與網頁互動的任何按鍵輸入裝置的表示法。
除了高階的元素互動之外,Actions API 還提供精細的控制,精確控制指定的輸入裝置可以執行的操作。Selenium 為 3 種輸入來源提供介面:用於鍵盤裝置的按鍵輸入、用於滑鼠、觸控筆或觸控裝置的指標輸入,以及用於滾輪裝置的滾輪輸入(在 Selenium 4.2 中引入)。Selenium 允許您建構分配給特定輸入的個別動作命令,並將它們鏈結在一起,然後呼叫相關聯的 perform 方法一次執行所有命令。
在從舊版 JSON Wire Protocol 轉移到新的 W3C WebDriver Protocol 的過程中,動作的底層建構區塊變得格外詳細。它非常強大,但每個輸入裝置都有許多使用方式,如果您需要管理多個裝置,您有責任確保它們之間正確同步。
值得慶幸的是,您可能不需要學習如何直接使用底層命令,因為幾乎所有您可能想要執行的操作都已提供了一個方便的方法,為您組合了底層命令。這些都在鍵盤、滑鼠、觸控筆和滾輪頁面中記錄。
指標移動和滾輪滾動允許使用者設定動作的持續時間,但有時您只需要在動作之間等待一下,才能使事情正常運作。
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.moveToElement(clickable)
.pause(Duration.ofSeconds(1))
.clickAndHold()
.pause(Duration.ofSeconds(1))
.sendKeys("abc")
.perform();
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver)\
.move_to_element(clickable)\
.pause(1)\
.click_and_hold()\
.pause(1)\
.send_keys("abc")\
.perform()
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.MoveToElement(clickable)
.Pause(TimeSpan.FromSeconds(1))
.ClickAndHold()
.Pause(TimeSpan.FromSeconds(1))
.SendKeys("abc")
.Perform();
clickable = driver.find_element(id: 'clickable')
driver.action
.move_to(clickable)
.pause(duration: 1)
.click_and_hold
.pause(duration: 1)
.send_keys('abc')
.perform
const clickable = await driver.findElement(By.id('clickable'))
await driver.actions()
.move({ origin: clickable })
.pause(1000)
.press()
.pause(1000)
.sendKeys('abc')
.perform()
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.moveToElement(clickable)
.pause(Duration.ofSeconds(1))
.clickAndHold()
.pause(Duration.ofSeconds(1))
.sendKeys("abc")
.perform()
需要注意的重要事項是,驅動程式會記住整個會話中所有輸入項目的狀態。即使您建立動作類別的新實例,被按下的按鍵和指標的位置也將處於先前執行的動作使其處於的任何狀態。
有一個特殊的方法可以釋放所有目前被按下的按鍵和指標按鈕。此方法在每種語言中的實作方式都不同,因為它不會與 perform 方法一起執行。
((RemoteWebDriver) driver).resetInputState();
ActionBuilder(driver).clear_actions()
((WebDriver)driver).ResetInputState();
driver.action.release_actions
await driver.actions().clear()
(driver as RemoteWebDriver).resetInputState()
了解更多或查看完整的贊助商列表。