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} });
参考
チェック/チェック状態の取得
チェックボックス/ラジオボタンにチェックをつける方法です。
実装方法
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())
参考
オプション選択/選択内容の取得
セレクトボックスのオプションを選択する方法です。
実装方法
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-input2" }).press("A"); //テキストボックスに「A」が入力される。
await page.getByRole("textbox", { name: "area-input3" }).press("#"); //テキストボックスに「#」が入力される。
特殊なキーを入力したい場合は、その名称を指定します。
複数キーを同時に押す場合は「+」で連結します。
await page.getByRole("textbox", { name: "area-input1" }).press("Control+c"); //コピーする
await page.getByRole("textbox", { name: "area-input2" }).press("Control+v"); //貼り付ける
指定できるキー文字には以下のようなものがあります。
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()メソッドで指定した要素にフォーカスします。
サンプル
参考
ドラッグ&ドロップ
指定した要素をドラッグして、別の要素にドロップします。
実装方法
page.locator('ドラッグする要素').dragTo(page.locator('ドロップ先の要素'))として指定します。
サンプル
手動のドラッグアンドドロップ
手動操作に近い形でドラッグアンドドロップする場合は、以下のように各APIを呼び出します。
await page.mouse.down();
await page.locator('ドロップ先の要素').hover();
await page.mouse.up();
