5

自動化に pywinauto を使用しています DiffDaff ソフトウェアのボタンをクリックします。

私の意図は次のとおりです。

  • ステップ 1: DiffDaff ソフトウェアを開く

  • ステップ 2: [概要] ボタンをクリックします

    from pywinauto.application import Application
    
    app = Application.start("C:\Program Files\DiffDaff\DiffDaff.exe")
    
    app.About.Click()
    

しかし、私はステップ 2 で立ち往生しており、コンソールにエラーが表示されます。

  File "build\bdist.win32\egg\pywinauto\application.py", line 238, in __getattr__
  File "build\bdist.win32\egg\pywinauto\application.py", line 788, in _resolve_control
pywinauto.findbestmatch.MatchError: Could not find 'About' in '['', u'DiffDaff - Compare Files, Folders And Web Pages', u'Internet Explorer_Hidden', u'DiffDaff - Compare Files, Folders And Web PagesDialog', 'Dialog']'

ここで、''、u'DiffDaff - ファイル、フォルダー、および Web ページの比較'、u'Internet Explorer_Hidden'、u'DiffDaff - ファイル、フォルダー、および Web ページの比較Dialog'、'Dialog' はソフトウェアのタイトルです

また、コマンド'app.dialogs.print_control_identifiers()'を使用して「About」ボタンの正確な位置を知ると、次の出力が得られます。

Button - '&About'   (L750, T388, R834, B411)
    '&About' '&AboutButton' 'Button3'

しかし、上記のパラメータを理解するのは非常に困難です (L750、T388 はどこにあるのか...) - 上記のパラメータの意味をすべて説明していただけませんか?

「クリック」ボタンを実行する方法は?

ありがとう。

4

1 に答える 1

6

pywinautoApplication オブジェクトからコントロール メソッドまでの 2 レベルの階層が必要です。呼び出しの構造は次のとおりです。

app.<DialogName>.<ControlName>.<method>(<params>)

あなたの場合、それは次のようになります

app.Dialog.About.click()

よりリアルなクリックが必要な場合はclick_input()、ユーザーとしてカーソルを移動し、コントロールをクリックするを使用してください。click()送信するだけWM_CLICKで、信頼性も低くなります。

print_control_identifiers()メソッドは次の情報を出力します。

<ControlType> - '<Name a la WindowText>' (<rectangle>)
                possible names which are most likely useful for object attribute access

言及されたコードは、次のものと同等です。

app.window(best_match='Dialog', top_level_only=True).child_window(best_match='About').click()

pywinautoメソッドをオーバーライドすることで、そのような構造を簡素化します__getattribute__

于 2014-07-07T13:16:16.510 に答える