ポップアップへの切り替えは、少なくとも 2 つの別々の理由で困難です。
- 多くの人が知っているのは
driver.switch_to.window(window_handle)
、ポップアップが表示されたときにポップアップウィンドウで要素を見つけることができるようにすることと、ポップアップが閉じられた後にメインウィンドウで要素を見つけることができるようにすることの両方を使用する必要があるということです。
- 遅いマシンを持っている人だけが遭遇する可能性が高いのは、Selenium がウィンドウ ハンドルを変数として使用できるようにするときに、最初は None に設定され、値が入力されるまでに少し時間がかかることです。
要求されたシーケンスを実行しながら、これらの問題に対処するコードを次に示します。ステートメントを省略し、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()
より明確にするために、誰か (おそらく私) が例にさらに追加する必要がある場合、または他の情報を提供する必要がある場合はお知らせください。