【こんなライブラリが欲しい】IE上のアクティブな要素を取得したい
お世話になっております。
踊ってみた同好会(仮)でも少し触れさせていただきましたが、こちらでもコラムとして投稿させていただきます。
IE上の操作で、ClassやIDを指定して要素を検索したりクリックしたりテキストを取得したり、という動作はありますが、
「現在アクティブになっている(フォーカスされている)要素について情報を取得できないだろうか」と調べてみたところ、
「document.activeElement」というのがありました。
document.activeElement
https://developer.mozilla.org/ja/docs/Web/API/Document/activeElement
Document.activeElement - フォーカス中の要素 | DOMリファレンス
https://lab.syncer.jp/Web/API_Interface/Reference/IDL/Document/activeElement/
現在(21/4/26時点)では、プチライブラリ、スイートライブラリ、シナリオ共有サークルともに該当するライブラリがないようなので、既存のライブラリを編集して動作を確認してみました。
WinActor v6.3.0/InternetExplore11で動作確認をおこなっています。
ベースとなるライブラリは、「IE操作(指定CLASS内のテキストを取得)」を用いました。
<変更点①>
cname = !対象クラス名!
cindex = !インデックス(0~)!
▼
'cname = !対象クラス名! ' コメントアウト
'cindex = !インデックス(0~)! ' コメントアウト
<変更点②>
Set element = document.document.getElementsByClassName(cname)
▼
'Set element = document.document.getElementsByClassName(cname) 'コメントアウト
Set element = document.document.activeElement
<変更点③>
hitText = element(cindex).innerText
▼
'hitText = element(cindex).innerText 'コメントアウト
hitText = element.innerText
------------------------------------------------------
<動作検証①>
検証に使用したサイト:
同ページの「トップ」のリンクにフォーカスがある状態で、エミュレーションで「tab」キーを押下し、フォーカスのある要素の「innerText」の値をそれぞれ取得する。
(ループ回数:10回)
<実行結果①>(左の数字部分はカウンタ、コロン以下がフォーカス要素のinnerText)
1:トップ
2:会議等一覧
3:根拠・構成員
4:新型コロナウイルス感染症に関する緊急対応策(概要)(令和2年2月13日 新型コロナウイルス感染症対策本部)
5:新型コロナウイルス感染症に関する緊急対応策(本文)(令和2年2月13日 新型コロナウイルス感染症対策本部)
6:新型コロナウイルス感染症対策専門家会議の開催について(令和2年2月14日 新型コロナウイルス感染症対策本部決定)
7:新型コロナウイルス感染症対策の基本方針(令和2年2月25日 新型コロナウイルス感染症対策本部決定)
8:新型コロナウイルス感染症対策の基本的対処方針(令和2年4月7日改正)
9:新型コロナウイルス感染症に関する緊急対応策-第2弾-(概要)(令和2年3月10日 新型コロナウイルス感染症対策本部)
10:新型コロナウイルス感染症に関する緊急対応策-第2弾-(本文)(令和2年3月10日 新型コロナウイルス感染症対策本部)
<動作検証②>
「変更点③」の「hitText = element.innerText」を「hitText = element.getAttribute("href")」に変更し、「トップ」にフォーカスがある状態でもう一度シナリオを実行する。
(ループ回数:10回)
<実行結果②>
1:http://www.kantei.go.jp/
2:https://www.cas.go.jp/jp/seisaku/index.html
3:th_siryou/konkyo.pdf
4:th_siryou/kinkyutaiou_gaiyou_corona.pdf
5:th_siryou/kinkyutaiou_corona.pdf
6:th_siryou/senmonka_konkyo.pdf
7:th_siryou/kihonhousin.pdf
8:th_siryou/kihon_h(4.7).pdf
9:th_siryou/kinkyutaiou2_gaiyou_corona.pdf
10:th_siryou/kinkyutaiou2_corona.pdf
<動作検証③>
「変更点③」を「hitText = element.innerText」に戻したうえで、今度は取得した文字列に対して部分一致比較をおこない、「新型コロナウイルス感染症に関する緊急対応策(本文)」を含む場合にクリック処理をおこなう。
なお、クリック後はループ回数に関わらずシナリオを終了する。
(ループ回数:10回)
<実行結果③>
フォーカス要素が「新型コロナウイルス感染症に関する緊急対応策(本文)(令和2年2月13日 新型コロナウイルス感染症対策本部)(PDF/382KB)PDF」になった時点でクリック処理をおこない、シナリオが終了した。
<動作検証④>
検証に使用したサイト:
「変更点③」の「hitText = element.innerText」を「hitText = element.tagName」に変更し、どこにフォーカスがあるか分からない状態でシナリオを開始し、取得した値(TagName)が「INPUT」であった場合に「WinActorから入力」という文字列を入力してシナリオを終了する。
(ループ回数:20回)
<実行結果④>
INPUTタグに至るまでtabキー押下が繰り返された後、「WinActorから入力」という値が入力された。
------------------------------------------------------
他にも、
hitText = element.innerHTML
でフォーカスされている要素のHTML要素を取得できたり、
hitText = element.getAttribute("class")
や
hitText = element.getAttribute("id")
で、要素のClass名やid名を取得することもできました。(※設定されている場合のみ)
Class名やID名が分からない/変わってしまっても、エミュレーション(tabキー押下)との組み合わせで目的の要素に至る可能性があるので、
この「現在フォーカスされている要素の情報取得」や「値設定」をライブラリ化してくれるとありがたいなと思います。