写点什么

自动化测试中常用的 JavaScript 脚本

  • 2024-11-26
    北京
  • 本文字数:2163 字

    阅读完需:约 7 分钟

全面解析软件测试开发:人工智能测试、自动化测试、性能测试、测试左移、测试右移到DevOps如何驱动持续交付 


在自动化测试中,尤其是在使用 Selenium、Cypress 等工具时,JavaScript 脚本是一个强大的工具。它可以帮助我们执行一些浏览器环境下的特殊操作,如直接操作 DOM 元素、处理复杂的 JavaScript 异步调用、或者触发事件。

本文将介绍自动化测试中常用的 JavaScript 脚本及其应用场景,帮助测试人员更高效地解决问题。


一、为什么需要 JavaScript 脚本?

  1. 直接操作 DOM 元素


    当传统定位方式难以使用时,可以通过 JavaScript 操作 DOM,快速获取或操作页面元素。

  2. 执行复杂的前端逻辑


    测试前端框架(如 React、Vue)生成的动态内容时,JavaScript 可以帮助触发组件更新或模拟特定的用户行为。

  3. 解决特殊问题


  • 模拟滚动操作。

  • 绕过受保护的按钮或输入框。

  • 修改页面状态以测试极端情况。


  1. 辅助调试


    在调试测试用例时,通过 JavaScript 获取页面信息或查看变量状态,快速定位问题。


二、常用的 JavaScript 脚本及其应用

1. 获取页面标题

return document.title;
复制代码

场景:验证页面加载后,标题是否正确。

示例:在 Selenium 中使用 JavaScript 获取标题:

title = driver.execute_script("return document.title;")assert title == "Expected Title"
复制代码

2. 获取页面 URL

return window.location.href;
复制代码

场景:验证当前页面是否跳转到预期 URL。


3. 操作 DOM 元素

(1) 获取元素属性

return document.querySelector("#elementID").getAttribute("attributeName");
复制代码

场景:获取按钮的 disabled 状态、链接的 href 属性等。

(2) 设置元素的值

document.querySelector("#inputField").value = "Test Value";
复制代码

场景:填充输入框,绕过前端验证或阻止特定操作。


4. 点击元素

document.querySelector("#buttonID").click();
复制代码

场景:当标准点击操作(driver.click())无法触发点击时,可以用 JavaScript 模拟点击。


5. 滚动页面

(1) 滚动到页面底部

window.scrollTo(0, document.body.scrollHeight);
复制代码

场景:测试页面懒加载功能。

(2) 滚动到指定元素

document.querySelector("#elementID").scrollIntoView();
复制代码

场景:滚动到特定组件或触发隐藏元素的显示。


6. 修改元素的样式

document.querySelector("#elementID").style.display = "block";
复制代码

场景:强制显示被隐藏的元素(如弹窗、按钮)。


7. 触发事件

(1) 手动触发 change 事件

let element = document.querySelector("#inputField");element.value = "New Value";element.dispatchEvent(new Event("change"));
复制代码

场景:更新输入框的值后,触发相关事件。

(2) 手动触发 click 事件

document.querySelector("#buttonID").dispatchEvent(new Event("click"));
复制代码

8. 异步操作

在测试需要等待异步 JavaScript 完成时,可以使用 setTimeout 或 Promise 配合测试工具的显式等待。

示例:等待 3 秒后返回结果

return new Promise(resolve => {    setTimeout(() => {        resolve("Done");    }, 3000);});
复制代码

场景:模拟延迟操作,或在前端动画完成后继续执行测试。


9. 处理 iframe 中的内容

return document.querySelector("iframe").contentDocument.body.innerHTML;
复制代码

场景:测试嵌入的 iframe 内容或与 iframe 交互。

10. 禁用页面交互

禁用所有按钮

document.querySelectorAll("button").forEach(button => button.disabled = true);
复制代码

场景:测试禁用状态下的页面行为。

禁用页面的右键菜单

document.addEventListener("contextmenu", event => event.preventDefault());
复制代码

三、如何在自动化测试中执行 JavaScript

1. Selenium

在 Selenium 中,可以通过 execute_script 方法执行 JavaScript。

示例:滚动到页面底部

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
复制代码

2. Cypress

Cypress 原生支持 JavaScript,可以直接在测试用例中执行。

示例:获取页面标题

cy.title().then(title => {    expect(title).to.equal("Expected Title");});
复制代码

3. Playwright

Playwright 提供 evaluate 方法用于执行 JavaScript。

示例:获取 URL

const url = await page.evaluate(() => window.location.href);expect(url).toBe("https://example.com");
复制代码

四、常见的应用场景及案例

场景 1:测试懒加载图片

let lazyImages = document.querySelectorAll("img.lazyload");lazyImages.forEach(img => img.src = img.dataset.src);
复制代码

解决问题:确保懒加载图片正确加载。


场景 2:跳过确认弹窗

window.confirm = () => true;
复制代码

解决问题:在测试中跳过干扰操作,如确认或取消对话框。


场景 3:模拟窗口大小变化

window.resizeTo(1024, 768);
复制代码

解决问题:验证页面对不同分辨率的适配。


五、注意事项

  1. 确保脚本的安全性


    不要在测试中运行来源不明的 JavaScript 脚本。

  2. 使用显式等待


    JavaScript 操作可能需要等待页面完成加载或渲染。

  3. 兼容性问题


    不同浏览器对 JavaScript 的支持可能略有差异,需要确保脚本兼容目标浏览器。

  4. 避免过度依赖


    JavaScript 脚本应作为辅助手段,测试框架的内置功能是首选。


六、总结

JavaScript 脚本在自动化测试中提供了强大的灵活性,能够帮助我们高效解决复杂的测试问题。无论是操作 DOM 元素、处理异步任务,还是模拟用户交互,合理使用 JavaScript 都能极大提升测试效率。

通过掌握本文介绍的常用脚本及其场景应用,您可以在实际测试中更加得心应手!


用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
自动化测试中常用的 JavaScript 脚本_测试_测吧(北京)科技有限公司_InfoQ写作社区