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

キーボードアクション

ウェブページと対話するための任意のキー入力デバイスの表現。

マウスアクション

ウェブページと対話するための任意のポインターデバイスの表現。

ペンアクション

ウェブページと対話するためのペン型スタイラスのポインター入力の表現。

スクロールホイールアクション

ウェブページと対話するためのスクロールホイール入力デバイスの表現。