我正在使用Selenium WebDriver和rautomation编写测试来处理系统弹出窗口。我在irb上尝试过如下:
require 'selenium-webdriver'
require 'rautomation'
driver = Selenium::WebDriver.for :firefox
driver.get "http://rubygems.org/gems/rautomation-0.9.2.gem"
window = RAutomation::Window.new :title => "Opening rautomation-0.9.2.gem"
ok_button = window.button(:text => "&OK")
ok_button.exists?
cancel_button = window.button(:text => "&Cancel")
cancel_button.exists?
ok_button.exists?和cancel_button.exists?正在返回假。因此我无法点击按钮。
我也尝试过:
window.buttons.length
找到按钮数量,但它返回0。
有人可以帮我解释为什么使用rautomation无法检测到按钮?如果我做错了,请纠正我。
这是一个弹出窗口:
答案 0 :(得分:2)
根据我的情况,我必须发送两个:tab 键,然后发送:输入以保存文件。像:
driver.get "http://rubygems.org/gems/rautomation-0.9.2.gem"
window = RAutomation::Window.new :title => /Opening/i
if window.exist?
window.activate
window.send_keys :tab;
sleep 2;
window.send_keys :tab;
sleep 2;
window.send_keys :enter
end
我不知道为什么我不能只用以下方式保存文件:
window.activate; sleep 1; window.send_keys :enter
答案 1 :(得分:0)
单击该链接时,我看不到任何弹出窗口。 Chrome只是下载一个文件。 :)这可能会有所帮助:http://watirwebdriver.com/browser-downloads/
答案 2 :(得分:0)
此对话框的问题在于它不使用本机Windows控件。当您使用Spy++或AutoIt Window Info Tool时,他们也不会在该窗口中显示任何控件。
使用RAutomation时,您可以检查它是否具有本机控件,如下所示:
win = RAutomation::Window.new :title => /Opening rautomation/
p win.present?
p win.controls.length
p win.text
win.close
此脚本的输出将为:
true
0
""
换句话说 - 窗口存在,它有任何类型的零控件,文本是一个空字符串。此外,关闭窗口真的关闭它,你可以直观地验证它 - 这意味着我们正在与正确的窗口进行交互,而不是偶然与其他一些空窗口(请注意:这有时也可能发生)。
这意味着您无法使用AutoIt,RAutomation或许多其他自动化工具直接与控件进行交互。可能有一些特定的自动化工具可用于处理这类对话 - 我不确定。
然而,有一种解决方法如何使用这些类型的窗口 - 向窗口发送所需的击键。在这种情况下,发送一个返回/回车键就可以了,因为这与单击“确定”按钮相同 - 您可以手动尝试。
以下是示例代码,与单击“确定”按钮的工作方式相同:
win = RAutomation::Window.new :title => /Opening rautomation/
win.activate
sleep 1
win.send_keys :enter
我不知道为什么,但出于某种原因,你必须通过调用Window#activate
手动激活窗口并在发送enter
密钥之前等待一秒钟。
在执行此操作后,将弹出一个新对话框,该对话框使用本机Windows控件 - 您可以按照您希望RAutomation首先处理的方式处理它。
但是,如果您使用:ms_uia
适配器而不是默认:win32
,则无需激活和休眠。
这是一个使用:ms_uia
适配器的完整工作示例:
win = RAutomation::Window.new :title => /Opening rautomation/, :adapter => :ms_uia
win.send_keys :enter
file_dialog = RAutomation::Window.new :title => /Enter name of file/
file_dialog.button(:value => "&Save").click
要在第一个对话框中单击“取消”而不是“确定”,您可以使用Window#close
,因为我用来测试上面的窗口。
我建议您使用:ms_uia
适配器而不是:win_32
,因为它每天都会变得更加稳定,并且在不久的将来会成为新的默认适配器。
要将:ms_uia
适配器设置为默认适配器,您可以在加载RAutomation之前使用环境变量RAUTOMATION_ADAPTER
,如下所示:
ENV["RAUTOMATION_ADAPTER"] ||= :ms_uia
require "rautomation"
答案 3 :(得分:0)
此代码对我有用:
window = RAutomation::Window.new(:title => /Opening rautomation-0.9.2.gem/i)
window.activate
p window.exists? # => true
sleep 2
window.send_keys(:down)
window.send_keys(:enter)