このサンプルは、「WebDriver APIを直接使用するテストシナリオ」と同じ処理を、WebDriver APIをラップするCommanderクラスを利用して記述したものです。
直接WebDriver APIを使用する場合に比べ、記述量が少なくなるだけではなく、HTMLエレメントの参照を保存する変数が不要になり1操作が1行で表現されるため全体の見通しが良くなっています。
const {Commander} = require("./commander.js"); const {Builder,Capabilities,Key} = require("selenium-webdriver"); (async function doTest() { const validImg = let driver = null; try { console.log("capabilitiesの設定"); const capabilities = new Capabilities() .set("scriptFilter",["\\.html"]) .setBrowserName("safari+G.O"); console.log("WebDriverへ接続"); driver = new Builder() .usingServer("http://192.168.1.147:7000/wd/hub") .withCapabilities(capabilities) .build(); const cmd = new Commander(driver); console.log("テスト対象アプリのindex.htmlをロード"); await cmd.get( "http://dev.tobesoft.co.jp/GHOST_Operator/demo/index.html"); // 「トップメニュー」のクリックによるalert表示 console.log("「トップメニュー」の表示を待ちクリック"); await cmd.mouseClick( "</html/body/div[1]/header/div/h1", null,3000); console.log("Alertを待機"); await cmd.waitAlert(1000); console.log("Alertを閉じる"); await cmd.dismissAlert(); // JavaScriptによる値の取得 console.log("appData変数の値を取得"); const ret = await cmd.executeScript('return appData;'); if(ret !== "hello") { throw new Error( "appData is not true. appData="+appData); } // アコーディオンメニューの選択 console.log("「問合せボタン」をクリック"); await cmd.mouseClick("</html/body/ul/li[4]/div"); console.log("「ユーザ登録」の表示を待つ"); await cmd.waitVisible("#userreg", 3000); console.log("「ユーザ登録」の表示OK"); // スクリーンキャプチャによるメニュー表示テスト console.log( "スクリーンキャプチャのために「ユーザ登録」の安定を待つ"); await cmd.delay(700); console.log("スクリーンキャプチャによるメニュー表示テスト"); await cmd.takeScreenshot({ compare:validImg, saveOnError:"images/snapshot.png"}); console.log("「ユーザ登録」をクリック"); await cmd.mouseClick("#userreg"); console.log("ページ遷移を待つ"); await cmd.waitURL(/^http.*\/demo\/reg\.html$/,1000); console.log("マウス座標をリセット"); await cmd.resetMousePosition(); console.log("「お名前」入力欄の表示をクリック"); await cmd.mouseClick("#name1"); await cmd.delay(100); console.log("「お名前」の入力"); await cmd.sendKeys(null, ["[HanjaMode On]yamada",Key.SPACE,Key.RETURN," "]); await cmd.sendKeys(null, ["tarou",Key.SPACE,Key.RETURN,"[HanjaMode Off]"]); await cmd.sendKeys(null,Key.TAB); console.log("「メールアドレス」の入力"); await cmd.sendKeys(null, ["Tarou.Yamada@nexaweb.com",Key.COMMAND,"ac"]); await cmd.sendKeys(null,Key.TAB); console.log("「メールアドレス(確認用)」の入力"); await cmd.sendKeys(null,[Key.COMMAND, "v"]); await cmd.sendKeys(null,Key.TAB); console.log("「電話番号」の入力"); await cmd.sendKeys(null,"080-4321-8765"); console.log("「男性」を選択"); await cmd.mouseClick( "</html/body/div[2]/form/div/div[5]/div/label[1]/input"); console.log("「職業」をクリック"); await cmd.mouseClick("#job"); console.log("「職業」のセレクタ表示を待つ"); await cmd.delay(500); console.log("「Webデザイナ」を選択"); await cmd.mouseClick("#job",{x:250,y:-250}); console.log("「デザインについて」を選択"); await cmd.mouseClick( "</html/body/div[2]/form/div/div[7]/div[1]/label/input"); console.log("「マーケティングについて」を選択"); await cmd.mouseClick( "</html/body/div[2]/form/div/div[7]/div[3]/label/input"); console.log("「送信する」をクリック"); await cmd.mouseClick( "</html/body/div[2]/form/div/button"); console.log("ページ遷移を待つ"); await cmd.waitURL(/^http.*\/demo\/result\.html\?.*$/,3000); console.log("ページ遷移完了"); console.log("テスト正常終了"); } catch (e) { console.log(e); } finally { if(driver !== null) await driver.quit(); } })();※ このサンプルの関連ファイルSeleniumSamples.zipのsec7_wrappedAPIに収められています。