2012-05-17 45 views
22

Tôi đang làm việc trong dự án tự động hóa selen. Ở đây tôi đang sử dụng ngôn ngữ python cho tự động hóa selen thay vì Java.Xử lý nhiều cửa sổ bằng Python

Tôi đang phải đối mặt với một vấn đề, xử lý nhiều cửa sổ

Kịch bản được khi tôi nhấp vào một liên kết trong trang chủ một cửa sổ mới opens.In cửa sổ mới được mở ra tôi không thể thực hiện bất cứ hành động vì sự kiểm soát vẫn còn trong nhà trình điều khiển trang web.

Ai cũng có thể dán một số mã vào đây để đặt tiêu điểm điều khiển từ cửa sổ nền sang cửa sổ mới mở.

Một giải pháp có thể là self.driver.switchtowindow() có trong thư viện.Nhưng nó yêu cầu tên cửa sổ. Làm cách nào để tìm tên cửa sổ? Nếu điều này là sai, ai cũng có thể đưa ra một số mã để thực hiện hành động này?

Trả lời

15

window_handles sẽ cung cấp cho bạn các tham chiếu đến tất cả các cửa sổ đang mở.

this là những gì docu phải nói về việc chuyển đổi cửa sổ.

11

Bạn có thể làm điều đó bằng cách sử dụng phương thức window_handlesswitch_to_window.

Trước khi nhấn vào liên kết đầu tiên lưu trữ các cửa sổ xử lý như

window_before = driver.window_handles[0] 

sau khi nhấp vào các cửa hàng liên kết tay cầm cửa sổ của cửa sổ mới mở như

window_after = driver.window_handles[1] 

sau đó thực hiện việc chuyển sang cửa sổ methow để di chuyển đến cửa sổ mới mở

driver.switch_to_window(window_after) 

và tương tự bạn có thể chuyển đổi đặt cược cửa sổ cũ và mới. Sau đây là ví dụ mã

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

Theo sau mã của bạn, tôi nhận được chỉ mục danh sách 'IndexError: ngoài phạm vi' khi thực thi' window_after = browser.window_handles [1] '. Chuyện gì thế? Xem: https://stackoverflow.com/questions/45354850/focus-on-second-page-form-with-selenium – LucSpan

2

Chúng tôi có thể xử lý các cửa sổ khác nhau bằng cách di chuyển giữa các cửa sổ được đặt tên bằng cách sử dụng “switchTo” phương pháp:

driver.switch_to.window("windowName") 

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

Ngoài ra, bạn có thể vượt qua một “cửa sổ xử lý” để phương thức "switchTo(). window()". Biết được điều này, nó có thể để lặp qua mỗi cửa sổ mở như vậy:

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

Trên hết các câu trả lời đã được đưa ra, để mở một tab mới lệnh javascript window.open() có thể được sử dụng.

Ví dụ:

# 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 

Bạn sau đó có thể đóng tab ban đầu như sau

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

Hoặc đóng tab mới mở

# Close current tab 
self.driver.close() 

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

Hope this helps.

+1

switch_to_window không còn được dùng nữa. Sử dụng switch_to.window –

+0

Cảm ơn @StephanSchielke, câu trả lời được cập nhật –

Các vấn đề liên quan