2012-05-17 77 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,更新了答案 –