我正在开发一个Web应用程序,其中单击某个链接会出现另一个弹出窗口。弹出窗口不是警报,而是一个表单,其中包含用户输入的各种字段,然后单击“下一步”。
如何使用selenium处理/自动化此弹出窗口。
摘要: -
答案 0 :(得分:39)
切换到弹出窗口至少有两个不同的原因:
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()
如果有人(也许是我)需要在示例中添加更多信息或提供其他信息,请告知我们,以便更清楚。
答案 1 :(得分:6)
如果是新的window
或iframe
,您应该使用driver.switch_to_frame(webelement)
或driver.switch_to_window(window_name)
。这应该允许您与弹出窗口中的elements
进行交互。
完成后,您应该driver.switch_to_default_content()
返回主网页。