1

別のプログラムへのログインを自動化するために、pywinauto (新しい github の最新版) を使用しています。「サインイン」ウィンドウには、多数のボタンと、ユーザー名用とパスワード用の 2 つのフィールドがあります。

私の問題は、ユーザー名とパスワードの 'edit' コントロール識別子が同じアクセス名 ['1', '0', 'Edit'] を持っていることです。「Edit2」はありません。

私が使うとき

sign_in.print_control_identifiers()

まだ 1 つの編集プロパティのみが表示されます。この他の編集コントロールにアクセスするにはどうすればよいですか?

デモ会社ファイルで写真を更新します。

ログイン ウィンドウは次のとおりです: http://imgur.com/VwS9w0b

これはパスワードの上にマウスを置いたものです: http://imgur.com/6HWQVlZ

パスワードフィールドがクリックされました。これも edit1 と呼ばれます! http://imgur.com/GUnTVrK

Swapy 出力: http://imgur.com/LJB99y1

私が見つけた解決策は、「タブ」キーをシミュレートすることでした

  sign_on.TypeKeys("{TAB}")

しかし、これは優れた解決策ではありません。TAB の実行時に別のウィンドウがフォーカスされると、スクリプトはそのウィンドウにタブを送ってしまうからです。

4

2 に答える 2

0

Edit0Edit1同じ最初の編集ボックスを参照します。これは予想される動作です (設計による)。Edit22 番目のエディット ボックス、Edit33 番目のエディット ボックスなどを指します。print_control_identifiers() の出力を取得すると、通常は次のようなものが表示されます (たとえば、メモ帳の [検索] ダイアログ)。

Edit - ''   (L152, T160, R323, B180)
    'Edit' 'Edit0' 'Edit1' 'Fi&nd what:Edit' ()

Edit - ''   (L152, T188, R323, B208)
    'Edit2' 'Re&place with:Edit' ()

そのため、検索アルゴリズムの可能な名前がbest_match各コントロールにリストされています。これらの名前は一意になるように (他のコントロールと重複しないように) しようとしていますが、1 つのコントロールには複数の最適な名前があります。正常な状態です。sign_in['Edit2']おそらくあなたが必要とするものです。

このようなアプローチに同意しない場合は、https ://github.com/pywinauto/pywinauto/issues で設計に関する議論を行うことができます。

于 2015-06-08T10:38:28.937 に答える