変数が代入できません。

960 views
Skip to first unread message

! Bingo

unread,
Aug 24, 2022, 6:29:18 AM8/24/22
to 日本Seleniumユーザーコミュニティ
store text  xpath=<パス>  <Selenium変数>
でテキストを読み込んで
echo  <Selenium変数> 
で表示させると表示するのですが
Java Scriptでテキスト操作するために
execute script  <Javascript変数>=${<Selenium変数>};
のように代入しようとすると
「 Failed:18:53:07
JSON.parse: bad control character in string literal at line 1 column 10 of the JSON data」
のエラーが発生します。
改行等がテキストに入ってるかと思い
store text 時に normalize-space()を使用しても変わりません。
どうしたら代入できるかわかりますか?

! Bingo

unread,
Aug 24, 2022, 9:35:56 PM8/24/22
to 日本Seleniumユーザーコミュニティ
本件Selenium IDEに関する質問です。

2022年8月24日水曜日 19:29:18 UTC+9 ! Bingo:

戸田広

unread,
Aug 25, 2022, 10:22:14 AM8/25/22
to ! Bingo, 日本Seleniumユーザーコミュニティ
> execute script  <Javascript変数>=${<Selenium変数>};

このように execute script でSelenium IDEの変数を呼び出し、JavaScriptの変数に代入すること自体は可能です。
変数名に問題はないでしょうか。
または、JavaScriptコード中に改行コードやTABなどの制御コードが入っていないでしょうか。



2022年8月25日(木) 10:35 ! Bingo <ye.b...@gmail.com>:
--
このメールは Google グループのグループ「日本Seleniumユーザーコミュニティ」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには seleniumjp+...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/seleniumjp/29c5858c-56a0-4d73-b0de-0eb6b142ef58n%40googlegroups.com にアクセスしてください。

! Bingo

unread,
Aug 25, 2022, 6:49:27 PM8/25/22
to 日本Seleniumユーザーコミュニティ
ありがとうございます。

> 変数名に問題はないでしょうか。

変数名は問題ないと思います。

> JavaScriptコード中に改行コードやTABなどの制御コードが入っていないでしょうか。

エラーメッセージからこの可能性が高いのでnormalize-space()を使用しました。
ただ、具体的に”bad control characte”が何かわからず、
echoでは”bad control characte”が表示されず、
雲をつかむような感じです。
代入前に
・生の制御コードを含む文字列を確認する方法
・制御コードを除去する方法
はご存じないでしょうか?

2022年8月25日木曜日 23:22:14 UTC+9 hiros...@ossaaaan.com:

戸田広

unread,
Aug 26, 2022, 1:34:28 AM8/26/22
to ! Bingo, 日本Seleniumユーザーコミュニティ
normalize-space() がXPath式内の関数のことであれば、
store text で取得した後の値に使うことはできないのではないでしょうか。
どのような記述をされているかはわかりませんが、
いずれにしても normalize-space() はご意図のとおりには動作していないとみられます。

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



2022年8月26日(金) 7:49 ! Bingo <ye.b...@gmail.com>:
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/seleniumjp/281b1e54-ebf5-467c-808e-a27f20c10492n%40googlegroups.com にアクセスしてください。

! Bingo

unread,
Aug 26, 2022, 4:34:50 AM8/26/22
to 日本Seleniumユーザーコミュニティ

normalize-space()は

store text        xpath=/html/<省略>/td[position()=4 and normalize-space(text())]    hoge
echo   ${hoge}

こんな感じで使ったのですが間違ってるんですかね?

試して頂いて、リンクもありがとうございます(英語であまり理解できませんでしたが・・・)

2022年8月26日金曜日 14:34:28 UTC+9 hiros...@ossaaaan.com:

! Bingo

unread,
Aug 26, 2022, 4:57:27 AM8/26/22
to 日本Seleniumユーザーコミュニティ
ターゲットの記述は

<td class="b2" nowrap align="right"> == $0
        "30,000円"
    <br>
       "30口"
    <br>
       "(30口)"
</td>

こんな感じです。
この数値のテキストをJavaScripで取り出して判断したいのです。

Selenium IDEのコマンドは以下のように記述し、

①store text        xpath=/html/<省略>/td[position()=4 and normalize-space(text())]    hoge
②echo   ${hoge}
③execute script   fuga = ${hoge}; <その他色々な文字列操作> return fuga        piyo

②の結果は

echo:  30,000円   30口 (30口)

となるのですが、
③で

executeScript on  fuga = ${hoge}; <その他色々な文字列操作>  return  fuga   with value  piyo  Failed:17:28:25
Bad control character in string literal in JSON at position 9

というエラーが発生してしまうんです。

2022年8月26日金曜日 17:34:50 UTC+9 ! Bingo:

! Bingo

unread,
Sep 8, 2022, 6:16:54 AM9/8/22
to 日本Seleniumユーザーコミュニティ
その後も色々やってみました。

①のhogeは hoge[i]とすると文字列のi番目の文字が取得できるようなのでこれが応用できそうです。 
例)
コマンドを
echo   ${hoge[0]}
echo   ${hoge[1]}
echo   ${hoge[2]} 
   …
とすると
echo:  3
echo:  0
echo:  ,
   …
と出力されます。
ただ、
echo   ${hoge[${i}]}
のような表現は使えないらしく
i番目の文字を指定するにはどうしたらいいですかね?

2022年8月26日金曜日 17:57:27 UTC+9 ! Bingo:

! Bingo

unread,
Sep 14, 2022, 7:23:50 AM9/14/22
to 日本Seleniumユーザーコミュニティ
${hoge[${i}]}はあきらめ
必要な数値の位置は限定されるのでbad control characterに触れないよう  hoge[i] で 1文字づつ取り出す事で解決しました。
ありがとうございました
2022年9月8日木曜日 19:16:54 UTC+9 ! Bingo:
Reply all
Reply to author
Forward
0 new messages