복붙노트

[RUBY-ON-RAILS] 카피 바라와 함께, 어떻게 "_blank"목표와의 연계에 대한 새로운 창으로 전환합니까?

RUBY-ON-RAILS

카피 바라와 함께, 어떻게 "_blank"목표와의 연계에 대한 새로운 창으로 전환합니까?

아마도 이것은 실제로 내가 겪고있어 문제가되지 않습니다, 그러나 I "click_link"타겟 링크 = "_ 빈은"세션이 현재 창에 초점을 유지하는 경우 것 같다.

나도 새로운 창으로 전환, 또는 _blank 속성을 무시할 수 있기를 원하는 그래서 - 기본적으로, 난 그냥 확인이 오른쪽 페이지의 할 수 있도록 페이지가 링크로 표시에 실제로 가고 싶어.

나는 웹킷과 셀레늄 드라이버를 사용합니다.

나는 지금까지 아래에있는 내 결과를 제출했다. 더 철저한 대답은 많이 감사합니다.

웹킷 드라이버에 해당하는 (또는 내가 나 자신을 발견 할 수있는 곳을 가리키는) 많이 주시면 감사하겠습니다 - 또한, 이것은 단지 셀레늄와 함께 작동합니다.

해결법

  1. ==============================

    1.카피 바라가> = 2.3은 새로운 윈도우 관리 API가 포함되어 있습니다. 그것은처럼 사용할 수 있습니다 :

    카피 바라가> = 2.3은 새로운 윈도우 관리 API가 포함되어 있습니다. 그것은처럼 사용할 수 있습니다 :

    new_window = window_opened_by { click_link 'Something' }
    within_window new_window do
      # code
    end
    
  2. ==============================

    2.이 솔루션은 셀레늄 드라이버 작동

    이 솔루션은 셀레늄 드라이버 작동

    열려있는 모든 창은 셀레늄의 매장입니다

    response.driver.browser.window_handles
    

    어떤 배열 될 것으로 보인다. 마지막 항목은 항상 가장 최근에 당신이 그것을로 전환하려면 다음을 수행 할 수 있습니다 의미 열린 창이다.

    블록 내 :

    new_window=page.driver.browser.window_handles.last 
    page.within_window new_window do
      #code
    end
    

    간단하게 현재 세션에 집중할 :

    session.driver.browser.switch_to.window(page.driver.browser.window_handles.last)
    

    카피 바라의 문제 페이지에서 참조 : https://github.com/jnicklas/capybara/issues/173

    셀레늄의 창 전환 기능에 대한 자세한 내용은 다음과 같습니다 http://qastuffs.blogspot.com/2010/10/testing-pop-up-windows-using-selenium.html

  3. ==============================

    3.이것은 지금 심령과 협력하고있다. window_handles가 아직 구현되지는 않지만 (당신은 창 이름, 즉를 통해 자바 스크립트 팝업 필요) :

    이것은 지금 심령과 협력하고있다. window_handles가 아직 구현되지는 않지만 (당신은 창 이름, 즉를 통해 자바 스크립트 팝업 필요) :

    within_window 'other_window' do
      current_url.should match /example.com/
    end
    

    편집 : 버전 1.4.0 이후, 심령 지금 구현의 window_handles 아래 당 주석.

  4. ==============================

    4.카피 바라 창문을 발견하고 전환 쉽게하기 위해 몇 가지 방법을 제공합니다 :

    카피 바라 창문을 발견하고 전환 쉽게하기 위해 몇 가지 방법을 제공합니다 :

    facebook_window = window_opened_by do
      click_button 'Like'
    end
    within_window facebook_window do
      find('#login_email').set('a@example.com')
      find('#login_password').set('qwerty')
      click_button 'Submit'
    end
    

    더 자세한 사항은 여기에 : 카피 바라 문서

  5. ==============================

    5.나는 이것이 이전 게시물입니다 알지만, 카피 바라 2.4.4에서 무엇을 그 가치에 대한

    나는 이것이 이전 게시물입니다 알지만, 카피 바라 2.4.4에서 무엇을 그 가치에 대한

    within_window(switch_to_window(windows.last)) do 
        # in my case assert redirected url from a prior click action
        expect(current_url).to eq(redirect['url'])
    end
    
  6. ==============================

    6.그것은 같아 지금 카피 바라 - 웹킷 불가능 : https://github.com/thoughtbot/capybara-webkit/issues/271

    그것은 같아 지금 카피 바라 - 웹킷 불가능 : https://github.com/thoughtbot/capybara-webkit/issues/271

    :-(

    동시에 https://github.com/thoughtbot/capybara-webkit/issues/129는 within_window으로 창을 전환 할 수 있습니다 주장한다.

    또한 https://github.com/thoughtbot/capybara-webkit/issues/47는 page.driver.browser.switch_to (). 창 (page.driver.browser.window_handles.last가) 작동을 시사한다. 잘 아, 코드 판독을합니다.

    https://github.com/thoughtbot/capybara-webkit/blob/master/lib/capybara/webkit/browser.rb 최소한의 코드는 API가 webdriver에 대한 작품 / 파이어 폭스도 작동되는 점에하는 것이 좋습니다 일부 참조가 웹킷.

  7. ==============================

    7.이제 within_window 삐 - 웹킷 http://github.com/thoughtbot/capybara-webkit/pull/314 구현하고 여기에 당신은 http://github.com/mhoran/capybara-webkit-demo 그것을 사용하는 방법을 볼 수 있습니다

    이제 within_window 삐 - 웹킷 http://github.com/thoughtbot/capybara-webkit/pull/314 구현하고 여기에 당신은 http://github.com/mhoran/capybara-webkit-demo 그것을 사용하는 방법을 볼 수 있습니다

  8. ==============================

    8.2014 년 5 월로서 다음의 코드는 카피 바라 - 웹킷에서 작동

    2014 년 5 월로서 다음의 코드는 카피 바라 - 웹킷에서 작동

     within_window(page.driver.browser.window_handles.last) do
       expect(current_url).to eq('http://www.example.com/')
     end
    
  9. ==============================

    9.이 카피 바라 - 웹킷에 나를 위해 작동합니다 :

    이 카피 바라 - 웹킷에 나를 위해 작동합니다 :

    within_window(windows.last) do
      # code here
    end
    

    (나는 카피 바라 2.4.1 및 카피 바라 - 웹킷 1.3.0을 사용하고 있습니다)

  10. ==============================

    10.또한 윈도우의 이름, URL 또는 제목을 전달할 수 있습니다 (그러나 지금은이 dipricated)

    또한 윈도우의 이름, URL 또는 제목을 전달할 수 있습니다 (그러나 지금은이 dipricated)

      let(:product) { create :product }
    
      it 'tests' do
        visit products_path
        click_link(product.id)
    
        within_window(product_path(product)) do
          expect(page).to have_content(product.title)
        end
      end
    

    당신은 람다 나 또한 PROC를 전달할 수 있습니다

    within_window(->{ page.title == 'Page title' }) do
      click_button 'Submit'
    end
    

    더 명확하게 이해하는 방법의 사용을 뻗어 바랍니다

  11. ==============================

    11.명시 적으로 창을 변경하려면 switch_to_window를 사용

    명시 적으로 창을 변경하려면 switch_to_window를 사용

      def terms_of_use
        terms_window = window_opened_by do
          click_link(@terms_link)
        end
        switch_to_window(terms_window)
      end
    

    그 방법 브라우저 후에는 within_window 블록 대신 랩의 모든 것을, 새 페이지에서 작동합니다

  12. ==============================

    12.의 Gmail 창에서 링크를 열 때 나는이 문제를 가지고 있었다 :이처럼 고정 :

    의 Gmail 창에서 링크를 열 때 나는이 문제를 가지고 있었다 :이처럼 고정 :

    Given /^(?:|I )click the "([^"]*)" link in email message$/ do |field|
    
      # var alllinks = document.getElementsByTagName("a");
      # for (alllinksi=0; alllinksi<alllinks.length; alllinksi++) {
      #   alllinks[alllinksi].removeAttribute("target");
      # }
    
      page.execute_script('var alllinks = document.getElementsByTagName("a"); for (alllinksi=0; alllinksi<alllinks.length; alllinksi++) { alllinks[alllinksi].removeAttribute("target"); }')
    
      within(:css, "div.msg") do
        click_link link_text
      end
    
    end
    
  13. ==============================

    13.가장 좋은 아이디어는 업데이트 최신 버전 (2.4.1)에 카피 바라 그냥 사용하는 것입니다 windows.last page.driver.browser.window_handles가되지 않습니다 때문이다.

    가장 좋은 아이디어는 업데이트 최신 버전 (2.4.1)에 카피 바라 그냥 사용하는 것입니다 windows.last page.driver.browser.window_handles가되지 않습니다 때문이다.

  14. ==============================

    14.주요 구현 (window_opened_by은) 나를 위해 오류가 발생합니다 :

    주요 구현 (window_opened_by은) 나를 위해 오류가 발생합니다 :

    *** Capybara::WindowError Exception: block passed to #window_opened_by opened 0 windows instead of 1
    

    그래서,이 솔루션으로이를 해결 :

    new_window = open_new_window
    
    within_window new_window do
      visit(click_link 'Something')
    end
    
    page.driver.browser.window_handles
    # => ["CDwindow-F7EF6D3C12B68D6B6A3DFC69C2790718", "CDwindow-9A026DEC65C3C031AF7D2BA12F28ADC7"]
    
  15. from https://stackoverflow.com/questions/7612038/with-capybara-how-do-i-switch-to-the-new-window-for-links-with-blank-targets by cc-by-sa and MIT license