”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何使用 JS:使用 Selenium 进行自动化测试

如何使用 JS:使用 Selenium 进行自动化测试

发布于2024-08-30
浏览:782

How to JS: Automate testing with Selenium

如何在 JavaScript 中使用 Selenium 自动化浏览器测试

自动化浏览器测试对于任何 Web 开发人员来说都是必须的,以确保他们的应用程序正常运行。在这篇文章中,我们将逐步使用 JavaScript 设置 Selenium,以自动执行简单的浏览器任务:打开网页并单击按钮。

先决条件

要继续操作,您需要:

  • Node.jsnpm 已安装。
  • 已安装 Google ChromeChromeDriver(或其他浏览器及其各自的驱动程序)。

第 1 步:设置您的项目

首先,为您的项目创建一个新文件夹。打开终端并运行:

mkdir selenium-test
cd selenium-test

接下来,初始化一个新的 Node.js 项目:

npm init -y

此命令生成一个 package.json 文件,用于跟踪项目的依赖项。

第 2 步:安装 Selenium WebDriver

我们将使用 npm 安装 Selenium WebDriver 和 ChromeDriver:

npm install selenium-webdriver chromedriver --save

这些包提供了使用 Selenium 自动化 Chrome 所需的库和工具。

第 3 步:编写 Selenium 脚本

在项目文件夹中创建一个名为 test.js 的新文件。该脚本将打开一个网页,等待按钮变为可单击状态,然后单击它。

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

// Helper function to pause the script
function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function runTest() {
  // Configure Chrome to suppress unwanted prompts
  let options = new chrome.Options();
  options.addArguments('--no-default-browser-check', '--no-first-run', '--disable-default-apps', '--disable-infobars');

  let driver = await new Builder()
    .forBrowser('chrome')
    .setChromeOptions(options)
    .build();

  try {
    // Open the target webpage
    await driver.get('https://example.com'); // Change this URL to the site you want to test

    // Wait for an element to load
    await driver.wait(until.elementLocated(By.className('sample-class')), 10000);
    console.log('Found element with class "sample-class".');

    // Generic wait for 6 seconds to handle any dynamic content
    await sleep(6000);

    // Wait for the button to be clickable
    await driver.wait(until.elementLocated(By.id('sample-button')), 10000);

    // Re-locate the button to ensure it’s still in the DOM
    let button = await driver.findElement(By.id('sample-button'));
    console.log('Button located:', button);

    // Click the button
    await button.click();
    console.log('Button clicked successfully.');

    // Wait for the next page or action to load
    await driver.wait(until.urlContains('new-page'), 10000);
    console.log('Navigation to new page was successful.');

  } catch (error) {
    console.error('Error during the test:', error);
  } finally {
    // Always close the browser
    await driver.quit();
  }
}

runTest();

第 4 步:运行脚本

要执行脚本,请运行:

node test.js

Chrome 将打开并执行脚本中定义的操作。观察控制台中指示每个步骤进度的日志。

故障排除

  • StaleElementReferenceError:当 DOM 在找到元素后发生更改时,会发生这种情况。为了避免这种情况,请始终在与元素交互之前重新定位元素。
  • Timeouts:如果元素加载时间较长,请增加 driver.wait() 中的超时。

结论

您现在已经有了使用 Selenium 和 JavaScript 进行自动化浏览器测试的基本设置。此设置可以轻松扩展以包括更复杂的交互、检查和验证步骤。

请记住保持驱动程序更新以匹配您的浏览器版本,并考虑在 CI/CD 环境中使用无头模式。

如果您想在 Azure 中托管它,请查看我的其他帖子:https://dev.to/iamrule/how-to-azure-host-a-selenium-javascript-node-application-in-azure-and -发送电子邮件通知失败-2aio

测试愉快!

