pywinauto: Windows デスクトップ アプリケーションの自動テスト (2)

序文

前の記事のアドレス:

pywinauto: Windows デスクトップ アプリケーションの自動テスト (1)_pywinauto 中国語マニュアル_ライオン キングのブログ - CSDN ブログ

次の記事のアドレス:

まだありません

1. この本は前の章から続いています

前回のアドレスで「国産アプリ」Airtestを試してみると書きましたが、以下は初期使用時の記事です、もちろん今後もAirtestに関する記事は掲載しません。使いにくいというわけではなく、むしろ統合されているので、実際にはかなり便利です。ただし、pywinauto 自体は非常に優れており、より柔軟に使用できますが、結局のところ、比較的低レベルなので、選択次第です。

Airtest: Windows デスクトップ アプリケーションの自動テスト (1)_デスクトップ アプリケーションの自動テスト_ライオン キングのブログ - CSDN ブログ

2. 使い方が簡単

1. メモ帳の操作

from pywinauto.application import Application

app = Application().start("notepad.exe")
dialog = app.Notepad
edit = dialog.Edit  # 查找编辑框控件
edit.type_keys("Hello, World!")  # 在编辑框中输入文本
dialog.print_control_identifiers()
 (1) 運用結果

(2) 以下のように印刷します。
Control Identifiers:

Notepad - '*无标题 - 记事本'    (L179, T156, R1695, B913)
['*无标题 - 记事本Notepad', 'Notepad', '*无标题 - 记事本']
child_window(title="*无标题 - 记事本", class_name="Notepad")
   | 
   | Edit - 'Hello,World!'    (L187, T207, R1687, B883)
   | ['Edit', '*无标题 - 记事本Edit']
   | child_window(title="Hello,World!", class_name="Edit")
   | 
   | StatusBar - ''    (L187, T883, R1687, B905)
   | ['StatusBar  第 1 行,第 13 列', 'StatusBar UTF-8', 'StatusBar Windows (CRLF)', '*无标题 - 记事本StatusBar', 'StatusBar', 'StatusBar 100%']
   | child_window(class_name="msctls_statusbar32")

Process finished with exit code 0
(3) 関連説明

上記の出力は、print_control_identifiers() メソッドを呼び出してコントロール識別子 (Control Identifiers) を出力した結果です。これらの識別子は、ウィンドウとそのサブコントロールに関する情報を提供し、それらを正確に識別して操作するのに役立ちます。出力の各部分について、特に太字の部分に注目して説明します。

①メモ帳 - '*無題-メモ帳' (L149、T167、R1665、B924):

メモ帳はウィンドウのタイトルを表します。
*無題 - Notepad はウィンドウのクラス名です。
(L149, T167, R1665, B924) はウィンドウの座標位置、左上隅 (149, 167) と右下隅 (1665, 924) を表します。
②['*無題-メモ帳', 'メモ帳', '*無題-メモ帳']:

これはウィンドウのエイリアスであり、スクリプトでウィンドウを参照するために使用できます。
③child_window(title="*無題-メモ帳", class_name="メモ帳"):

これはコントロールのプロパティであり、コントロールのタイトルとクラス名を指定し、このウィンドウを正確に配置して操作するために使用できます。
④編集 - 「Hello, World!」 (L157、T218、R1657、B894):

Edit はテキスト エディット ボックス コントロールを表します。
「Hello,World!」は編集ボックスに表示されるテキストです。
(L157、T218、R1657、B894)はエディットボックスの座標位置を表します。
⑤['*無題-メモ帳編集', '編集']:

これは編集ボックスのエイリアスであり、スクリプト内で参照できます。
⑥child_window(title="Hello,World!", class_name="編集"):

これは、スクリプトで操作できるようにコントロールのタイトルとクラス名を指定するエディット ボックス コントロールのプロパティです。
⑦ステータスバー - '' (L157、T894、R1657、B916):

StatusBar はステータス バー コントロールを表します。
'' は、現在ステータス バーにテキストが表示されていないことを示します。
(L157、T894、R1657、B916) はステータスバーの座標位置を示します。
⑧['ステータスバー Windows (CRLF)'、'ステータスバー 100%'、'ステータスバー行 1、列 13'、'ステータスバー UTF-8'、'ステータスバー'、'*無題メモ帳ステータスバー']:

