切换到弹出的是具有挑战性的至少两个单独的原因:
- 在一个很多人都知道,这是你需要使用
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()
请让我知道,如果有人(或许我)需要添加更多的例子,或提供其他信息,以使其更清晰。
如果它不是一个警报,有几种不同的方式,它可能是一个弹出窗口。你可以包括网页应用程序的屏幕截图,以及相关的html位? –
这可能是根本原因吗?绕过调用fxdriver.modals.clearFlag_ ... cf. https://stackoverflow.com/questions/44568402/how-do-i-manually-mouse-dismiss-a-javascript-alert-and-get-back-the-the-body-o/44592827#44592827 – NevilleDNZ