2013-09-24 46 views
5

Trong RSpec tôi có thể sử dụng chuyển đổi mã này sang cửa sổ bật lên, link, Làm cách nào tôi có thể thực hiện điều đó trong bước Dưa chuột?Chuyển sang cửa sổ bật lên trong dưa chuột, capybara

login_window = page.driver.find_window('PPA_identity_window') 
    main_window = page.driver.find_window('') 

    # We use this to execute the next instructions in the popup window 
    page.within_window(login_window) do 
     #Normally fill in the form and log in 
     fill_in 'email', :with => "<your paypal sandbox username>" 
     fill_in 'password', :with => "<your paypal sandbox password>" 
     click_button 'Log In' 
    end 

Trả lời

13

Tôi không nghĩ rằng có một cách dưa chuột/capybara để làm điều này như vậy.

Nhưng bạn vẫn có thể thay đổi các cửa sổ sử dụng các lệnh điều khiển selen như thế này:

#Get the main window handle 
    main = page.driver.browser.window_handles.first 
    #Get the popup window handle 
    popup = page.driver.browser.window_handles.last 

    #Then switch control between the windows 
    page.driver.browser.switch_to.window(popup) 

EDIT: Andrews trả lời dưới đây là câu trả lời đúng ngay bây giờ vì những thay đổi DSL mới được thực hiện.

+2

Bây giờ Capybara cung cấp DSL để tương tác với cửa sổ bật lên. Xem câu trả lời của tôi dưới đây. – Andrew

+0

Vui lòng sử dụng câu trả lời của Andrew dưới đây vì việc triển khai này sẽ gây ra lỗi khi bạn muốn truy cập cửa sổ chính sau khi cửa sổ phương thức đóng. –

+0

Nếu bạn đang sử dụng Capybara, không nên sử dụng phương pháp này đặc biệt nếu bạn định sử dụng trình điều khiển Chrome. Bạn sẽ gặp phải một ngoại lệ khi sử dụng phương thức switch_to_window(). https://github.com/teamcapybara/capybara/issues/1861. Sử dụng câu trả lời dưới đây bởi Andrew. – ibaralf

13

Bạn có thể sử dụng Capybara trong bước dưa chuột của bạn để tương tác với các cửa sổ popup:

login_window = window_opened_by do 
    click_button 'Open Login Window' 
end 
within_window(login_window) do 
    fill_in :email, with: "[email protected]" 
    fill_in :password, with: "password" 
    click_button 'Log In' 
end 
+0

câu trả lời hay nhất cho đến nay –

+0

Cung cấp cho anh chàng này một số upvotes hơn – Doydle

+0

Đây là câu trả lời đúng. –

0

Trong một cách đơn giản chúng ta có thể làm như vậy, mà không within_window và không có người bản địa selen.

page.switch_to_window page.windows.first 

page.switch_to_window page.windows.last 

hoặc

page.switch_to_window page.windows[0] 

page.switch_to_window page.windows[-1] 

0 - là cửa sổ đầu tiên
-1 - là cửa sổ cuối cùng

cửa sổ chức năng trả về một mảng của tất cả các cửa sổ.

Cách khác, sử dụng tiêu đề của trang.

page.switch_to_window {title == 'Google'}