Selenium Webdriver ページの読み込み時間の計測
何をやったのか
Selenium Webdriverを用いたテストにおいて、ページの読み込み時間の近似値を取得して、読み込みの遅いページを発見した
実装方法
SeleniumのexecuteScript
を利用して、ページのwindowオブジェクトに直接アクセスして読み込み時間を取得した。windowオグジェクトは、Performanceに関するAPIを持っていて詳しくは以下を参照。
実装コード
事前準備
- selenium webdriverは事前にnpm installする。
- Chrome driverも以下のtestファイルと同じ階層に配置する。
テストコード
var webdriver = require("selenium-webdriver");
var caps = webdriver.Capabilities.chrome();
// driver定義
var driver;
driver = new webdriver.Builder()
.withCapabilities(caps)
.build();
// ここのurlを変えることで任意のurlについて調べることが可能になります
driver.get("check_page_url");
driver.executeScript(
"return (window.performance.timing.loadEventEnd - window.performance.timing.requestStart) / 1000")
.then(function(sec_loading_time){
// Load時間の出力
console.log(sec_loading_time);
});
driver.quit();
補足
var webdriver = require("selenium-webdriver");
var caps = webdriver.Capabilities.chrome();
// driver定義
var driver;
driver = new webdriver.Builder()
.withCapabilities(caps)
.build();
// ここのurlを変えることで任意のurlについて調べることが可能になります
driver.get("check_page_url");
driver.executeScript(
"return (window.performance.timing.loadEventEnd - window.performance.timing.requestStart) / 1000")
.then(function(sec_loading_time){
// Load時間の出力
console.log(sec_loading_time);
});
driver.quit();
Selenium Webdriverで、DeveloperToolsのNetworkタブの情報を取得する方法もありそうです。これによって、リクエスト1つごとの速度とかも測ることができ、重いリクエストの特定などが可能になりそうです。
var webdriver = require("selenium-webdriver");
var logging = require("selenium-webdriver/lib/logging");
// caps設定
var prefs = new logging.Preferences();
prefs.setLevel('performance', webdriver.logging.Level.ALL);
var caps = webdriver.Capabilities.chrome();
caps.setLoggingPrefs(prefs);
// driver定義
var driver;
driver = new webdriver.Builder()
.withCapabilities(caps)
.build();
// ここのurlを変えることで任意のurlについて調べることが可能になります
driver.get("check_page_url");
driver.manage().logs().get('performance').then(function(logs){
logs.forEach(element => {
// Network関連のログの取得(文字列なので注意)
var log_mes = JSON.parse(element.message);
if (log_mes.message.method.indexOf('Network') > -1) {
console.log(log_mes);
}
});
});
driver.quit();
取得できたログ
各Requestには、requestIdと呼ばれる一意のIDが振られている。これによって各Requestのtimestampから、処理にかかる時間を見積もるなんてこともできそう。
{ message:
{ method: 'Network.dataReceived',
params:
{ dataLength: 11624,
encodedDataLength: 73600,
requestId: '25615.55',
timestamp: 45252.465644 } },
webview: '(C254FEF3B9BC13D2D800ABDE6CC0FE15)' }
{ message:
{ method: 'Network.loadingFinished',
params:
{ encodedDataLength: 77696,
requestId: '25615.55',
timestamp: 45252.465246 } },
webview: '(C254FEF3B9BC13D2D800ABDE6CC0FE15)' }
{ message:
{ method: 'Network.responseReceived',
params:
{ frameId: '(C254FEF3B9BC13D2D800ABDE6CC0FE15)',
loaderId: '25615.1',
requestId: '25615.67',
response: [Object],
timestamp: 45252.547032,
type: 'Image' } },
webview: '(C254FEF3B9BC13D2D800ABDE6CC0FE15)' }
参考
Chrome Driver
Navigation Timing APIの仕様
Module selenium-webdriver/lib/logging
Logging in WebDriver
Author And Source
この問題について(Selenium Webdriver ページの読み込み時間の計測), 我々は、より多くの情報をここで見つけました https://qiita.com/nd-02110114/items/0a078973494f19a0b27f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .