Chrome 扩展测试
概述
Chrome 扩展是为浏览器添加额外功能的好方法。 就像其他软件一样,它们也应该经过测试。 本指南重点介绍如何使用 Nightwatch 测试 Chrome 扩展。
可以在 此处 找到一个包含基本 Chrome 扩展测试的示例项目(请参见 tests/testInstalledExtension.js
)。
初始化
Chrome 扩展可以使用 Nightwatch 就像测试任何其他网站一样进行测试。 因此,要开始,请使用 init
命令执行 Nightwatch 的常规设置(确保在提示时选择“Chrome”浏览器)。
配置
在完成初始 Nightwatch 设置后,生成的 nightwatch.conf.js
文件只需要做少量更改,即可告知 Nightwatch 两件事
- 在测试运行期间,在哪里找到要安装在浏览器中的 Chrome 扩展。
- 自动打开 DevTools 窗口,以便可以访问已安装的 Chrome 扩展。
Chrome 扩展本身可以有两种形式,打包或解包。 打包扩展是一个带有 .crx
扩展名的单个文件,而解包扩展是一个包含扩展的目录,包括一个 manifest.json
文件。
根据要测试的扩展的格式,需要在 nightwatch.conf.js
文件中以不同的方式提供扩展的路径。
打包(.crx
文件)
如果要测试的扩展已经打包,请对您的 nightwatch.conf.js
文件进行以下更改。
进入 test_settings > chrome > desiredCapabilities > 'goog:chromeOptions'
并添加一个具有以下数组值的 extensions
密钥
另外,将 "auto-open-devtools-for-tabs"
添加到 goog:chromeOptions > args
中,以便在测试运行期间自动打开 DevTools 窗口 **(重要)**。
解包(目录)
如果要测试的扩展是解包的(包含 manifest.json
文件的目录),请对您的 nightwatch.conf.js
文件进行以下更改。
进入 test_settings > chrome > desiredCapabilities > 'goog:chromeOptions' > args
并添加 --load-extension
标志,如下所示
另外,将 "auto-open-devtools-for-tabs"
添加到 goog:chromeOptions > args
中,以便在测试运行期间自动打开 DevTools 窗口 **(重要)**。
编写您的第一个测试
可以在 此处 找到用于自动化和断言 Chrome 扩展的示例测试。
当浏览器在测试运行期间首次打开时,它将在浏览器选项卡的上下文中打开。 此上下文需要更改为 DevTools 窗口,以便可以访问和测试 Chrome 扩展。
因此,在实际测试扩展之前,需要执行几个步骤。 在上面共享的示例测试中,所有这些步骤都在测试用例(it
块)中完成。 但是,由于这些步骤只需要在每个测试套件中执行一次,因此也可以将它们放在 before
钩子中,如下所示
describe('test Chrome Extension inside DevTools', function() {
before(async function() {
// navigate to the website you want to test the extension against
await browser.navigateTo('https://google.com');
// get all targets (contexts) we can possibly switch to
const targets = await browser.driver.sendAndGetDevToolsCommand('Target.getTargets', {});
const devToolsTarget = targets.targetInfos.find(target => {
return target.type === 'page' &&
target.url.includes('devtools://devtools/bundled/devtools_app.html');
});
// switch to DevTools window context
await browser.window.switchTo(devToolsTarget.targetId);
// switch to last tab in pane (our extension)
await browser.sendKeys('body', [browser.Keys.COMMAND, '[']); // for macos
await browser.sendKeys('body', [browser.Keys.CONTROL, '[']); // for windows/linux
// switch to the iframe inside the tab
await browser.frame('iframe[src*="index.html"]');
});
it('checks the header text of the extension', async function() {
// run automation on the extension
await browser.element('header').getText().assert.equals('My Extension');
// to visualize the extension during test run
// await browser.pause(1000);
});
});
类似地,可以将其他测试用例添加到测试套件(测试文件)中,其中可以测试和断言 Chrome 扩展,就像测试普通网站一样。
运行测试
要运行测试,请使用常规的 npx nightwatch
命令,如下所示