オンなのにチェック状態取得がFalseになる
(2023/01/27追記)
ブツはこちらと同じです。
ラジオボタンオンの行のn列目のtextを取得したい
https://winactor.com/?p=65857
最下部にサンプル.htmlを再掲しました。
「チェック状態取得」が見えてる状態と異なる結果になることがあります。
原因は掴みつつあります。★
どんな対策が考えられますか。
classがaaaの1つめのdiv内、3列×2行の表
┌─┬───┐
│ │ │
│○│ │
│ │ │
├─┤あ┌─┤
│ │ │ │
│●│ │い│
│ │ │ │
└─┴─┴─┘
画像を用意できませんでした。
等幅フォントのメモ帳等に貼り付けていただくと、表になります。
(最下部にサンプル.htmlを再掲しました。過去スレからの転載です。)
チェック状態取得
- 1行目の1列目のinput
(((//div[@class="aaa"])[1]//tr)[td][1 - 1 mod 2])//input
→ Falseになる◎
- 2行目の1列目のinput
(((//div[@class="aaa"])[1]//tr)[td][2 - 2 mod 2])//input
→ Falseになる▲
値の取得
(((//div[@class="aaa"])[1]//tr)[td][1 - 1 mod 2])//td[2]/label
→「あ」が取得できる◎
(((//div[@class="aaa"])[1]//tr)[td][2 - 2 mod 2])//td[3]/label
→「い」が取得できる◎
投稿のきっかけの事象
- 全10行中5行目がオンの状態なのに、「あ」相当の値がNullになった
- それでも「い」相当は取得できた
- 100件中1件でこの事象が見つかった
値の取得
(((//div[@class="aaa"])[1]//tr)[td][5 - 5 mod 2])//td[2]/label
→ 5行目の「あ」相当が取得できる
チェック状態取得
(((//div[@class="aaa"])[1]//tr)[td][5 - 5 mod 2])//input
→ Falseになる▲
ここでコケると行5の特定に至らない
実際はこれを使ってます。
https://winactor.com/questions/?q=ラジオボタンオンの行のn列目のtextを取得したい
(2023/01/27、直リンク追加)
ラジオボタンオンの行のn列目のtextを取得したい
https://winactor.com/?p=65857
https://winactor.com/questions/question/chromeのシナリオでtd内にあるラジオボタンオンの値を/
考察
- ▲はレアケース
- 同じ案件では同じ結果になる
- シナリオは指示通りの処理をしてくれてる模様
- 指示をレアケースに対応させたい
がちゃがちゃいじってる間に見つけた真相っぽいことがら★
- 通常でもレアケースでも、DevToolsのElementsでXPathは一意にヒットする
- Consoleから$x('XPath')で中身を覗いたら、レアケースは通常と異なる状況
- もしや「属性値の取得」「プロパティ値の取得」あたりの出番か?
通常
- inputの応答がある
- 中身のゼロを開いたら、checked、id、name、tagName、type等、見たことのあるプロパティが並んでいる
- 「チェック状態取得」はどの値を取得してるんだろう
レアケース
- inputの応答じゃない
- 中身を開いたら、length: 0と、Prototypeの配列が格納されてる模様
- 初めて眺める光景なので、どこをどうを眺めれば良いのかよく分からず
思い
- 人の目には同じラジオボタンに見える
- WinActorからも同じように扱えると助かる
- ブツの構造が異なるようなので、「チェック状態取得」は非対応っぽい
- 症状と再現できる案件IDの提供を実行部門に求めても話が噛み合わないわけだ
- この手のレアケースな落とし穴がほかにもあるのかもしれない
- そわそわし出した
- とにかく対策を見出したい
改めての質問
一意にヒットするXPathで「チェック状態取得」に非対応っぽいラジオボタンです。
オンの行を特定して2列目の値を取得したいです。
どんな方法が考えられますか。
ブラウザ関連ライブラリ寄りのなるべくデジタルな方法だと嬉しいです。
暫定対応
- 「画像マッチング」で我慢してた期間もあった
- 一旦は「画像マッチング」に戻してしのぐ
(2023/01/27追記)
過去スレのサンプル.htmlを転載します。
ラジオボタンオンの行のn列目のtextを取得したい
https://winactor.com/?p=65857
通常もレアケースも、HTMLの構成は同じです。
コメントで触れたAngularJSあたりのマジックが、見えないところで覆いかぶさってるのかも。
サンプル.html
<!-- ※ メモ帳に貼り付けて「サンプル.html」として保存、テストしたシナリオ.ums7で開きます。-->
<html>
<head>
<title>サンプル</title>
</head>
<body>
<table border="1">
<tr class="x">
<td class="x"><input type="radio" id="1_1" name="a"></td>
<td rowspan="4" class="x">1B</td>
<td class="x">1C1</td>
<td class="x">1D1</td>
</tr>
<tr class="x">
<td class="x"><input type="radio" id="1_2" name="a"></td>
<td class="x">1C2</td>
<td class="x">1D2</td>
</tr>
<tr class="x">
<td class="x"><input type="radio" id="1_3" name="a"></td>
<td class="x">1C3</td>
<td class="x">1D3</td>
</tr>
<tr class="x">
<td class="x"><input type="radio" id="1_4" name="a"></td>
<td class="x">1C4</td>
<td class="x">1D4</td>
</tr>
</table>
<table border="1">
<tr class="x">
<td class="x"><input type="radio" id="2_1" name="a"></td>
<td rowspan="3" class="x">2B</td>
<td class="x">2C1</td>
<td class="x">2D1</td>
</tr>
<tr class="x">
<td class="x"><input type="radio" id="2_2" name="a"></td>
<td class="x">2C2</td>
<td class="x">2D2</td>
</tr>
<tr class="x">
<td class="x"><input type="radio" id="2_3" name="a"></td>
<td class="x">2C3</td>
<td class="x">2D3</td>
</tr>
</table>
</body>
</html>
<!-- 実際のidは連番ではない -->