窗口句柄未在Python Selenium上更新

时间:2019-06-17 21:54:41

标签: python selenium selenium-webdriver selenium-chromedriver

我正在模拟与Selenium的用户交互,例如,我基本上在导航模式上单击了3次。

在每个窗口上,我都在映射其window_handle,并且我意识到current_window_handle总是返回相同的标识符,而window_handles总是具有相同的大小,而不是具有窗口对象列表。

因此,我无法从window_3切换到window_1,因为current_window_handle始终是相同的...

这里是一个示例,以演示该问题(单击链接的代码已删除,目的是将问题集中在遇到问题的代码上)

# click on a link, wait and get window handle
window_1 = browser.current_window_handle
print(window_1)
print(browser.window_handles)
print(browser.session_id)
browser.implicitly_wait(3)


# click on a link, wait and get window handle
window_2 = browser.current_window_handle
print(window_2)
print(browser.window_handles)
print(browser.session_id)
browser.implicitly_wait(3)

# click on a link, wait and get window handle
window_3 = browser.current_window_handle
print(window_3)
print(browser.window_handles)
print(browser.session_id)

结果:

CDwindow-18D629A1BFC3391C5AE352F02768EFA3
['CDwindow-18D629A1BFC3391C5AE352F02768EFA3']
c50563aa58c1565d8c82ead6653e65a4

CDwindow-18D629A1BFC3391C5AE352F02768EFA3
['CDwindow-18D629A1BFC3391C5AE352F02768EFA3']
c50563aa58c1565d8c82ead6653e65a4

CDwindow-18D629A1BFC3391C5AE352F02768EFA3
['CDwindow-18D629A1BFC3391C5AE352F02768EFA3']
c50563aa58c1565d8c82ead6653e65a4

根据Selenium API文档:

  

– current_window_handle

     

用法:driver.current_window_handle

     

– window_handles

     

返回当前会话中所有窗口的句柄。

     

用法:driver.window_handles

如您所见,会话ID始终相同。

在这种情况下可能出什么问题了?

1 个答案:

答案 0 :(得分:0)

如果您查看print(browser.window_handles)的输出,则只有一个列表项始终是相同的。

  

['CDwindow-18D629A1BFC3391C5AE352F02768EFA3']

这表示链接正在同一窗口中加载/刷新数据。因此,您不必切换到其他任何标签。

只要您看到新窗口/选项卡已打开,然后就可以始终切换到新窗口,然后在新窗口上执行操作。

切换到最新窗口:

driver.switch_to.window(driver.window_handles[-1])