Actions API

用於向網頁瀏覽器提供虛擬化裝置輸入動作的底層介面。

除了高階的元素互動之外,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()

Selenium v4.2

            IWebElement clickable = driver.FindElement(By.Id("clickable"));
            new Actions(driver)
                .MoveToElement(clickable)
                .Pause(TimeSpan.FromSeconds(1))
                .ClickAndHold()
                .Pause(TimeSpan.FromSeconds(1))
                .SendKeys("abc")
                .Perform();

Selenium v4.2

    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()

鍵盤動作

用於與網頁互動的任何按鍵輸入裝置的表示法。

滑鼠動作

用於與網頁互動的任何指標裝置的表示法。

觸控筆動作

用於與網頁互動的觸控筆式指標輸入的表示法。

滾輪動作

用於與網頁互動的滾輪輸入裝置的表示法。