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? false を返しています。したがって、ボタンをクリックすることはできません。

私も試しました:

window.buttons.length

ボタンの数を見つけるために、0を返しています。

ボタンが自動化を使用して検出されない理由を教えてください。私が何か間違ったことをしている場合は、私を修正してください。

ここにポップアップがあります:

ウィンドウのポップアップ

4

4 に答える 4

2

私の条件では、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

このコードは私のために働いた:

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 に答える
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、または他の多くの自動化ツールを使用してコントロールを直接操作できないことを意味します。この種のダイアログを処理するために利用できる特定の自動化ツールがいくつかあるかもしれませんが、私にはわかりません。

ただし、これらの種類のウィンドウを操作するための回避策があります。必要なキーストロークをウィンドウに送信します。この場合、return/enter キーを送信すると、「OK」ボタンをクリックするのと同じことになるので、手動で試すことができます。

「OK」ボタンをクリックするのと同じように動作するコード例を次に示します。

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

最初のダイアログで「OK」ではなく「キャンセル」をクリックするにはWindow#close、上記のウィンドウをテストするために使用していたのと同じように使用できます。

アダプターは日々安定しており、近い将来新しいデフォルトになるため、:ms_uia代わりにアダプターを使用することをお勧めします。:win_32

:ms_uiaデフォルトのアダプターを設定するにはRAUTOMATION_ADAPTER、RAutomation 自体を次のようにロードする前に環境変数を使用できます。

ENV["RAUTOMATION_ADAPTER"] ||= :ms_uia
require "rautomation"
于 2013-07-24T19:05:05.653 に答える