ハマログ

株式会社イーツー・インフォの社員ブログ

ITツールの機能紹介-SeleniumIDEで取得したテキストの改行を消す方法/あいまい検索をする方法-

つ~じ~です。やっぱり自分はゲームが大好きだと最近再認識してます。多分一生何かしらのゲームやってる気がします。

さて今回もまた前回に引き続きSeleniumIDEの話題です。前回のブログはこちら

ITツールの機能紹介-SeleniumIDEのループを1000回以上実施する方法-

SeleniumIDE構築中に起きたトラブルの解決を図ったものですが、今回もその流れです。

なお今回の解決方法は正規のものではなく、だいぶ荒業じみたやり方をしているため、あくまで参考の一つとして捉えてください。

SeleniumIDEでは変数に改行ありのテキストを使用できない?

某PJにて、「メモ欄に記入された文章の中に特定の文言があるかどうかを検証したい」という案件が出てきました。その解決方法として、以下の方法を検討しました。

  1. メモ欄のテキストをstore系コマンドで取得する
  2. execute scriptコマンドとindexOf関数を駆使して、あいまい検索関数を実装する
  3. あいまい検索関数の引数に『メモ欄テキスト』と『探したい文言』を指定して、true/falseを測定する

あいまい検索に関しては以下の記述で実現できました。

あいまい検索

■関数定義

Commandexecute script
TargetgetFuzzySearch =  function getFuzzySearch(mychecktext, myindextext){var checktext = mychecktext; var indextext = myindextext; return checktext.indexOf(indextext) !== -1 }
Value:指定不要

■変数定義

Commandexecute script
Targetreturn getFuzzySearch([検索対象の文字列], [探したい文字列]);
Valueansfuzzysearch

上記を実行し、[検索対象の文字列]の中に[探したい文字列]があると、${ansfuzzysearch}にtrueが格納されます。無ければfalseです。
あいまい検索は実現できたため、さっそく取得したメモテキストを引数に使用して判定を行ってみよう!と実行したところ、
なぜか以下のようなエラーが出て参りました。

Bad control character in string literal in JSON at position 6
意訳すると「不正な制御文字があります」とのこと。どうやら引数として使用していたメモテキストの中に改行コード(\n)、つまり¥マークが含まれていることが原因のようです。
調べてみた結果、以下の情報がヒットしました。

https://groups.google.com/g/seleniumjp/c/Yhej-52iAlY/m/GjdNeuewBgAJ

これは store text で変数に格納された値に改行コードが入っていたため
execute script 内で展開したときにSelenium IDEの管理方法に合わずにエラーになってしまっているのだと思われます。
残念ながらこれは4年前から解決せずに残っている問題で、今のところ特に対処方法がありません。
https://github.com/SeleniumHQ/selenium-ide/issues/430

公式でも解決していない以上、変数に改行ありのテキストは使用できないかと諦めていましたが、
以下の方法で半ば強引に解決することに成功しました。荒業です。

  1. 改行ありの文章をstore系コマンドで取得する
  2. 当該検証ページ内の1行テキストフォーム(改行できないテキストフォーム)に
    そのテキストをtypeする
     (こうすると入力された瞬間改行コードが消える)
  3. 1行テキストフォームに入力された改行削除済みテキストをstore系コマンドで再取得する
  4. それを引数として使う

これを実施することでメモテキストの改行を取り除くことができ、それをあいまい検索の引数に当てはめることで目的を達成させることに成功しました。

発想としては、float型の小数点ありの数値を小数点以下切り捨てにするためにint型にコンバートして再度戻す、みたいなやり方に近いです。

当該検証ページ内に1行テキストフォームが1個あれば実現可能です。もし既にデータが入っているテキストフォームしかない場合は、改行削除済みテキスト再取得後に元の文章をtype仕直せば元に戻せます。

1行テキストフォームが無い場合は詰みです。また、「¥2,000」のように改行ではなく金額として¥マークを使っている場合、1行テキストフォームに入力してもうまくいかない(¥マークが消えない)場合がございます。この場合も詰みです。


公式による適切な改修が待ち望まれます。今回はこれにて

IDESeleniumあいまい検索削除改行

  つーじー   2023年6月16日


関連記事

PHPでChatworkに自動投稿する

イーツー・インフォでは、社内コミュニケーションツールとしてChatworkを利用…

Laravel Collectionのpluckとlistsについてまとめ(5.2以降はpluck)

Laravelの5系のpluckとlistsについて、混乱したのでまとめておきま…

胃カメラによる内臓調査及び試験について

以前より長年お世話になっている医師から「ピロリ菌検査した方がいい」とさんざ言われ…


← 前の投稿

次の投稿 →