在Python中处理多个窗口

我正在从事selenium自动化项目 。 在这里,我使用python语言来进行selenium自动化而不是Java。

我面临一个问题,处理多个窗口

情景是当我单击主页中的链接打开一个新的窗口。在新打开的窗口中,我不能执行任何操作,因为控件仍然在主页的Web驱动程序。

任何人都可以在这里粘贴一些代码来将控件从背景窗口集中到新打开的窗口。

一个可能的解决scheme是在库中有self.driver.switchtowindow() 。但它需要一个窗口名称。如何find窗口名称? 如果这是错误的,任何人都可以提供一些代码来执行此操作?

window_handles应该给你所有打开的窗口的引用。

这是文件有关切换窗口的说法。

你可以通过使用window_handlesswitch_to_window方法来完成。

在点击链接之前,首先将窗口句柄存储为

 window_before = driver.window_handles[0] 

点击链接后存储新打开的窗口的窗口句柄为

 window_after = driver.window_handles[1] 

然后执行切换到窗口方法移动到新打开的窗口

 driver.switch_to_window(window_after) 

同样可以在新窗口之间切换。 以下是代码示例

 import unittest from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By class GoogleOrgSearch(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox() def test_google_search_page(self): driver = self.driver driver.get("http://www.cdot.in") window_before = driver.window_handles[0] print window_before driver.find_element_by_xpath("//a[@href='http://www.cdot.in/home.htm']").click() window_after = driver.window_handles[1] driver.switch_to_window(window_after) print window_after driver.find_element_by_link_text("ATM").click() driver.switch_to_window(window_before) def tearDown(self): self.driver.close() if __name__ == "__main__": unittest.main() 

除了已经给出的答案之外,为了打开一个新的标签,可以使用javascript命令window.open()

例如:

 # Opens a new tab self.driver.execute_script("window.open()") # Switch to the newly opened tab self.driver.switch_to.window(self.driver.window_handles[1]) # Navigate to new URL in new tab self.driver.get("https://google.com") # Run other commands in the new tab here 

然后,您可以按如下方式closures原始选项卡

 # Switch to original tab self.driver.switch_to.window(self.driver.window_handles[0]) # Close original tab self.driver.close() # Switch back to newly opened tab, which is now in position 0 self.driver.switch_to.window(self.driver.window_handles[0]) 

或closures新打开的选项卡

 # Close current tab self.driver.close() # Switch back to original tab self.driver.switch_to.window(self.driver.window_handles[0]) 

希望这可以帮助。

我们可以通过使用“ switchTo ”方法在命名窗口之间移动来处理不同的窗口:

 driver.switch_to.window("windowName") <a href="somewhere.html" target="windowName">Click here to open a new window</a> 

或者,您可以将“窗口句柄”传递给“ switchTo()。window() ”方法。 知道这一点,可以遍历每个打开的窗口,如下所示:

 for handle in driver.window_handles: driver.switch_to.window(handle)