RadRails IDE でのテストに watir を使用します。[削除] ボタンをクリックすると、[Web ページからのメッセージ] ウィンドウが表示され、本当にレコードを削除するかどうかを確認できます。[OK] のクリックをシミュレートするにはどうすればよいですか? ここに私が試す方法があります:1) ie=Watir::IE.new
ie.execute_script("window.alert = function() {}") - have no effect
2)ie1.button(:name, "delete_action").click
ie4.execute_script("window.confirm = function() {return true}")
エラーを取得 -Task.rb:140:in '<main>: undefined local variable or method 'ie4' for main:Object (NameError)
3)ie1.button(:name, "delete_action").click
ie1.execute_script("window.confirm = function() {return true}")
効果なし
4) `def startClicker( ボタン , waitTime = 3)
w = WinClicker.new
longName = ie.dir.gsub("/" , "\\" )
shortName = w.getShortFileName(longName)
c = "start rubyw #{shortName }\\watir\\clickJSDialog.rb #{button }
#{ waitTime} "
puts "Starting #{c}"
w.winsystem(c)
w=nil
end`
そして、置きます
`ie1.button(:name, "delete_action").click
startClicker("OK" , 3)
ie.button("Submit").click`
Web ページからのメッセージが表示された後。エラーを取得:
E:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.0.0/lib/watir-classic/modal_dialog.rb:3:in 'initialize': Watir no longer supports WinClicker. Please use click_no_wait and the javascript_dialog method. (NotImplementedError)
from Task.rb:12:in 'new'
from Task.rb:12:in 'startClicker'
from Task.rb:162:in '<main>'
5) テスト開始時のコード
`def check_for_popups
autoit = WIN32OLE.new('AutoItX3.Control')
loop do
ret = autoit.WinWait('Message from webpage', '', 1)
if (ret==1) then autoit.Send('{enter}') end
sleep(3)
end end`
Code after message from webpage appears
`ie1.button(:name, "delete_action").click
$popup = Thread.new { check_for_popups }
at_exit { Thread.kill($popup) } `
反応無し。
6) `require 'watir-classic\contrib\enabled_popup' を要求する
def startClicker(ボタン、waitTime=9、user_input=nil)
hwnd = $ie.enabled_popup(waitTime)
もし (hwnd)
w = WinClicker.new
if ( user_input )
w.setTextValueForFileNameField( hwnd, "#{user_input}" )
end
sleep 3
w.clickWindowsButton_hwnd( hwnd, "#{button}" )
w=nil
end
終了`
Web ページからのメッセージの後にコードが表示される
`ie1.button(:name, "delete_action").click_no_wait
startClicker( "OK ", 7)`
メッセージを取得 -
Task.rb:14:in
startClicker': undefined method enabled_popup' for nil:NilClass (NoMethodError)
from Task.rb:157:in
'`
7)require 'watir/contrib/enabled_popup'
ウェブページからのメッセージの後のコードが表示されます -
`hwnd = browser.enabled_popup(5)
もし (hwnd)
popup = WinClicker.new
popup.makeWindowActive(hwnd)
popup.clickWindowsButton("Web ページからのメッセージ", "OK", "30")
終了`
Get error - E:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.0.0/lib/watir-classic/win32.rb:19:in
block in ': 1.9 の DL API は 1.8 と互換性がありません。E:/Ruby193/lib/ruby/gems/1.9 のhttp://www.ruby-forum.com/topic/138277 (NotImplementedError) を参照してください。 1/gems/watir-classic-3.0.0/lib/watir-classic/contrib/enabled_popup.rb:11: call'
from E:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.0.0/lib/watir-classic/contrib/enabled_popup.rb:11:in
E:/Ruby193/lib/ruby/gems/1.9.1/gems/watir からの「enabled_popup」のブロック-classic-3.0.0/lib/watir-classic/wait.rb:18:in until'
from E:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.0.0/lib/watir-classic/contrib/enabled_popup.rb:10:in
enabled_popup' from Task.rb:145:in<main>'
8)`'watir-classic\contrib\enabled_popup' が必要です
def popupChecker(テキスト)
Timeout::timeout(2)do
begin
if $ie.enabled_popup
hwnd = ie.enabled_popup(5)
w = WinClicker.new
w.makeWindowActive(hwnd)
w.clickWindowsButton_hWnd(hwnd,text)
end
rescue Timeout::Error
puts 'No popup existed'
end
end
終了`
ウェブページからのメッセージの後のコードが表示されます -
`ie1.button(:name, "delete_action").click_no_wait
popupChecker('OK')
ie1.wait`
Task.rb:11:in '`からメッセージ: Task.rb:13:in
block in popupChecker': undefined method timeout' を取得しますenabled_popup' for nil:NilClass (NoMethodError)
from E:/Ruby193/lib/ruby/1.9.1/timeout.rb:68:in
popupChecker'
from Task.rb:158:in
9)`def check_for_popups(title="ウェブページからのメッセージ", button="OK")
popup=Thread.new {
autoit=WIN32OLE.new('AutoItX3.Control')
ret=autoit.WinWait(title,"",60)
if (ret==1)
puts "There is popup."
autoit.WinActivate(title)
button.downcase!
if button.eql?("ok") || button.eql?("yes") || button.eql?("continue")
autoit.Send("{Enter}")
else
autoit.Send("{tab}")
autoit.Send("{Enter}")
end
elsif (ret==0)
puts "No popup, please check your code."
end
}
at_exit { Thread.kill(popup) }
終了`
ウェブページからのメッセージの後のコードが表示されます -
check_for_popups("Message from webpage", "OK")
反応無し