使用Selenium执行JavaScript脚本:探索Web自动化的新领域

简介: 本文介绍了如何在Selenium中使用JavaScript解决自动化测试中的复杂问题。Selenium的`execute_script`函数用于同步执行JS,例如滑动页面、操作时间控件等。在滑动操作示例中,通过JS将页面滚动到底部,点击下一页并获取页面信息。对于只读时间控件,利用JS去除readonly属性并设置新日期。使用JS扩展了Selenium的功能,提高了测试效率和精准度,适用于各种自动化测试场景。

image.png

前言

在我们使用selenium进行自动化测试的时候,selenium能够帮助我们实现元素定位和点击输入等操作,但是有的时候,我们会发现,即使我们的元素定位没有问题,元素也无法执行操作;也有部分情况是我们无法直接定位滚动条河时间控件来进行操作,这个时候,我们就需要借助JavaScript来解决问题。本文就来给大家介绍一下selenium如何执行JavaScript脚本,以及这种方法的一些常见应用场景和最佳实践。

Selenium中调用js

在Selenium中主要使用以下函数来调用js:

execute_script(script, *args)
  • 说明:在当前窗口/框架中同步执行JavaScript。
  • 参数:
    • script:被执行的js脚本
    • *args:被执行的js脚本中使用的参数
  • 使用方法:

    • driver.execute_script('return document.title;')
    • 注意: js脚本中return document.title;中使用return可以获取js脚本返回的结果
  • 源码:

    def execute_script(self, script, *args):
        converted_args = list(args)
        command = None
        if self.w3c:
            command = Command.W3C_EXECUTE_SCRIPT
        else:
            command = Command.EXECUTE_SCRIPT

        return self.execute(command, {
   
   
            'script': script,
            'args': converted_args})['value']

使用js完成滑动操作

当页面显示的数据较多,需要点击底部的对象时,需要把鼠标移动到底部,才可以点击对象。

场景说明:

当我们在百度上搜索一个内容时,内容较多,我们想查看完整的页面需要滑动到页面底部。代码如下:


import time
from selenium import webdriver


class TestJs:
    def setup(self):
        self.driver=webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(5)

    def teardown(self):
        self.driver.quit()

    def test_js_scroll(self):
        self.driver.get("https://www.baidu.com/")
        # 定位搜索框,传入搜索内容
        self.driver.find_element_by_id("kw").send_keys("selenium")
        # 使用JS定位搜索按钮,点击搜索
        ele_search = self.driver.execute_script('return document.getElementById("su")')
        ele_search.click()
        # 将搜索页面滑动至最下方
        self.driver.execute_script('document.documentElement.scrollTop=10000')
        time.sleep(3)
        # 点击下一页
        self.driver.find_element_by_xpath('//*[@id="page"]/div/a[10]').click()
        time.sleep(3)
        #打印js脚本执行后的返回结果
            #返回页面标题
        print(self.driver.execute_script('return document.title'))
             #返回performance.timing
        print(self.driver.execute_script('return JSON.stringify(performance.timing)'))

使用js操作时间控件

大部分时间空间都是readonly属性,需要手动去选择对应的时间,手工测试中很容易做到,自动化中对控件的操作可以使用js完成,我们需要先移除readonly属性,再给value赋值,具体代码如下:

Class TestJs:
    def setup(self):
        self.driver=webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(5)

    def teardown(self):
        self.driver.quit()

    def test_js_datetime(self):
        # 打开网址
        self.driver.get('https://www.12306.cn/')
        time.sleep(3)
        # 定位时间元素;进行readonly属性去除操作;赋值新日期
        # 注意:可以合并执行JS方法的写法
        self.driver.execute_script(
            'a=document.getElementById("train_date");a.removeAttribute("readonly");a.value="2024-3-20"')
        time.sleep(3)

总结

通过使用Selenium执行JavaScript脚本,我们可以更灵活地操作根级别文档和时间控件,提高了测试的效率和准确性。在实际应用中,开发者可以根据具体需求,灵活运用JavaScript脚本来优化自动化测试和网页操作,从而更好地满足项目需求。

相关文章
|
9月前
|
数据采集 Web App开发 API
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
本文介绍了如何使用FastAPI和Selenium搭建RESTful接口,访问免版权图片网站Pixabay并采集图片及其描述信息。通过配置代理IP、User-Agent和Cookie,提高爬虫的稳定性和防封禁能力。环境依赖包括FastAPI、Uvicorn和Selenium等库。代码示例展示了完整的实现过程,涵盖代理设置、浏览器模拟及数据提取,并提供了详细的中文注释。适用于需要高效、稳定的Web数据抓取服务的开发者。
548 15
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
|
11月前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
341 31
Selenium IDE:Web自动化测试的得力助手
|
9月前
|
JavaScript Shell C#
多种脚本批量下载 Docker 镜像:Shell、PowerShell、Node.js 和 C#
本项目提供多种脚本(Shell、PowerShell、Node.js 和 C#)用于批量下载 Docker 镜像。配置文件 `docker-images.txt` 列出需要下载的镜像及其标签。各脚本首先检查 Docker 是否安装,接着读取配置文件并逐行处理,跳过空行和注释行,提取镜像名称和标签,调用 `docker pull` 命令下载镜像,并输出下载结果。使用时需创建配置文件并运行相应脚本。C# 版本需安装 .NET 8 runtime。
612 3
|
11月前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
681 17
Selenium:强大的 Web 自动化测试工具
|
11月前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
2868 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
10月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
587 9
|
JSON 移动开发 JavaScript
在浏览器执行js脚本的两种方式
【10月更文挑战第20天】本文介绍了在浏览器中执行HTTP请求的两种方式:`fetch`和`XMLHttpRequest`。`fetch`支持GET和POST请求,返回Promise对象,可以方便地处理异步操作。`XMLHttpRequest`则通过回调函数处理请求结果,适用于需要兼容旧浏览器的场景。文中还提供了具体的代码示例。
211 5
在浏览器执行js脚本的两种方式
|
11月前
|
数据采集 Web App开发 JavaScript
如何使用Selenium处理JavaScript动态加载的内容?
如何使用Selenium处理JavaScript动态加载的内容?
|
Web App开发 测试技术 数据安全/隐私保护
自动化测试的魔法:使用Python进行Web应用测试
【10月更文挑战第32天】本文将带你走进自动化测试的世界,通过Python和Selenium库的力量,展示如何轻松对Web应用进行自动化测试。我们将一起探索编写简单而强大的测试脚本的秘诀,并理解如何利用这些脚本来确保我们的软件质量。无论你是测试新手还是希望提升自动化测试技能的开发者,这篇文章都将为你打开一扇门,让你看到自动化测试不仅可行,而且充满乐趣。