我正在尝试测试一个在访问时立即显示打印对话框的页面。我需要做的就是关闭对话框或单击取消,这样我就可以与它后面的页面进行交互。我试图找出如何做到这一点,但我发现的一切都表明它在 Firefox 中是不可能的。
最佳答案
如果您使用的是 MacOS 或 Linux,不知道该告诉您什么……我敢打赌这是可能的,但我需要自己了解如何操作。 :)
如果您使用的是 Windows,我确实有一些建议。我建议查看 RAutomation gem,它非常适合这样的任务(在 Firefox 打印对话框中找到并单击取消):
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 方法)。
关于ruby - 在 Firewatir 中,如何与 Firefox 打印对话框交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5148602/