0

Rautomation を使用して IE11 通知バー (ファイルのダウンロード中) を自動化しようとしています。MSUIA アダプターを使用すると、保存ボタンをキャッチできます。しかし、名前を付けて保存を使用して、ファイルの場所と名前を指定したいと考えています。しかし、私にはそれができません。

UIspy で見ると、「保存」という名前の分割ボタンがあることがわかります。この分割ボタンには、「」という名前の別の子分割ボタンがあります (これは基本的に下矢印です)。このコントロールにアクセスできません。

iemainwindow_local = RAutomation::Window.new(:class=>"IEFrame" , :adapter => :ms_uia )
ienotificationbar_frame = iemainwindow_local.child(:class=>"Frame Notification Bar")
ienotificationbar = ienotificationbar_frame.child(:class=>"DirectUIHWND")
if ienotificationbar.exists?
  ienotificationbar.activate
  sleep 1
  mycontrol = ienotificationbar.control(:value =>"Save")
  mycontrol2= mycontrol.control(:children_only => true) 
  mycontrol2.exist?
  mycontrol.click
end

この行でエラーが発生します mycontrol2= mycontrol.control(:children_only => true)

undefined method `control' for #<RAutomation::Adapter::MsUia::Control:0x4108e60>

このブロックを乗り越える方法はありますか?

メニューとメニュー項目が splitButton に関連付けられている必要があることを理解しています。[保存] の横にある下向き矢印をクリックすると、UISpy でメニュー/メニュー項目がデスクトップ ウィンドウの直下に作成されていることがわかります (プロセス ID は同じですが) - 方法名前を付けて保存しますか?

4

1 に答える 1

0

問題

残念ながら、 の:ms_uiaアダプターRAutomationは現在の形式ではこれを行うことができません。私はUIAアダプターをたくさん書いたので、これを知っています:)問題は、現在のAPIでは、Controlクラスに#control方法。「保存」ボタンにネイティブ ウィンドウ ハンドルがあれば、次のように実行できます。

ieframe = RAutomation::Window.new(class: 'IEFrame')
save = RAutomation::Window.new(hwnd: ieframe.control(value: 'Save').hwnd)
save.control(index: 0)

そうではないので、残念ながら、それについての識別プロパティがないため(「保存」ボタンの子であることを除いて)、私が知っている信頼できる方法はありません。

という別の gem を作成しましたuia。これは、UI オートメーションの低レベル ラッパーとして機能し、UI オートメーションとより密接に連携して、UI Spy などのツール内で見られるように操作できるようにします。最終的には、この宝石を使用しますRAutomationが、まだ時間がありません。あなたの状況で「名前を付けて保存...」分割ボタン コントロールに到達するには、次のようにします。

ieframe = UIA.find_element(title: /Thanks for downloading/)
save_as = ieframe.find(name: 'Save').find(control_type: :split_button)
save_as.as(:invoke).invoke

は、見つかった「名前を付けsave_as.as(:invoke)て保存」Elementをパターンを実装するものとして扱い、メソッドをInvoke呼び出して#invokeメニューをポップアップさせることができます。

お役に立てれば!

于 2014-08-25T04:33:16.597 に答える