尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

前端工程师快速入门Selenium自动化测试

前端工程师快速入门Selenium自动化测试
📅 发布时间:2026/6/20 4:39:32

一、背景与意义

Selenium是常用的Web自动化测试工具,前端开发工程师可以在完成每项开发任务之后,使用Selenuim做一下回归测试,以避免被提BUG太多导致后面做项目总结时太难看。测试工程师学习Selenium时需要掌握很多API接口,例如页面元素如何定位、如何触发各种鼠标操作事件等。而前端工程师则可以充分利用自己所掌握的JavaScript相关API,来替换Selenium中的一些API,从而更快地入门。

文本接下来将给出一个适合前端开发工程师(而不是测试工程师)的Selenium入门示例。

二、代码示例

2.1 编程语言选择

Selenium支持的编程语言有Java、Python、C#、Ruby、JavaScript、Kotlin,Python可能是最常用的语言,很多Selenium教材都是以Python作为编程语言。但对大多数前端开发工程师而言,写JavaScript当然比写Python更顺手。故这里以JavaScript作为编程语言。

2.2 安装Selenium依赖

运行如下命令即可安装JavaScript版本的Selenium依赖:

npm install selenium-webdriver

2.3 启动Selenium

接下来创建自动化测试的主文件test.js:

  1. const { Builder } = require("selenium-webdriver");

  2. // 由于要用到await关键字,故这里需要使用async function包装一下。

  3. (async function() {

  4. /*

  5. * 这里使用firefox而不是更常用的浏览器chrome,是因为selenium和chrome搭配使用时,

  6. * 会出现一些兼容性问题导致的错误,对新手不那么友好。用firefox省事一些

  7. */

  8. driver = await new Builder().forBrowser('firefox').build();

  9. await driver.get('https://www.sogou.com');

  10. })();

然后运行node test.js命令,可以看到firefox打开了https://www.sogou.com,并且导航栏是红色的,表示firefox受到其他程序的控制:

2.4 自动执行文本输入与按钮点击操作

接下来,我们要在搜索框中输入HelloWorld并执行搜索。查看页面元素的代码可知,搜索框的id为query,根据基础的JavaScript知识,如果在firefox的开发者控制台中执行以下JavaScript代码,可以在搜索框中输入HelloWorld:

document.getElementById("query").value = "HelloWorld"

类似地,搜索按钮的id为stb,根据基础的JavaScript知识可知,以下JavaScript可以触发搜索:

document.getElementById("stb").click()

Selenium正好也提供了执行JavaScript的API,即driver.executeScript函数,test.js中可使用driver.executeScript函数执行输入HelloWorld并触发搜索的操作:

  1. const { Builder } = require("selenium-webdriver");

  2. // 由于要用到await关键字,故这里需要使用async function包装一下。

  3. (async function() {

  4. /*

  5. * 这里使用firefox而不是更常用的浏览器chrome,是因为selenium和chrome搭配使用时,

  6. * 会出现一些兼容性问题导致的错误,对新手不那么友好。用firefox省事一些

  7. */

  8. driver = await new Builder().forBrowser('firefox').build();

  9. await driver.get('https://www.sogou.com');

  10. // 输入HelloWorld,并触发搜索

  11. await driver.executeScript(`document.getElementById("query").value = "HelloWorld"`);

  12. await driver.executeScript(`document.getElementById("stb").click()`);

  13. })();

再次运行node test.js命令,可以看到浏览自动打开网站并执行了搜索操作。绝大多数网页上的操作都可以通过JavaScript来模拟实现,故只用driver.executeScript就可以完成很多操作了。

2.5 等待结果和补充断言

