Playwrightを使ったHTML要素の操作

テキストボックスに文字を入力したりボタンをクリックするなど、HTML要素を操作する方法について説明します。
HTML要素を「指定」する方法については要素の指定を参照してください。

目次

クリック

ボタン/ラジオボタン/チェックボックス/リンク等をクリックする方法です。

実装方法

locatorで要素を特定してclick()メソッドを実行します。

サンプル

						await page.goto('https://web.biz-prog.net/test/testpage.html');

						//ボタンのクリック
						//buttonに「ボタン1」と表示されているlocatorを取得し、クリックする。
						await page.getByRole("button", { name: "ボタン1" }).click();
					  
						//リンクのクリック
						//「リンク1」のテキストがあるlocatorを取得し、クリックする。
						await page.getByText("リンク1").click();
					  
						//チェックボックスのクリック
						//「チェック」のテキストと一致するlocatorを取得し、クリックする。
						await page.getByText("チェック", { exact: true }).click();
					  
						//ラジオボタンのクリック
						//値が「value2」のinputタグと一致するlocatorを取得し、クリックする。
						await page.locator("input[value='value2']").click();
					

					

						
					

色々なクリック方法

click()以外にも色々なクリック方法があります。

							// ダブルクリック
							await page.getByText('xxxx').dblclick();
							
							// 右クリック
							await page.getByText('xxxx').click({ button: 'right' });
							
							// シフト+クリック
							await page.getByText('xxxx').click({ modifiers: ['Shift'] });
							
							// 要素の上にカーソルを合わせる
							await page.getByText('xxxx').hover();
							
							// 要素の左上からの座標指定してクリック
							await page.getByText('xxxx').click({ position: { x: 0, y: 0} });
						

参考

Mouse click

チェック/チェック状態の取得

チェックボックス/ラジオボタンにチェックをつける方法です。

実装方法

locatorで要素を特定してcheck()メソッドを実行します。
チェックをOFFにするにはuncheck()メソッドを実行します。
チェックされているか状態を取得するにはisChecked()メソッドを実行します。

サンプル

						await page.goto('https://web.biz-prog.net/test/testpage.html');

						//チェックボックスのチェック
						//「チェック」のテキストと一致するlocatorを取得し、チェックする。
						await page.getByText("チェック", { exact: true }).check();
					  
						//ラジオボタンのチェック
						//値が「value2」のinputタグと一致するlocatorを取得し、チェックする。
						await page.locator("input[value='value2']").check();
					  
						//チェックボックスのチェック状態をOFF
						await page.getByText("チェック", { exact: true }).uncheck();

						//ラジオボタンのチェック状態を取得
						console.log(await page.locator("input[value='value2']").isChecked())
					

					

						
					

参考

Checkboxes and radio buttons

オプション選択/選択内容の取得

セレクトボックスのオプションを選択する方法です。

実装方法

locatorで要素を特定してselectOption()メソッドを実行します。
オプションの値を指定して選択する場合はselectOption("xxx").selectOption("値")
オプションのラベルを指定して選択する場合はselectOption("xxx").selectOption("ラベル名")とします。
複数選択できるセレクトボックスの場合はselectOption(["値1", "値2", "値3"])のように配列で指定します。

値の取得を行う方法はありませんが、JavaScriptのコードを実行して取得することができます。

サンプル

						await page.goto('https://web.biz-prog.net/test/testpage.html');

						// 指定した値のオプションを選択
						await page.locator("[name='selectname'][multiple]").selectOption('value_m1');
						
						// 指定したラベルのオプションを選択
						await page.locator("[name='selectname'][multiple]").selectOption({ label: '値_m2' });
						
						// 複数のオプションを選択
						await page.locator("[name='selectname'][multiple]").selectOption(['value_m1', 'value_m2', 'value_m3']);

						// オプションの値を取得。JavaSciptを使う
						await page.locator("[id='selectbox1']").selectOption('value2');
						const selectedOption = await page.locator("[id='selectbox1']")
						.evaluate((node) => {
							return node.options[node.selectedIndex].value;
						});
						console.log(selectedOption);
					  
						// 複数選択時のオプションの値を取得。JavaScriptを使う
						const selectedOptions = await page.locator("[id='selectbox2']")
						  .evaluate((node) => {
							  const selectedValues = [];
							  for (const option of node.options) {
								  if (option.selected) {
									  selectedValues.push(option.value);
								  }
							  }
							  return selectedValues;
						  });
						console.log(selectedOptions);
					

					

						
					

参考

テキスト入力/入力内容の取得

テキストボックスやパスワード欄に文字を入力する方法です。

