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();