执行搜索之后,可能需要等待几百毫秒才能返回搜索结果,这里就需要使用Selenium的等待函数driver.wait。另外执行搜索之后,页面应该会展示“已为您找到xxxx条相关结果”,故可以增加断言验证是否符合预期。另外整个测试流程执行完毕之后,应该调用driver.quit()退出。相关代码补充如下:

  1. const { Builder } = require("selenium-webdriver");

  2. const assert = require("assert");

  3. // 由于要用到await关键字,故这里需要使用async function包装一下。

  4. (async function() {

  5. /*

  6. * 这里使用firefox而不是更常用的浏览器chrome,是因为selenium和chrome搭配使用时,

  7. * 会出现一些兼容性问题导致的错误,对新手不那么友好。用firefox省事一些

  8. */

  9. driver = await new Builder().forBrowser('firefox').build();

  10. await driver.get('https://www.sogou.com');

  11. // 输入HelloWorld,并触发搜索

  12. await driver.executeScript(`document.getElementById("query").value = "HelloWorld"`);

  13. await driver.executeScript(`document.getElementById("stb").click()`);

  14. // wait方法第一个参数是函数,Selenium会反复调用该函数,直到该函数的返回结果为true再执行后面的代码。

  15. // wait方法第二个参数是设置超时时间(单位毫秒),超过该时间第一个参数还没返回true就报错。

  16. await driver.wait(async () => {

  17. // 注意,如果要获取executeScript的执行返回,JS命令中必须要有return语句

  18. return await driver.executeScript(`return !!document.querySelector(".num-tips")`);

  19. } , 60 * 1000); // 超时时间设置为60秒

  20. // 获取页面上的“已为您找到xxxx条相关结果”这一段文字

  21. const searchResultText = await driver.executeScript(`return document.querySelector(".num-tips").innerText`);

  22. // 打个日志以方便调试

  23. console.log("searchResultText", searchResultText);

  24. // 通过断言确认是否符合预期

  25. assert(searchResultText.match(/^搜狗已为您找到约[0-9,]+条相关结果$/, ''), "没有获取到搜索结果");

  26. driver.quit();

  27. })();

三、代码结构优化

从代码结构的角度看,连续两段driver.executeScript命令可以合并在一起,且driver.executeScript命令经常用但有些长,可以用一个名字短一点的函数替代。代码优化为:

  1. const { Builder } = require("selenium-webdriver");

  2. const assert = require("assert");

  3. // 由于要用到await关键字,故这里需要使用async function包装一下。

  4. (async function() {

  5. /*

  6. * 这里使用firefox而不是更常用的浏览器chrome,是因为selenium和chrome搭配使用时,

  7. * 会出现一些兼容性问题导致的错误,对新手不那么友好。用firefox省事一些

  8. */

  9. driver = await new Builder().forBrowser('firefox').build();

  10. await driver.get('https://www.sogou.com');

  11. const exec = command => driver.executeScript(command);

  12. // 输入HelloWorld,并触发搜索

  13. await exec(`

  14. document.getElementById("query").value = "HelloWorld";

  15. document.getElementById("stb").click();

  16. `);

  17. let searchResultText = null;

  18. // wait方法第一个参数是函数,Selenium会反复调用该函数,直到该函数的返回结果为true再执行后面的代码。

  19. // wait方法第二个参数是设置超时时间(单位毫秒),超过该时间第一个参数还没返回true就报错。

  20. await driver.wait(async () => {

  21. // 获取页面上的“已为您找到xxxx条相关结果”这一段文字

  22. // 注意,如果要获取executeScript的执行返回,JS命令中必须要有return语句

  23. searchResultText = await exec(`return document.querySelector(".num-tips")?.innerText`);

  24. return !!searchResultText;

  25. } , 60 * 1000); // 超时时间设置为60秒

  26. // 打个日志以方便调试

  27. console.log("searchResultText", searchResultText);

  28. // 通过断言确认是否符合预期

  29. assert(searchResultText.match(/^搜狗已为您找到约[0-9,]+条相关结果$/, ''), "没有获取到搜索结果");

  30. driver.quit();

  31. })();

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

相关新闻

  • Java还能这么快?:深入JVM底层解析向量API如何榨干CPU算力
  • 2025无锡棕刚玉定制口碑排行榜TOP10出炉,不锈钢灰/磨料/金刚砂/白刚玉/精密铸造砂/铬刚玉/碳化硅/棕刚玉/黑碳化硅棕刚玉品牌找哪家 - 品牌推荐师
  • conda create从requirements.txt创建TensorFlow环境

最新新闻

  • 信息学奥赛解题实战:从“苹果与虫子”问题看条件判断与边界处理
  • Odoo 19会计模块功能:会计资产负债表完整操作指南
  • 厚街企业豆包搜索排名提升秘籍:3步实现AI搜索霸屏的实战教程 - 东莞选校指南
  • (2026新)淮北正规防水补漏公司口碑榜TOP5权威推荐!卫生间/厨房/阳台/屋顶/天花板/地下室渗漏水检测维修攻略-靠谱漏水检测维修师傅推荐 - 安佳防水
  • (2026新)淄博正规防水补漏公司口碑榜TOP5权威推荐!卫生间/厨房/阳台/屋顶/天花板/地下室渗漏水检测维修攻略-靠谱漏水检测维修师傅推荐 - 安佳防水
  • 深入解析MCU串口通信:从SCI寄存器配置到LIN、RS-485实战应用

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号