0
0

More than 3 years have passed since last update.

【Selenium】文字入力中にカーソルが別のフォームに移動してしまう

Last updated at Posted at 2019-11-19

背景

次のようにして、全画面コピーした内容をテキストエリアに入力する処理を作っていました。

js = "
  document.execCommand('SelectAll');
  return window.getSelection().toString();
"
str = driver.execute_script(js)
driver.find_element(:id, 'hoge').send_keys(str)

ところが、入力中に別のフォームに移ってしまい、入力がめちゃくちゃになってしまいました。

結論

send_keysで入力する前に、replace()関数を利用して\tを置き換える。

js = "
  document.execCommand('SelectAll');
  return window.getSelection().toString().replace(/\t/g, ' ');
"
str = driver.execute_script(js)
driver.find_element(:id, 'hoge').send_keys(str)

\tとは

バックスラッシュ記法で「タブ」を意味しています。
全画面コピーした際に紛れ込んでいた\tによって、カーソルが移動していたようです。

replace()関数

次のようにすることで、「str」中の「対象」を「置換後」に置き換えることができます。

str.replace('対象', '置換後')

このままでは1回しか置き換えられないので、置き換えたい対象が複数ある場合は正規表現のgフラグを使用する必要があります。

str = 'hogehogehoge';
str.replace('hoge', 'fuga');    // 'fugahogehoge'
str.replace('/hoge/g', 'fuga'); // 'fugafugafuga'

これを利用して文中含まれるすべての\tに置き換えました。

参考

0
0
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
0
0