Selenium+Node.js
参照すべき公式情報
- Selenium (上部メニューから日本語が選択できる!)
- selenium-webdriver
- selenium-webdriver - npm
ライブラリのインストール
Seleniumライブラリのインストール | Selenium
$ npm init $ npm install selenium-webdriver
ドライバーのインストール
ブラウザーのドライバーをインストールする | Selenium
クイックリファレンスの表からChromeのドライバーのダウンロードサイトへ遷移する。 使用しているChromeのバージョンが「バージョン: 107.0.5304.87(Official Build) (64 ビット)」なので、「If you are using Chrome version 107, please download ChromeDriver 107.0.5304.62」のリンクからchromedriver_linux64.zipをダウンロード、展開して、chromedriverファイルを得る。
PATHに設定する必要があるのだけど、どこに置くのがいいのだろう? .bashrcの設定しなくても使えるように /usr/local/binにでも置いておこうか。 chromedriverが起動すればOK。
$ sudo cp ~/Downloads/chromedriver_linux64/chromedriver /usr/local/bin/ $ ls -l /usr/local/bin/chromedriver -rwxr-xr-x 1 root root 14454968 11月 3 17:59 /usr/local/bin/chromedriver $ chromedriver Starting ChromeDriver 107.0.5304.62 (1eec40d3a5764881c92085aaee66d25075c159aa-refs/branch-heads/5304@{#942}) on port 9515 Only local connections are allowed. Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe. ChromeDriver was started successfully. (Ctrl+C)
ブラウザの起動
browser_launch.js
を作成。
const {Builder} = require('selenium-webdriver'); const driver = new Builder().forBrowser('chrome').build();
$ node browser_launch.js
非推奨ながら、chromedriverのパスを指定して起動する方法。browser_launch2.js
を作成。4行目のパスはchromedriverを置いた場所を指定。
const {Builder} = require('selenium-webdriver'); const chrome = require('selenium-webdriver/chrome'); const service = new chrome.ServiceBuilder('/usr/local/bin/chromedriver'); const driver = new Builder().forBrowser('chrome').setChromeService(service).build();
$ node browser_launch2.js
※ここ修正する
冒頭は以下のように修正可能
(async () => {
最初のSeleniumスクリプトfirstScript.spec.js
を書く
最初のSeleniumスクリプトを書く | Selenium
const { By, Builder } = require('selenium-webdriver'); const { suite } = require('selenium-webdriver/testing'); const assert = require("assert"); suite(function(env) { describe('First script', function() { let driver; before(async function() { driver = await new Builder().forBrowser('chrome').build(); }); after(async () => await driver.quit()); it('First Selenium script', async function() { await driver.get('https://www.selenium.dev/selenium/web/web-form.html'); let title = await driver.getTitle(); assert.equal("Web form", title); await driver.manage().setTimeouts({ implicit: 500 }); let textBox = await driver.findElement(By.name('my-text')); let submitButton = await driver.findElement(By.css('button')); await textBox.sendKeys('Selenium'); await submitButton.click(); let message = await driver.findElement(By.id('message')); let value = await message.getText(); assert.equal("Received!", value); }); }); });
テストフレームワークmochaをインストールして実行。
$ npm install mocha $ node firstScript.spec.js
実行はエラーになる。 下記を参考に実行。
javascript - after function on selenium test is not defined - Stack Overflow
$ npx mocha --no-timeouts firstScript.spec.js [INFO] Searching for WebDriver executables installed on the current system... [INFO] ... located chrome [INFO] ... located firefox [INFO] Running tests against [chrome, firefox] [chrome] First script ✔ First Selenium script (1317ms) [firefox] First script ✔ First Selenium script (1025ms) 2 passing (4s)
これはどこから辿ったのだっけ?こちらも参考になりそう。
この記事では、Selenium/WebDriver や selenium-webdriver for Node のようなテストライブラリーを使って、自動化環境のインストールとテストを実行する方法を教えます。
google_test.js
const webdriver = require('selenium-webdriver'); const By = webdriver.By; const until = webdriver.until; const driver = new webdriver.Builder() .forBrowser('chrome') .build(); driver.get('http://www.google.com'); driver.findElement(By.name('q')).sendKeys('webdriver'); driver.sleep(1000).then(() => { driver.findElement(By.name('q')).sendKeys(webdriver.Key.TAB); }); driver.findElement(By.name('btnK')).click(); driver.sleep(2000).then(() => { driver.getTitle().then((title) => { if (title === 'webdriver - Google Search') { console.log('Test passed'); } else { console.log('Test failed'); } driver.quit(); }); });
ローカルファイルを開くとき
driver.get('file:///Users/chrismills/git/learning-area/tools-testing/cross-browser-testing/accessibility/fake-div-buttons.html');
ロギング
selenium-webdriver/lib/logging.Logger
selenium/logging_test.js at trunk · SeleniumHQ/selenium · GitHub
Logging - ChromeDriver - WebDriver for Chrome
selenium-webdriver/lib/logging
パフォーマンステストに使いたいというのが1つの目的だったが、お勧めしません?
通常、SeleniumとWebDriverを使用したパフォーマンステストはお勧めしません。
Selenium Webdriver ページの読み込み時間の計測 - Qiita
SeleniumのexecuteScriptを利用して、ページのwindowオブジェクトに直接アクセスして読み込み時間を取得した。windowオグジェクトは、Performanceに関するAPIを持っていて詳しくは以下を参照。
BiDirectional APIには、Performanceに関するドキュメントがなかったので、Chrome DevTools Protocolを使って
Chrome DevTools Protocol | Selenium
こんなサイトも
これは大注目(あとで読む)
ChromeDriver - WebDriver for Chrome - Performance Log
検証用にログを出力。キーワード「webdriver.logging」?