Selenium IDEで複数行を入力すると、sideファイル(json)では”\\n”

Selenium IDEでフォームテストとSELECTメニューテストを作る

Google ChromeとSelenium IDE 3.17.0でテストケースを作っていました。(FireFoxでも試しましたが、同様でした。)

レコーディングを開始して、ブラウザに表示されたフォームのtextarea欄に複数行を入力しました。

aaa
bbb
cccCode language: plaintext (plaintext)

すると、Selenium IDEのvalue欄には、

aaa\nbbb\ncccCode language: plaintext (plaintext)

と表示されました。改行がJSONエンコードされて「\n」と表示されたんですね。問題ありません。

これを実行すると、ブラウザのtextarea欄には、

aaa
bbb
cccCode language: plaintext (plaintext)

と入力されました。

送信ボタンをクリックした後、再度フォームを表示します。さきほどのtextarea欄をassert valueしたところ、成功です。これをフォームテストとして保存しました。

このtextarea欄はサーバー側で処理されて、改行で分割して、別のページでSELECTメニューとして表示されます。

このページを表示して、そのSELECTメニューの最初の要素が「aaa」となるはずのassertも成功しました。これをSELECTメニューテストとして保存しました。

いい感じだね

selenium-side-runnerでSELECTメニューテストが失敗

さて、ここからが本題です。

次に、ターミナルでselenium-side-runnerで実行しました。Chromeのheadlessです。

フォームテストは、無事成功しました。

ところが、SELECTメニューテストが失敗しました。SELECTメニューの最初の要素が「aaa」となるはずが、「aaa\nbbb\nccc」となっています。

さかのぼって調べると、フォームテストのtextarea欄へ

aaa\nbbb\ncccCode language: plaintext (plaintext)

と入力されていました。

sideファイルを確認すると、

"value": "aaa\\nbbb\\nccc"Code language: plaintext (plaintext)

となっていました。バックスラッシュ「\」 が 2つになっていますね。

Selenium IDEとselenium-side-runnerで、改行の扱いが違うようです。

Selenium IDEでは、ブラウザ上のtextarea欄の「改行」は、Selenium IDEのvalue欄では「\n」、sideファイルでは「\\n」。JSONの改行の扱いとしては、こちらが正しいです。

selenium-side-runnerでは、ブラウザ上のtextarea欄の「改行」は、sideファイルでは「\n」。

selenium-side-runnerの立場から見ると、sideファイルは、バックスラッシュ「\」 が1つの、

"value": "aaa\nbbb\nccc"Code language: plaintext (plaintext)

と、なっていると期待どおりに動きそうです。

フォームテストのtextarea欄のassert valueは失敗しないの?

"aaa\nbbb\nccc"と入力して、"aaa\nbbb\nccc"と同じかどうかチェックしているから、合格したのね。

オレオレ証明書みたいだね

sedで置換して対応

やっつけですが、sedコマンドで「\\n」を「\n」に置換することにしました。

元のsideファイル自体を置換してしまうと、Selenium IDEで読み込みと実行に影響があるので、元のsideファイル自体はそのままにします。

元のsideファイルは、Selenium IDE用。例:myproject.side
置換した新しいsideファイルは、selenium-side-runner用です。例:myproject.side.tmp

置換した新しいsideファイルをselenium-side-runnerで実行します。

#!/bin/bash -ue

testsuite_side="myproject.side"
testsuite_side_tmp="$testsuite_side.tmp"

sed 's/\\\\n/\\n/g'  <"$testsuite_side"  >"$testsuite_side_tmp"

selenium-side-runner \
  -c "browserName=chrome goog:chromeOptions.args=[--headless,--nogpu]" \
  --output-directory=./results \
  --output-format=junit \
  "$testsuite_side_tmp"Code language: Bash (bash)

タイトルとURLをコピーしました