为什么需要这个
网页开发中,页面修改后总是需要在浏览器中测试是否有js、css、图片等资源加载错误,在页面少的时候还可以人工一个一个测试,页面多了以后就很烦躁很无聊了。
预计达到的效果
使用数组格式给出要测试的所有页面地址,通过selenium自动测试并输出错误日志。
操作步骤
一、安装selenuim-webdriver
npm install --save-dev selenium-webdriver
// 或
yarn add --dev selenium-webdriver
二、添加测试脚本test.js
const { Builder, By, Key, until, logging } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
const fs = require('fs');
// 测试页面地址
const testPages = [
'http://www.baidu.com',
'http://www.google.com',
];
// 记录错误页面
let badPages = [];
(async function example() {
let driver;
for (let i = 0; i < testPages.length; i += 1) {
// PC端
let options = new chrome.Options().addArguments('start-maximized');
// 手机网页端
// let options = new chrome.Options().setMobileEmulation(
{deviceName: 'iPhone 6/7/8'});
driver = chrome.Driver.createSession(options);
try {
var testUrl = testPages[i];
var pass = true;
var error = [];
await driver.get(testUrl);
// 等待1s
await driver.sleep(1000);
// 获取首屏截图
await driver.takeScreenshot().then(
function(image) {
fs.writeFileSync('screenshot/' + encodeURIComponent(testUrl) + '.png', image, 'base64', function(err) {
err && console.log(err);
});
}
);
// 页面滚动到底部
await driver.executeScript('window.scrollTo(0, document.body.scrollHeight)');
// 等待1.5s后,打印浏览器错误日志
await driver.sleep(1500);
await driver.manage().logs().get(logging.Type.BROWSER)
.then(function(entries) {
entries.forEach(function(entry) {
if (entry.level.name === 'SEVERE') {
pass = false;
console.log('[%s] %s', entry.level.name, entry.message);
error.push(entry.message);
}
});
});
// 控制台输出检测状态
if (pass) {
console.log('[ 页面 ] ' + testUrl + ' 正常');
} else {
console.log('[ 页面 ] ' + testUrl + ' 有错误');
badPages.push({
url: testUrl,
error: error
});
}
} finally {
await driver.quit();
}
}
console.log('包含错误的页面:');
console.log(badPages);
// 写入测试结果
fs.writeFileSync('screenshot/error.json', JSON.stringify(badPages, null, 4), function(err) {
err && console.log(err);
});
})();
三、运行脚本
node test.js
四、查看结果
通过截图和错误日志文件,查看测试结果。
遇到的坑
最大化报错
UnhandledPromiseRejectionWarning: WebDriverError: unknown error: failed to change window state to maximized, current state is normal
出现问题的代码:
// 生成实例
driver = await new Builder().forBrowser('chrome').build();
// 最大化窗口
await driver.manage().window().maximize();
解决办法:
初始化时传入最大化参数
let options = new chrome.Options().addArguments('start-maximized');
driver = chrome.Driver.createSession(options);
下一步计划
把页面重要交互逐步加入selenium自动测试中。
参考
[原创] 解决Selenium的"failed to change window state to maximized" 窗口最大化问题
网友评论