我正在尝试测试一个页面,该页面在访问时会立即显示打印对话框。我需要做的就是关闭对话框或点击取消,这样我就可以与它背后的页面进行交互。我试图弄清楚如何做到这一点,但我发现的一切都表明它在Firefox中是不可能的。
答案 0 :(得分:2)
如果您使用的是MacOS或Linux,不知道该告诉您什么......我打赌这是可能的,但我需要了解自己。 :)
如果你在Windows上,我确实有一些建议。我建议查看RAutomation gem,这对于这样的任务很有用(在Firefox Print对话框中找到并点击Cancel):
https://github.com/jarmo/RAutomation
或者您可以尝试使用AutoIt。安装Watir还会安装AutoItX3.dll的副本,您可以使用它来进行简单的GUI自动化。
要查看AutoIt是否可以在您的系统上使用,请在irb中尝试此操作 - 此代码将等待10秒钟以显示Firefox打印对话框,然后单击取消按钮:
irb(main):001:0> require 'win32ole'
=> true
irb(main):002:0> autoit = WIN32OLE.new('AutoItX3.Control')
=> #<WIN32OLE:0x3c61ce0>
irb(main):003:0> result = autoit.WinWaitActive('Print', '', 10)
=> 1
irb(main):004:0> result = autoit.ControlClick('Print', '', 'Cancel')
=> 1
如果“WIN32OLE.new('AutoItX3.Control')”行引发异常,则可能需要使用regsvr32.exe来注册DLL。例如,以下是如何在Win7上执行此操作:
启动提升的cmd.exe
regsvr32 C:\ Ruby187 \ lib \ ruby \ gems \ 1.8 \ gems \ watir-1.6.5 \ lib \ watir \ AutoItX3.dll
(请注意,如果您的Ruby安装不在C:\ Ruby187中,或者您的Watir版本与1.6.5不同,则可能需要更改上面的路径。)
AutoIt文档在这里:
http://www.autoitscript.com/autoit3/docs/
最后要注意的是:
如果代码中出现“打印”对话框的语句阻塞,直到对话框关闭,事情会变得复杂一些。您需要使用线程或外部进程来处理对话框(因为我认为FireWatir还没有click_no_wait方法)。