动作 API

用于向 Web 浏览器提供虚拟设备输入操作的底层接口。

除了高层级的元素交互之外,动作 API 还提供了对指定输入设备可以执行的操作的精细控制。Selenium 为 3 种输入源提供接口:用于键盘设备的按键输入、用于鼠标、笔或触摸设备的指针输入,以及用于滚轮设备的滚轮输入(在 Selenium 4.2 中引入)。Selenium 允许您构建分配给特定输入的单独动作命令,将它们链接在一起,并调用关联的 perform 方法一次性执行它们。

动作构建器

在从传统的 JSON Wire 协议迁移到新的 W3C WebDriver 协议的过程中,动作的底层构建块变得特别详细。它非常强大,但每个输入设备都有多种使用方式,如果您需要管理多个设备,您有责任确保它们之间的正确同步。

幸运的是,您可能不需要直接学习如何使用底层命令,因为几乎您可能想做的任何事情都有一个方便的方法,它为您组合了底层命令。这些都在键盘鼠标滚轮页面中进行了记录。

暂停

指针移动和滚轮滚动允许用户为动作设置持续时间,但有时您只需要在动作之间等待一段时间才能使其正常工作。

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

键盘动作

用于与网页交互的任何按键输入设备的表示形式。

鼠标动作

用于与网页交互的任何指针设备的表示形式。

笔动作

用于与网页交互的笔触控笔类型的指针输入的表示形式。

滚轮动作

用于与网页交互的滚轮输入设备的表示形式。