9
4

More than 5 years have passed since last update.

textareaへのsend_keysの速度が遅い時の対処法

Last updated at Posted at 2017-09-29

ruby+webdriverで入力する際の標準コマンドsend_keys

inputフォームにおいてtext、textarea、selectに対応するコマンドはsend_keysが主流となっています。

driver.find_element(:id, 'textarea').send_keys('こんにちわ')

今まで当然のようにこのまま実装していました。

textareaへの入力速度が遅いというクレームが来た

textareaとなると数千文字を入力する必要がある場合があると思います。
私の環境はwindow10+ruby2.3.3+chromedriverなのですが、send_keysでテキストを入力していくと、
高速ではあるのですが、1文字1文字入力していく形となり、同様の動作を1000件のように大量に行う必要があると、
大変な時間が掛かって来てしまいます。

私が開発依頼を請けたシステムも3000文字ほどの入力を1000件続けて行うような要件となっていました。
「selenium IDEでは一瞬で文字が貼り付けられたのにこれでは遅すぎる」というお叱りを受けることになったのです。

コピペ的なことで速度をあげたい

textareaに一気に入力するのであればコピペっぽいことでいけるでしょうということで以下が必要だなと考えました。

・クリップボードへ値をつっこむ
・入力したいtextareaにカーソルを合わせる
・クリップボードの中身をペーストする

クリップボードへのコピーを実装

とりあえずクリップボードに入力する値を取り込む必要があるので clipboard をいうgemを使ってみました。

ターミナルに以下を入力してインストール。

gem install clipboard

インストールができたら以下でクリップボードに値をつっこみましょう。

require 'clipboard'

str = variable # variableには代入したい値が入っている

Clipboard.copy(str) 

これでクリップボードの中に値が入りました。

ペーストしたいtextareaにカーソルを合わせる

ペーストしたいtextareaにカーソルがあっている必要があるので、要素をclickしましょう。

driver.find_element(:id, 'textarea').click

seleniumでキーボード操作を行う

clipboardにはペースト用に文字通り"paste"というものも用意されているのですが、なぜか私が実装したいサービスでは動かなかったので、
キーボードの操作をseleniumの ActionBuilder クラスで実装しました。

driver.action.key_down(:control).send_keys("v").key_up(:control).perform 

これで必要なコードは揃いましたね。

まとめ

では、以上までのコードをまとめてみましょう。

require 'selenium-webdriver'
require 'clipboard'

driver = Selenium::WebDruver.for :chrome

driver.find_element(:id, 'textarea').click
str = variable
Clipboard.copy(str)
d.action.key_down(:control).send_keys("v").key_up(:control).perform 

これでコピペのようにtextareaに値を入力することができるので高速化が実現できました。

たぶんjsを使ったりとかいろいろ高速化できる方法はあると思いますので、代替案があったらコメントにバンバン書き込んでいただければと思います。

自分のブログの紹介

ruby + selenium webdriverに関するブログをやっていますので、そちらもよろしくお願い致します。
katsulog

それとこれが最初の記事になりますので、何か改善した方が良い部分があったら是非コメントください。

9
4
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
9
4