実装方法

locatorで要素を特定してfill()メソッドに入力したいテキストを入れます。
inputValue()で入力テキストの内容が取得できます。

サンプル

						await page.goto('https://web.biz-prog.net/test/testpage.html');

						//テキスト欄にテキスト入力
						//テキストボックスのaria-label属性に"area-input1"が設定されているlocatorを取得し、「test」を入力する。
						await page.getByRole("textbox", { name: "area-input1" }).fill("test");

						//テキストボックスの値を取得
						console.log(await page.getByRole("textbox", { name: "area-input1" }).inputValue())
					

					

						
					

キーボード入力

キーボードで入力したように1文字ずつ入力したい場合はtype()を使います。

							await page.getByRole("textbox", { name: "area-input1" }).type("test");
						

参考

属性の参照・設定

要素の属性の値を参照・設定する方法です。

実装方法

locatorで要素を特定してgetAttribute("属性名")メソッドに取得したい属性の名称を指定します。
属性に値を設定するメソッドはありませんので、代わりにJavaScriptのコードを使って行います。

サンプル

						await page.goto('https://web.biz-prog.net/test/testpage.html');

						//info属性の値を表示
						console.log(await page.locator("#styleid1").getAttribute("info"));
						
						//文字のスタイル内容を設定
						await page.evaluate(()=>{
						  document.getElementById("styleid1").setAttribute('info','newinfo');
						});
						console.log(await page.locator("#styleid1").getAttribute("info"));
					

					

						
					

キー入力/ショートカットキー入力

キーボードのキーを押すのと同じ動作をする方法です。

実装方法

locatorで要素を特定してpress("キー種類")メソッドに押下したいキーの種類を文字で指定します。

1文字をキー入力する場合は、そのキーの文字を指定します。
この時、大文字と小文字は区別されます。

await page.getByRole("textbox", { name: "area-input1" }).press("a"); //テキストボックスに「a」が入力される。
await page.getByRole("textbox", { name: "area-input2" }).press("A"); //テキストボックスに「A」が入力される。
await page.getByRole("textbox", { name: "area-input3" }).press("#"); //テキストボックスに「#」が入力される。

特殊なキーを入力したい場合は、その名称を指定します。
複数キーを同時に押す場合は「+」で連結します。

await page.getByRole("textbox", { name: "area-input1" }).press("Control+a"); //全て選択する
await page.getByRole("textbox", { name: "area-input1" }).press("Control+c"); //コピーする
await page.getByRole("textbox", { name: "area-input2" }).press("Control+v"); //貼り付ける

指定できるキー文字には以下のようなものがあります。

Backquote, Minus, Equal, Backslash, Backspace, Tab, Delete, Escape,
ArrowDown, End, Enter, Home, Insert, PageDown, PageUp, ArrowRight,
ArrowUp, F1 - F12, Digit0 - Digit9, KeyA - KeyZ, etc.

サンプル

参考

ファイルアップロード

アップロードするファイルを選択する方法です。

実装方法

locator.setInputFiles()メソッドにアップロードしたファイルの名称を指定します。

サンプル

						await page.goto('https://web.biz-prog.net/test/testpage.html');

						//アップロード欄にファイルを設定します。
						//※存在しないファイルを指定した場合は例外が発生します。
						await page.locator("input[name='filename']").setInputFiles("code\\upload.js");
					  
						//複数のファイルを選択
						await page.locator("input[name='filename_m']").setInputFiles(["sample.js", "code\\upload.js"]);
					  
						//選択したファイルをすべてクリア
						await page.locator("input[name='filename_m']").setInputFiles([]);
					  
						//メモリのデータをアップロード
						await page.locator("input[name='filename']").setInputFiles({
						  name: 'file.txt',
						  mimeType: 'text/plain',
						  buffer: Buffer.from('this is test')
						});
					

					

						
					

参考

フォーカス

指定した要素にフォーカスする方法です。

実装方法

locator.focus()メソッドで指定した要素にフォーカスします。

サンプル

						await page.getByRole("textbox", { name: "area-input1" }).focus();
					

					

						
					

参考

ドラッグ&ドロップ

指定した要素をドラッグして、別の要素にドロップします。

実装方法

page.locator('ドラッグする要素').dragTo(page.locator('ドロップ先の要素'))として指定します。

サンプル

手動のドラッグアンドドロップ

手動操作に近い形でドラッグアンドドロップする場合は、以下のように各APIを呼び出します。

await page.locator('ドラッグする要素').hover();
await page.mouse.down();
await page.locator('ドロップ先の要素').hover();
await page.mouse.up();

参考