2012-05-17 80 views
22

我正在硒自动化项目中工作。在这里,我使用python语言来进行硒自动化而不是Java。在Python中处理多个窗口

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

情况是,当我点击主页的链接opens.In新打开的窗口的新窗口,因为控制仍是在家里,我不能执行任何操作页面web驱动程序。

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

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

回答

15

window_handles应该给你所有打开的窗口的参考。

this是文件不得不说关于切换窗口。

11

您可以使用window_handlesswitch_to_window方法。

之前点击该链接的窗口句柄作为

window_before = driver.window_handles[0] 

第一存储点击链接店新打开的窗口的窗口句柄作为

window_after = driver.window_handles[1] 

后,然后执行切换到窗口methow移动到新开的窗口

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() 
+0

按照你的代码,当执行'window_after = browser.window_handles [1]'时,我收到一个'IndexError:列表索引超出范围'。哪里不对?请参阅:https://stackoverflow.com/questions/45354850/focus-on-second-page-form-with-selenium – LucSpan

2

我们可以通过使用“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) 
5

在已经给出的答案顶部,打开一个新标签的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 

然后,您就可以关闭原始标签如下

# 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]) 

或者关闭新打开的选项卡

# Close current tab 
self.driver.close() 

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

希望这有助于。

+1

switch_to_window已弃用。使用switch_to.window –

+0

谢谢@StephanSchielke,更新了答案 –