リンクをクリックすると別のポップアップウィンドウが表示されるWebアプリケーションで作業しています。ポップウィンドウはアラートではなく、ユーザーが入力するさまざまなフィールドを持つフォームであり、[次へ]をクリックします。
Seleniumを使用して、このポップアップウィンドウをどのように処理/自動化できますか。
要約:-
ポップアップへの切り替えは、少なくとも次の2つの理由から困難です。
driver.switch_to.window(window_handle)
を使用する必要があるメインウィンドウに戻る要素。要求されたシーケンスを実行しながら、これらの問題に対処するコードを次に示します。私はimport
ステートメントを省いており、明らかだと思っている変数名を使用しています。また、コードでfind_element(s)_by_xpath
を使用したいことに注意してください。他のfind_element(s)_by
メソッドを自由に使用してください:
main_window_handle = None
while not main_window_handle:
main_window_handle = driver.current_window_handle
driver.find_element_by_xpath(u'//a[text()="click here"]').click()
signin_window_handle = None
while not signin_window_handle:
for handle in driver.window_handles:
if handle != main_window_handle:
signin_window_handle = handle
break
driver.switch_to.window(signin_window_handle)
driver.find_element_by_xpath(u'//input[@id="id_1"]').send_keys(user_text_1)
driver.find_element_by_xpath(u'//input[@value="OK"]').click()
driver.find_element_by_xpath(u'//input[@id="id_2"]').send_keys(user_text_2)
driver.find_element_by_xpath(u'//input[@value="OK"]').click()
driver.switch_to.window(main_window_handle) #or driver.switch_to_default_content()
誰か(おそらく私)が例をさらに追加する必要があるかどうか、またはより明確にするために他の情報を提供する必要があるかどうかを教えてください。
新しいwindow
またはiframe
の場合は、driver.switch_to_frame(webelement)
またはdriver.switch_to_window(window_name)
を使用する必要があります。これにより、ポップアップ内でelements
と対話できるようになります。完了したら、driver.switch_to_default_content()
してメインWebページに戻る必要があります。