前に書く
Playwright for Python: インストールと初期使用
Playwright は、テキスト入力ボックス、チェックボックス、ラジオ ボタン、ドロップダウン オプションなどの HTML 入力要素を操作できます。マウスのクリック、文字の入力、キーストローク、ショートカットをシミュレートできるだけでなく、ファイルをアップロードして要素にフォーカスを設定することもできます。
注: この記事では同期方式についてのみ説明し、非同期方式については説明しません。
from playwright.sync_api import sync_playwright
1.テキスト入力テキスト入力
を使用するのが、locator.fill()
フォームフィールドに入力する最も簡単な方法です。要素にフォーカスを設定し、入力テキストを含む入力イベントを起動します。<input>
、<textarea>
および要素で動作します[contenteditable]
。
# 文本输入框
page.get_by_role("textbox").fill("Peter")
# 日期输入框
page.get_by_label("Birth date").fill("2020-02-02")
# 时间输入框
page.get_by_label("Appointment time").fill("13:15")
# 当地时间输入框
page.get_by_label("Local time").fill("2020-03-02T05:15")
2. チェックボックスとラジオボタン
を使用するのがlocator.set_checked()
、チェックボックスまたはラジオ ボタンを選択または選択解除する最も簡単な方法です。このメソッドはinput[type=checkbox]
、input[type=radio]
および[role=checkbox]
要素で使用できます。
# 勾选checkbox
page.get_by_label('I agree to the terms above').check()
# 断言checkbox被选中了
assert page.get_by_label('Subscribe to newsletter').is_checked() is True
# 选中单选框
page.get_by_label('XL').check()
3. ドロップダウン選択ボックス オプションを選択します
要素内の 1 つ以上のオプションを選択するために使用しますlocator.select_option()
。<select>
オプションの値またはラベルを指定することで選択できます。複数のオプションを同時に選択できます。
# 单选,选中value
page.get_by_label('Choose a color').select_option('blue')
# 单选,选中label
page.get_by_label('Choose a color').select_option(label='Blue')
# 多选
page.get_by_label('Choose multiple colors').select_option(['red', 'green', 'blue'])
4. マウスクリックマウスクリック
# 通用点击
page.get_by_role("button").click()
# 双击
page.get_by_text("Item").dblclick()
# 右击
page.get_by_text("Item").click(button="right")
# Shift + click
page.get_by_text("Item").click(modifiers=["Shift"])
# 鼠标悬浮在元素上
page.get_by_text("Item").hover()
# 点击左上角
page.get_by_text("Item").click(position={
"x": 0, "y": 0})
# 强制点击
page.get_by_role("button").click(force=True)
# Programmatic click
page.get_by_role("button").dispatch_event('click')
5. 文字を入力する 文字を入力する
ほとんどの場合、locator.fill()
テキストを入力するにはメソッドを使用する必要があります。上記のテキスト入力セクションを参照してください。文字の手動入力は、ページに特別なキーボード処理が存在する場合にのみ必要です。
# 通过class定位,输入Hello World!
page.locator('#area').type('Hello World!')
7. キーとショートカット
# 点击 Enter
page.get_by_text("Submit").press("Enter")
# 发送 Control+Right组合键
page.get_by_role("textbox").press("Control+ArrowRight")
# 键盘按 “$”符号
page.get_by_role("textbox").press("$")
locator.press()
このメソッドは、選択した要素にフォーカスを置き、単一のキーストロークを生成します。keyboardEvent.key
キーボード イベントのプロパティで出力された論理キー名を受け入れます。
Backquote, Minus, Equal, Backslash, Backspace, Tab, Delete, Escape,
ArrowDown, End, Enter, Home, Insert, PageDown, PageUp, ArrowRight,
ArrowUp, F1 - F12, Digit0 - Digit9, KeyA - KeyZ, etc.
- 「a」や「#」などの 1 文字を指定して、対応するキー入力を生成することもできます。
- 次の修飾キー ショートカットもサポートされています: Shift、Control、Alt、Meta。
- 小文字の「a」と大文字の「A」は異なる演算です。
# <input id=name>
page.locator('#name').press('Shift+A')
# <input id=name>
page.locator('#name').press('Shift+ArrowLeft')
-
「Control+o」や「Control+Shift+T」などのショートカットもサポートされています。修飾キーを使用する場合は、修飾キーを押したままにし、次のキーを押したときにも機能します。
-
大文字の A が必要な場合でも、Shift+A を指定する必要があることに注意してください。Shift-a を押すと、CapsLock がオンになっているかのように小文字が生成されます。
8. ファイルをアップロードする ファイルをアップロードする
locator.set_input_files() メソッドを使用して、アップロードする入力ファイルを選択できます。その最初のパラメータは、「file」の「type」属性を持つ入力要素を指す必要があります。複数のファイルを配列で渡すことができます。一部のファイル パスが相対パスである場合、それらは現在の作業ディレクトリを基準にして解決されます。空の配列が渡された場合、選択されたファイルはクリアされます。
# 上传单个文件
page.get_by_label("Upload file").set_input_files('myfile.pdf')
# 上传多个文件
page.get_by_label("Upload files").set_input_files(['file1.txt', 'file2.txt'])
# 移除所有的文件
page.get_by_label("Upload file").set_input_files([])
# 从内存上传缓存区
page.get_by_label("Upload file").set_input_files(
files=[
{
"name": "test.txt", "mimeType": "text/plain", "buffer": b"this is a test"}
],
)
input 要素を手動で取得しない場合 (動的に作成されるため)、page.on("filechooser") イベントを処理するか、対応する wait メソッドを使用することで取得できます。
with page.expect_file_chooser() as fc_info:
page.get_by_label("Upload file").click()
file_chooser = fc_info.value
file_chooser.set_files("myfile.pdf")
9. フォーカス要素
locator.focus()
フォーカス イベントを処理する動的ページの場合、関数を使用して特定の要素にフォーカスを当てることができます。
page.get_by_label('password').focus()
10. ドラッグアンドドロップ
locator.drag_to() メソッドを使用して、ドラッグ アンド ドロップ操作を実行できます。このメソッドは次のことを行います。
- ドラッグする要素の上にマウスを置きます。
- マウスの左ボタンを押します。
- ドラッグ アンド ドロップを受け取る要素の上にマウスを移動します。
- マウスの左ボタンを放します。
page.locator("#item-to-be-dragged").drag_to(page.locator("#item-to-drop-at"))
locator.hover()
ドラッグを正確に制御したい場合は、 、mouse.down()
、mouse.move()
などの下位レベルのメソッドを使用できますmouse.up()
。
page.locator("#item-to-be-dragged").hover()
page.mouse.down()
page.locator("#item-to-drop-at").hover()
page.mouse.up()
注: ページがドラッグオーバー イベントのトリガーに依存している場合、すべてのブラウザーでイベントをトリガーするには、少なくとも 2 回マウスを動かす必要があります。2 回目のマウス移動を確実に実行するには、mouse.move() または locator.hover() を 2 回繰り返す必要があります。操作の順序は次のとおりです。ドラッグされた要素の上にカーソルを置き、マウスを押し、ドロップされた要素の上にカーソルを置き、ドロップされた要素に再度カーソルを置き、マウスを放します。