LoginSignup
10
16

More than 5 years have passed since last update.

Selenide(fastSetValue=true)でSeleniumのフォーム入力を高速化できる!?

Posted at

今回は、Seleniumのフォーム入力を高速化する方法を紹介します。
Seleniumを使ってフォーム入力を行なう場合は、通常はWebElementclearsendKeysメソッドを使いますが、入力文字数に比例して入力速度が遅くなる傾向があります。少ない文字数だと入力速度が遅くなることを体感するのは難しいですが、テキストエリアなどに大量の文字を入力すると、入力速度が遅くなることを体感することができます。

一般的なフォーム入力の方法

Seleniumでの一般的なフォーム入力の方法は、以下のような感じです。

HTMLの入力フォーム例
<textarea name="note" cols="100" rows="30"></textarea>
Seleniumを介した入力フォームへの値の設定例
WebElement element = webDriver.findElement(By.name("note"));
element.sendKeys("foo...");

高速化=JavaScriptを使う!!

SeleniumはJavaScriptをサポートしており、JavaScriptを使用してフォーム入力を行なうことができます。JavaScriptを使用すると、sendKeysメソッドを使う方法に比べて入力速度の向上が望めます。

JavaScriptを使用してフォーム入力する方法は、以下のような感じです。

WebElement element = webDriver.findElement(By.name("note"));
((JavascriptExecutor) webDriver).executeScript("arguments[0].value = arguments[1];", element, "foo...");

ポイントは・・・

  • WebDriverインスタンスをJavascriptExecutorにキャストする
  • JavascriptExecutorexecuteScriptメソッドの第1引数にJavaScriptコードを指定する
  • JavascriptExecutorexecuteScriptメソッドの第2引数以降にJavaScriptコードへのパラメータを渡す

という点です。

JavaScriptコードの中では、JavaScriptコードへのパラメータを「arguments[n]」という形式(nは0〜)で指定できるため、上の例だと・・・

  • arguments[0]にはWebElementのインスタンス( = webDriver.findElement(By.name("note"))の結果)
  • arguments[1]には入力値( = "foo...")

がJavaScriptコードに渡され、入力フォームのnoteに入力値を設定することができるのです!!
ただ・・・ちょっとコード量が増える(煩雑なコードになる)ので、ユーティリティメソッドなどを用意する方がよさそうですね。

SelenideでJavaScriptを使う!!

SelenideはSeleniumのラッパーライブラリで、jQuery LikeにSeleniumのWebElementを操作することができます。

Selenideを使用してフォーム入力する方法は、以下のような感じです。

$(By.name("note")).val("foo...");

Selenideのデフォルト動作はSeleniumの標準的な入力方法と同様に、WebElementclearsendKeysメソッドを使いますが、この動作はSelenideのオプション指定でJavaScriptを使用する方法に変更することができます。(=入力値を設定するコードを直す必要はありません!!)

強制的にJavaScriptして入力値を入力したい場合は、以下のようにテストケースクラスでオプションを指定しましょう。

...
import static com.codeborne.selenide.Configuration.*; // オプション指定するためにstaticフィールドのインポート
...
public class UITest {

    @Before
    public void setupSelenide() {
        // ...
        fastSetValue = true; // 値の設定を高速化するオプションを有効にする (JavaScriptを使用したフォーム入力が使われる)
    }

    // ...

}

入力方法を実行時に切り替える場合は、テストケース内で指定するのではなく、Javaのシステムプロパティを使用してオプションを指定(-Dselenide.fastSetValue=true)してください。

実践アプリの紹介

以下のアプリで、Selenide+JavaScriptを使用したフォーム入力を実践しています。(参考までに・・)

まとめ

Seleniumを使用して大量の文字をフォームに入力する場合は、JavaScriptを使用する方法に変更することを検討してみるとよいと思います。1項目単位でみると速度差は体感しずらいと思いますが・・・フォーム内の入力項目数やテストケース数が増えるにつれて(チリツモで)速度差を体感できると思います。

参考サイト

10
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
16