2012-12-17 3 views
2

루비의 Watir 보석을 사용하여 자바 스크립트 팝업을 연 버튼을 클릭하고 팝업에서 '확인'을 클릭하면 보입니다. 하기 위해서. 버튼은 프레임의 프레임에 있습니다. 광범위하게 검색하여 Watir wiki entry에 대한 자바 스크립트 팝업을 읽었지만 아무 것도 작동하지 않습니다.
execute_script 및 click_no_wait가 예상대로 작동하지 않기 때문입니다. 예를 들어
, 다음 명령을Watir Help : 클릭 대기하지 않고 실행중인 스크립트가 예상대로 작동하지 않습니다.

@browser.execute_script('window.alert = function() {}') 
    @browser.execute_script('alert("hello")') 

대신 아무것도 안하고의 예상 행동 "안녕하세요"라는 자바 스크립트 팝업을 만들 수 있습니다.
명령 :

@browser.button(:value, 'Submit').click 

클릭 자바 스크립트 팝업을 생성하는 버튼을 누릅니다. 그런 다음 팝업이 '확인'을 클릭 할 때까지 스크립트가 중단됩니다.
명령 :

@browser.button(:value, 'Submit').click_no_wait 

버튼을 클릭하지 않는 (또는 버튼을 클릭 않으며, onclick 이벤트를 트리거하지 않습니다).

Timeout::timeout(1) { @browser.button(:value, 'Submit').click } 

Thread.new { @browser.button(:value, 'Submit').click } 

을하지만 시간 초과 내가 수동으로 팝업에서 '확인'을 클릭 할 때까지 루비가 정지 원인이 예외가 발생하지 및 Watir과는 클릭하지 않습니다
는 또한 시도 내가 새 스레드에서 실행할 때.

누구든지 솔루션을 제공 할 수 있습니까?

편집 : 문제는 @ browser.button.click 이후에 팝업이 닫힐 때까지 스크립트가 중단된다는 것입니다. @ browser.alert.ok는 팝업을 성공적으로 닫지 만 팝업이 닫힐 때까지 멈추기 때문에 버튼을 클릭 한 후 스크립트는 @ browser.alert.ok를 실행할 수 없습니다. 이 catch-22는 click_no_wait에 의해 해결되지만, click_no_wait는 클릭하지 않습니다.

시스템 정보 :
윈도우 7 엔터프라이즈 64 비트
Internet Explorer 버전 9.0.12
Watir과-4.0.2-86-mingw32
루비 1.9.3p286 (2012년 10월 12일) I386 -mingw32]

답변

1

자바 스크립트 팝업과 상호 작용하는 데 사용할 수있는 알림 API (watir-classicwatir-webdriver)가 있습니다. 사용하여 팝업을 닫는

시도 :

@browser.alert.ok 

업데이트 - 해결 방법 :

이 프레임의 요소 요소 번호의 click_no_wait를 사용하여 버그를 것으로 보인다. Issue 45을 업데이트했으며 패치를 제출하려고합니다.이 문제를 해결해야한다 스크립트의 시작에서 다음 원숭이 패치를 추가하는 말은 시간에

, (즉, click_no_wait 기다릴한다)의 응답

require 'watir-classic' 

Watir::IE.new(true) 
module Watir 
    class Frame 
     def attach_command 
      tag_name = @specifiers[:tag_name].join("' << '") 
      @container.page_container.attach_command + ".frame(:tag_name => Array.new << '#{tag_name}', :unique_number => #{unique_number})" 
     end 
    end 
end 
+0

감사합니다. 솔루션이 @ browser.button (...) 다음에 스크립트가 제대로 작동하지 않습니다. 팝업이 닫힐 때까지 클릭하십시오. 이것은 click_no_wait을위한 것이지만 click_no_wait을 사용하면 버튼이 전혀 클릭되지 않습니다. – quv

+0

나는 이것이 Watir-Classic의 버그라고 생각하며 [Issue 45] (https://github.com/watir/watir-classic/issues/45)를 업데이트했습니다. 그 동안 원숭이 패치 (해결 방법)로 답변을 업데이트했습니다. –

+0

감사합니다. 이것은 완벽하게 작동했습니다. – quv

관련 문제