我正在开发一个 Web 应用程序,其中单击某个链接会出现另一个弹出窗口。弹出窗口不是警报,而是一个包含各种字段的表单,用户可以输入并单击“下一步”。
如何使用 selenium 处理/自动化这个弹出窗口。
概括 :-
- 点击超链接(网址)-“点击这里”
- 用户注册表单显示为弹出窗口
- 数据由用户填写
- 单击下一步/提交按钮。
- 另一个下一个重定向到另一个页面/表单“用户个人信息页面”
- 个人信息由用户填写
- 点击“下一步/提交”
- 弹出窗口消失了。
- 现在在原始/基本页面上进一步处理。
切换到弹出窗口具有挑战性,至少有两个不同的原因:
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)
or driver.switch_to_window(window_name)
。这应该允许您与elements
弹出窗口中的交互。完成后,您应该driver.switch_to_default_content()
返回主网页。