2

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

这是一个弹出窗口:

弹出窗口

4

4 回答 4

2

对于我的情况,我必须发送两个:tab键,然后发送:enter来保存文件。喜欢:

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
于 2013-09-17T03:46:54.967 回答
0

单击该链接时,我没有看到任何弹出窗口。Chrome 只是下载一个文件。:) 这可能会有所帮助:http ://watirwebdriver.com/browser-downloads/

于 2013-07-23T07:57:30.420 回答
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_ADAPTER在加载 RAutomation 本身之前使用环境变量,如下所示:

ENV["RAUTOMATION_ADAPTER"] ||= :ms_uia
require "rautomation"
于 2013-07-24T19:05:05.653 回答
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)
于 2015-02-26T10:15:18.910 回答