无法使用rautomation找到系统弹出按钮

时间:2013-07-22 08:00:13

标签: ruby selenium-webdriver rautomation

我正在使用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无法检测到按钮?如果我做错了,请纠正我。

这是一个弹出窗口:

window popup

4 个答案:

答案 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)