selenium アラート(ダイアログ)を何かしたい。エラー対応関連
テキストを取得したり、ボタンを押したり・・・そんなコトをしたいけどエラーが出てきた
作成日:2019-12-24, 更新日:2019-12-24
基本
alertしか試していない。
confirmやprompt(?)は、まだ触っていないのでメモのみ。
アラートを取得
$driver = 〇〇〇〇; $alert = $driver->switchTo()->alert();
取得したアラートをゴニョゴニョする
テキスト取得
echo $alert->getText();
「OK」ボタンを押す
echo $alert->accept();
「キャンセル」ボタンを押す(confirm等)
echo $alert->dismiss();
値をセット(prompt)
echo $alert->sendKeys(〇〇〇);
エラー対応
表示待ち
▼試した内容
$driver = 〇〇〇〇; $alert = $driver->switchTo()->alert(); echo $alert->getText();
▼結果(エラー)
no such alert
アラートが表示される前に「getText()」を実行しているっぽい。
「alertIsPresent()」っていう表示されるまで待つっていうメソッドがいるのでそれを使う。
alertIsPresent()の使い方
わからん。
私の場合は、alertIsPresent()を探して・・・中身をコピって自前で用意した。
▼「getText()」で例外が発生するのでそれを拾う感じ。
try { $alert = $this->driver->switchTo()->alert(); $alert->getText(); } catch (NoAlertOpenException $e) { echo $e->getMessage(); } catch (Exception $e) { echo $e->getMessage(); }
アラート表示時の処理
アラートのボタンを押す前にキャプチャを撮ろうとしたら下記エラー
unexpected alert open
これは、「(アラートが表示されているから)他のコトをしちゃダメ」ってエラーっぽい。
最初にアラート表示するページ
滅多にないとは思うが・・・万が一、ページを表示したタイミングでアラート表示させるようなページをテストしたいとき・・・
まず、アラートを取得してOKボタンを押すっていう制御を先にする必要アリ。