salesforce(chrome)でフレーム選択及び値の設定ができない
いつもお世話になっております。
先日は別の質問にコメントをたくさんいただきありがとうございました。
Chromeでクリックをしたい [解決済] | ユーザーフォーラム (winactor.com)
タイトルの通り、salesforceでフレーム選択とフレームがないエリアでの値の設定ができません。
したい動作は
①下記画像の水色の検索欄に変数を入力し検索(※10/12解決しました)
②下記薄緑色の部分に検索結果が1件のみ出てくるのでそれをクリック
となります(実際はこれを変数の数だけ繰り返す予定です)
①検索欄について
ここはフレーム配下ではないのでは?と思います。
理由としては<iframeで検索すると4つひっかかるのですが、
・ほぼ先頭にある20行くらいのコード(iframe1?親フレーム?)
★検索欄
・iframe2
・iframe3
・iframe4
という順番だからです。
iframe1?は検索でひっかかるわりにHTML階層情報を見てもiframeがなかったので親フレームというやつなのかと思っています。
それで普通にXPathを取得すると//*[@id="113:0;p"]というパスが取得できます。
ただしこれを「値の設定」のXPath欄に入れてもエラーが出てきて止まります。
どんなエラーが出るのかというと
値の設定の前にフレーム選択(選択モードparent)を入れると
「スクリプトの実行に失敗しました。エラー番号: 0x00000001
内容: ライブラリ実行(spv_Web)に失敗しました。
ブラウザ操作に失敗しました。(OpenQA.Selenium.InvalidElementStateException:invalid element state」
(Session info: chrome=117.0.5938.150))
フレーム選択なしだと
「スクリプトの実行に失敗しました。
エラー番号: 0x00000001
内容: ライブラリ実行(spv_Web)に失敗しました。
指定された要素が見つかりませんでした。: XPath =(略)」
と出てきます。
ちょっとわからないのは最初の一回だけは普通に値の設定ができたことです。
二度目を行おうとしたときから上記のエラーが出てきて進みません。
②検索結果のフレーム選択について
フレームはこんな感じになっています
・ほぼ先頭にある20行くらいのコード(iframe1?親フレーム?)
・iframe2
・iframe3
・iframe4
★検索結果
なのでiframe4の配下なのかなと思いました。
iframe4のXPathは以下です
//*[@id="brandBand_2"]/div/div/div[2]/div/div/one-record-home-flexipage2/forcegenerated-adg-rollup_component___force-generated__flexipage_-record-page___-contact-page1___-contact___-v-i-e-w/forcegenerated-flexipage_contactpage1_contact__view_js/record_flexipage-desktop-record-page-decorator/div[1]/records-record-layout-event-broker/slot/slot/flexipage-record-home-template-desktop2/div/div[2]/div[2]/slot/flexipage-component2/slot/flexipage-aura-wrapper/div/article/div[2]/div/force-aloha-page/div/iframe
そしてこれも最初の一回は正常に動作したのに次から
スクリプトの実行に失敗しました。
エラー番号: 0x00000001
内容: ライブラリ実行(spv_Web)に失敗しました。
指定された要素が見つかりませんでした。: XPath =(略)
と出てきます
WinActorのマニュアルを読んでから行ったため、XPath取得の操作自体は間違っていないと思います。
salesforce lightningの「取引先」編集でのポップアップ画面でのxpath取得について | ユーザーフォーラム (winactor.com)
また↑のページのように開くたびにパスが変わっているということは起こっていませんでした。
前回お話があったShadowDOMに関しては全く分からないため勉強中でして検証できていません。
前回はクリックせずに「ページを表示」で突破するという手段で目的自体はクリアできましたがこれには使えなさそうです。
お力をお貸しください……。
10/12追記------------------------------------------------------------------------------------------------
①について進展がありましたので追記します。
原因としては「Xpathが違った」と「フレームにタイムアウトを設定する」でした。
・クリックについて
XPathを「//*[@id="oneHeader"]/div[2]/div[2]/div/button」にしたら検索欄のクリックができるようになりました。
検索欄の端っこのほうを示さないと出てこないXPathでした……。
また値の設定に関しては「検索欄をクリックする前(上で書いている//*[@id="113:0;p"])」と「(手動で)検索欄をクリックした後(//*[@id="input-131"]」で変化していました。
なので「検索欄をクリックした後」のXPathを指定すると値の設定がきちんと働いて入力されました。
そのあとエミュレーションでEnterキーを押すことで検索自体はできました。
フレームに関しては選択モードparentにしてタイムアウトの時間を設定したらエラーが出なくなりました。
……ですが「検索欄をクリックしたあとのXPath」がコロコロ変わるようになってしまいました。
変わるのは「//*[@id="input-131"]」の131の部分です。89になったり67になったりします。
可能性としてはログイン時に毎回通知を受け取るか否かを選択する小さいダイアログボックスが一つ、別の通知が一つ出てくるのですが、
これらを放置したまま進めると「クリック後の検索欄」のXPathの数値が変わっているように気がします。
(検索欄のクリック自体はダイアログボックス等を放置したままでも大丈夫でした)
②について進展ありましたので追記します。
・ログイン後、ウィンドウを最大化する
・フレーム選択(親フレーム)
・検索結果をクリック
という、最初に画面を最大化してクリック前に親フレームを選択する形にしてみたらなぜかうまくいくようになりました。
親フレームなしだったりウィンドウを最大化しないと失敗します。
一応複数回成功しているのでshadowDOMは関係なく、フレーム選択とXPathの問題だと思います。
クリックしたい箇所が<iframeの下にあっても子フレームを選択しなければならないというわけではないんですかね?
参考元
フレーム選択が理解できない [解決済] | ユーザーフォーラム (winactor.com)
WinActorで困った話 その2(Chrome編) - Qiita
-------------------------------------------------------------------------------------------------------------
>anothersolution様
前回の質問へのリンクを追記しました。
・ループ毎に「ページ表示」で同じURLを開く
ループする際に使用する語句(人名)が毎回変化するのでそちらで対応するのは難しそうです。