JavaScript如何实现自动化测试_怎样使用Selenium控制浏览器

JavaScript自动化测试常用Selenium WebDriver结合Node.js,通过selenium-webdriver库控制浏览器;需安装Node.js(v16+)和Chrome,执行npm install selenium-webdriver与chromedriver;推荐采用Page Object Model分层设计、Mocha/Jest运行器及显式等待提升可维护性。

JavaScript 实现自动化测试,常用方案是结合 Selenium WebDriver 与 Node.js 生态,通过 selenium-webdriver 库控制真实浏览器执行操作、断言和流程验证。

安装与基础环境准备

确保已安装 Node.js(v16+)和 Chrome 浏览器。使用 npm 安装官方驱动包:

  • npm install selenium-webdriver
  • 推荐同时安装 chromedriver(自动管理 ChromeDriver 版本):npm install chromedriver
  • 若需更简洁的封装,可选 webdriverioplaywright(虽非 Selenium,但常被对比使用)

编写第一个 Selenium 脚本(Node.js + Chrome)

以下是最简可运行示例,打开百度、搜索“JavaScript”,并打印标题:

const { Builder, By, until } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');

async function runTest() {
  let driver = await new Builder()
    .forBrowser('chrome')
    .build();

  try {
    await driver.get('https://www.baidu.com');
    await driver.findElement(By.id('kw')).sendKeys('JavaScript');
    await driver.findElement(By.id('su')).click();
    await driver.wait(until.titleContains('JavaScript'), 5000);
    console.log(await driver.getTitle()); // 输出:JavaScript_百度搜索
  } finally {
    await driver.quit(); // 关闭浏览器
  }
}
runTest();

关键点:使用 async/await 处理异步操作;By.id 等定位器匹配元素;until 提供显式等待能力,避免盲目 sleep。

元素定位与交互的常用方式

稳定定位是自动化可靠的核心。优先按以下顺序选择策略:

  • ID 或 name 属性:最快最稳,如 By.id('submit-btn')
  • CSS 选择器:灵活通用,如 By.css('button[type="submit"]')
  • XPath:适合动态或无标识结构,但性能略低,如 By.xpath('//div[contains(@class,"error")]/span')
  • 避免依赖纯文本、绝对 XPath 或坐标点击,易因 UI 变更而失败

组织可维护的测试代码

直接写脚本难以长期维护。建议分层设计:

  • Page Object Model(POM):为每个页面建一个类,封装元素查找和操作方法,例如 BaiduPage.search(keyword)
  • 使用 Mocha/Jest 作为测试运行器:提供 describe/it、钩子函数(beforeEach)、断言集成
  • 配置化驱动启动:支持 headless 模式、超时设置、不同浏览器切换(Chrome/Firefox)
  • 示例片段:driver.manage().setTimeouts({ implicit: 3000 }); 设置隐式等待

不复杂但容易忽略:本地调试时加 chrome.Options().addArguments('--auto-open-devtools-for-tabs') 可快速检查元素;CI 环境中用 --headless=new 启动无界面 Chrome。