##はじめに
前回の記事でselenium準備編を書いたので、ブラウザを動かすコードを書いていきます!
##実装
以下実装したコードになります。
e-typing.js
const {Builder, By, Key, until} = require('selenium-webdriver');
const tesseract = require('tesseract.js');
let fs = require('fs');
async function example() {
// Chrome / Chromiumセッションをインスタンス化
let driver = await new Builder().forBrowser('chrome').build();
// e-typingのWebサイトを開く
await driver.get('https://www.e-typing.ne.jp/roma/check/');
// e-typingサイトの「今すぐチェック」というボタン要素をidから取得してclickする
await driver.findElement(By.id('level_check_btn')).click();
// 表示に時間がかかる為、5秒スリープさせる
await driver.sleep(5000);
//iframeが表示される為、iframeの要素をidから取得
const iframe = await driver.findElement(By.id('typing_content'));
//取得したiframeの要素をへ移動する (これがないとiframe内の要素にアクセスできない)
await driver.switchTo().frame(iframe);
// 「スタート」ボタン要素をidから取得して、クリック
await driver.findElement(By.css('#start_btn')).click();
// 表示に時間がかかる為、3秒間スリープさせる
await driver.sleep(3000);
// スペースキーをクリックするとゲームが開始される為、スペースキーをクリック
await driver.actions().keyDown(Key.SPACE).perform();
// 表示に時間がかかる為、3秒間スリープさせる
await driver.sleep(3000);
while (true) {
try {
// 画面に表示されている英字を取得する
const sentenceText = await driver.findElement(By.id('sentenceText')).getText();
// 取得した文字を一文字づつループさせる
for (i = 0; i < sentenceText.length; i++) {
word = sentenceText[i].toLowerCase();
// 取得した文字のキーを押す
await driver.actions().keyDown(word).perform();
// キーを打つ速度を遅くする処理 (無くても動く)
await driver.sleep(50);
}
} catch (error) {
// 「sentenceText」というidを持った要素が取得できない場合エラーが発生して、処理終了
console.log(error);
return;
}
}
};
example();
nodeで動きます!
$ node e-typing.js
##まとめ
コードを書いて自動化するのは、すごく好奇心をくすぐられる。もっと色々と自動化できるもの探して行くつもりです!
実務の中でテストに利用して、テストの時間を短縮できたらめちゃ便利だなと思いました
※動画を載せれたら載せます。