版本声明 本文转载于:https://dev.to/iamrule/how-to-js-automate-testing-with-selenium-46j4?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • JavaScript 中的提升
    JavaScript 中的提升
    什么是 JavaScript 提升? 提升是指 JavaScript 中在执行之前进行声明的过程。首先处理变量和函数声明。因此,即使变量在声明之前被引用,也不会导致错误,而是返回 undefined。对于函数声明,整个函数被提升,这意味着它可以在代码中定义之前使用。此过程在执行开始...
    编程 发布于2024-11-06
  • 如何在 Go 中同时选择缓冲发送和无缓冲接收通道?
    如何在 Go 中同时选择缓冲发送和无缓冲接收通道?
    同时选择 Go 发送和接收通道在 Go 中,可以使用 select 语句在通道上执行非阻塞 I/O 操作。然而,在处理缓冲发送通道 (chan
    编程 发布于2024-11-06
  • 如何将列表列表转换为统一的 NumPy 数组?
    如何将列表列表转换为统一的 NumPy 数组?
    将列表列表转换为 NumPy 数组数据分析中的一个常见任务是将列表列表转换为 NumPy 数组高效的数值运算。该数组可以通过将每个列表分配给一行来形成,列表中的每个元素占据一列。选项 1:数组数组如果子列表具有不同的长度,合适的方法是创建数组的数组。这保留了列表列表的原始结构,从而可以轻松检索特定元...
    编程 发布于2024-11-06
  • 前端的顶级设计模式
    前端的顶级设计模式
    在过去的几个月里,我为前端开发人员分享了一些流行的设计模式。其中包括 Singleton、Facade、Observer、Publisher/Subscriber 等模式。今天,我想总结一下这些模式的一些要点和好处,以及如何使用它们来改进您的前端开发流程。 什么是设计模式 设计模式是...
    编程 发布于2024-11-06
  • ServBay版本.pdate公告
    ServBay版本.pdate公告
    我们很高兴地宣布新版本 1.4.4 已经到来!让我们来看看新增的备受期待的新功能。 新功能 CA和证书管理: 统一SSL证书管理平台:全新的证书管理平台,旨在简化证书申请和管理流程。 ServBay User CA 和 ServBay Public CA: 引入 Se...
    编程 发布于2024-11-06
  • Spring框架中的控制反转
    Spring框架中的控制反转
    控制反转(IoC)和依赖注入(DI)是Spring框架中的两个基本概念。传统上,对象负责创建和管理它们自己的依赖关系。然而,IoC 通过将对象创建和依赖管理的控制权移交给像 Spring 这样的框架来翻转这一责任。 这种转变有几个优点: 更简单的实现交换:只需对代码库进行最小的更改即可交换不同的实现...
    编程 发布于2024-11-06
  • 使用 React 构建递归文件系统:深入探讨
    使用 React 构建递归文件系统:深入探讨
    简介:在 React 中构建递归文件系统 在现代 Web 开发中,创建交互式动态文件系统是一个常见的要求。无论是管理文档、组织项目还是构建复杂的数据结构,拥有强大的文件系统都至关重要。在这篇博文中,我们将探讨如何在 React 中构建递归文件系统,重点关注可以添加、重命名或删除的嵌...
    编程 发布于2024-11-06
  • SQL 查询速度慢?使用此技术提高应用程序的性能
    SQL 查询速度慢?使用此技术提高应用程序的性能
    挑战 在我的应用程序(React Spring Boot Oracle)中,处理大型数据集导致处理时间极其缓慢。我需要一种解决方案来提高性能而不影响准确性或完整性。 解决方案:NTILE 并行处理 NTILE 是一个功能强大的 SQL 窗口函数,旨在将结果集划分为指...
    编程 发布于2024-11-06
  • 关于测试覆盖率的真相
    关于测试覆盖率的真相
    一个强有力的真理。 看下面这段简单明了的代码: function sum(a, b) { return a b; } 现在,让我们为它编写一些测试: test('sum', () => { expect(sum(1, 2)).toBe(3); expect(s...
    编程 发布于2024-11-06
  • 为什么我的 OpenGL 三角形无法在 Go 中渲染?调查顶点缓冲区问题。
    为什么我的 OpenGL 三角形无法在 Go 中渲染?调查顶点缓冲区问题。
    Go 中的 OpenGL 顶点缓冲区问题在尝试在 Go 中使用 OpenGL 显示三角形时,用户遇到了顶点缓冲区问题缓冲区无法渲染形状。 Go 代码源自教程,但与 C 代码不同的是,它没有产生任何输出。问题原因问题的根本原因位于传递给 vertexAttrib.AttribPointer() 的参数...
    编程 发布于2024-11-06
  • 为什么在 Linux 32 位发行版上的 Go 程序中设置 `ulimit -n` 会导致“参数无效”错误?
    为什么在 Linux 32 位发行版上的 Go 程序中设置 `ulimit -n` 会导致“参数无效”错误?
    如何在 Go 程序中设置 ulimit -n?问题用户尝试在 Go 程序中设置 ulimit -n使用 setrlimit 和 getrlimit 系统调用将其限制在程序内而不是全局。然而,在尝试设置该值时出现错误,提示“参数无效”。解决方案发现该问题是由于 Linux 32 的 Getrlimit...
    编程 发布于2024-11-06
  • 如何在Python中创建无限深度的动态嵌套字典?
    如何在Python中创建无限深度的动态嵌套字典?
    未定义深度的动态嵌套字典在涉及复杂多级数据结构的场景中,经常会遇到变量嵌套字典的需求水平。虽然硬编码插入语句是一种潜在的解决方案,但当事先未知嵌套深度时,这种方法是不切实际的。要克服此限制,请考虑利用 Python 的 collections.defaultdict,它允许动态创建字典。可以使用以下...
    编程 发布于2024-11-06
  • Python 变得强大:轻松编程的初学者指南
    Python 变得强大:轻松编程的初学者指南
    Python 是一门强大的编程语言,语法简单,应用广泛。安装 Python 后,可以学习其基本语法,包括变量赋值、数据类型和流程控制。实战案例中,我们通过蒙特卡罗模拟计算圆周率,展示了 Python 在数值计算中的能力。此外,Python 拥有丰富的库,涵盖机器学习、数据分析和网络开发等领域,体现了...
    编程 发布于2024-11-06
  • 如何在没有 jQuery 的情况下监听动态创建的元素的事件?
    如何在没有 jQuery 的情况下监听动态创建的元素的事件?
    在没有 jQuery 的情况下监听动态创建的元素的事件使用外部页面时,向动态生成的元素添加事件监听器可能具有挑战性。在这种情况下,委派事件处理至关重要。一种方法是使用 event.target 属性来检查单击或触发的元素是否属于所需类型。这是一个示例:document.querySelector('...
    编程 发布于2024-11-06
  • 利用 Snipbyte 的高级考勤管理系统优化劳动力效率
    利用 Snipbyte 的高级考勤管理系统优化劳动力效率
    在当今的商业环境中,有效管理员工出勤、轮班和工资单可以决定组织的成功或失败。准确的考勤跟踪不仅可以确保运营顺利进行,还有助于提高生产力。在 Snipbyte,我们专注于提供一流的基于网络的解决方案来增强业务流程,包括我们的高级考勤管理系统。 为什么选择Snipbyte的考勤管理系统? 我们的考勤管理...
    编程 发布于2024-11-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3