これはステータス バーのエイリアスであり、スクリプトで参照できます。
ステータス バーに表示される可能性のあるテキスト コンテンツがリストされているため、テキスト コンテンツの 1 つに基づいてステータス バーを操作できます。
⑨child_window(class_name="msctls_statusbar32"):

これは、スクリプトで操作できるようにコントロールのクラス名を指定するステータス バー コントロールのプロパティです。


つまり、コントロール識別子を分析することで、ウィンドウ内のさまざまなコントロールを識別し、そのプロパティを理解し、テキストの入力やボタンのクリックなどの対応する操作を実行するために自動化スクリプト内でコントロールを参照する方法を理解できます。

(4) print_control_identifiers()の役割

pywinauto は、この関数を通じてインターフェイス関連の属性を提供します。これは、これらの属性が pywinauto 認識の範囲内にあることも意味します。これは、操作インターフェイスに優れたサポートを提供し、この関数は、将来、操作インターフェイスを識別するためによく使用されます。

(5) 印刷ロゴを使用する

①なぜダイアログ = app.Notepad を使用してオブジェクトを作成できるのですか?

この問題を検討する前に、この問題を作成する他の方法を見てみましょう。

pywinauto のフラグ「Notepad - '*Untitled-Notepad' (L93, T179, R1609, B936)」については、ウィンドウのタイトルまたはクラス名がわかっている場合は、この情報を使用してウィンドウ オブジェクトを参照できます。たとえば、ウィンドウのタイトルが「*Untitled - Notepad」の場合、次のようにウィンドウ オブジェクトを参照できます。

dialog = app.window(title="*无标题 - 记事本")

ここで注意していただきたいのは、上記の例では、テキストを書いた後に「print_control_identifiers()」を引用したため、タイトルが「*Untitled-Notepad」になりましたが、前のタイトルは「Untitled-Notepad」「This」でした。タイトルは変更される場合がありますが、変更前の引用方法は以下の通りです。

dialog = app.window(title="无标题 - 记事本")

あるいは、ウィンドウのクラス名が「Notepad」であることがわかっている場合は、次のようにウィンドウ オブジェクトを参照できます。

dialog = app.window(class_name="Notepad")

呼び出しを容易にするために、pywinauto 開発者は、メソッドを呼び出すことによってオブジェクトが直接呼び出されるように設計しました。のように:

dialog = app.Notepad

②edit.type_keys("Hello, World!")メソッドの使い方は?

edit.type_keys("Hello, World!") は、pywinauto でキーボード入力をシミュレートするために使用されるメソッドです。これは、指定したテキスト文字列をエディット ボックス コントロール (通常はテキスト ボックスまたはテキスト エディター) に送信し、ユーザーのキーボードからのテキスト入力をシミュレートするために使用されます。

このメソッドのパラメータは、編集ボックスに入力するテキストを表す文字列です。あなたの例では、「Hello, World!」です。

type_keys メソッドの説明と使用例を次に示します。

# 基本用法:这将在 edit 对象表示的编辑框中模拟键盘输入字符串 "Hello, World!"。
edit.type_keys("Hello, World!")

# 特殊键的处理:可以使用大括号 {} 来表示特殊键,如回车、Tab 等。例如,如果你想在文本中输入回车键
edit.type_keys("Hello, World!{ENTER}")

# 控制输入速度:可以使用 set_timings() 方法来控制键盘输入的速度。例如,如果你想让输入速度慢一点
edit.set_timings(type_delay=0.1)  # 设置输入延迟为0.1秒
edit.type_keys("Hello, World!")

# 模拟组合键:可以模拟组合键,例如 Ctrl+C、Ctrl+V 等。使用 ^ 表示 Ctrl 键,+ 表示 Shift 键,% 表示 Alt 键
edit.type_keys("^a")  # 模拟按下Ctrl+A全选文本



③edit.type_keys("Hello, World!")以外のメソッドはありますか?

はい、それについては後ほど説明します。アプリケーションを開く方法である Application().start("notepad.exe") を含む各メソッドについて簡単に説明します。これには多くの種類がありますが、これだけではありませんたとえば、開く方法でアプリケーションに直接接続することもできます。

Guess you like

Origin blog.csdn.net/weixin_43431593/article/details/132853458