使用 Selenium 自动化 Web 浏览器
创始人
2024-03-02 01:11:31
0

Selenium 是浏览器自动化的绝佳工具。使用 Selenium IDE,你可以录制命令序列(如单击、拖动和输入),验证结果并最终存储此自动化测试供日后使用。这非常适合在浏览器中进行活跃开发。但是当你想要将这些测试与 CI/CD 流集成时,是时候使用 Selenium WebDriver 了。

WebDriver 公开了一个绑定了许多编程语言的 API,它允许你将浏览器测试与其他测试集成。这篇文章向你展示了如何在容器中运行 WebDriver 并将其与 Python 程序一起使用。

使用 Podman 运行 Selenium

Podman 是下面例子的容器运行时。有关如何开始使用 Podman 的信息,请参见此前文章

此例使用了 Selenium 的独立容器,其中包含 WebDriver 服务器和浏览器本身。要在后台启动服务器容器,请运行以下命令:

$ podman run -d --network host --privileged --name server docker.io/selenium/standalone-firefox

当你使用特权标志和主机网络运行容器时,你可以稍后从在 Python 中连接到此容器。你不需要使用 sudo

在 Python 中使用 Selenium

现在你可以提供一个使用此服务器的简单程序。这个程序很小,但应该会让你知道可以做什么:

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

server ="http://127.0.0.1:4444/wd/hub"

driver = webdriver.Remote(command_executor=server,
    desired_capabilities=DesiredCapabilities.FIREFOX)

print("Loading page...")
driver.get("https://fedoramagazine.org/")
print("Loaded")
assert "Fedora" in driver.title

driver.quit()
print("Done.")

首先,程序连接到你已经启动的容器。然后它加载 Fedora Magazine 网页并判断 “Fedora” 是页面标题的一部分。最后,它退出会话。

需要 Python 绑定才能运行此程序。既然你已经在使用容器了,为什么不在容器中这样做呢?将以下内容保存到 Dockerfile 中:

FROM fedora:29
RUN dnf -y install python3
RUN pip3 install selenium

然后使用 Podman 在与 Dockerfile 相同的文件夹中构建容器镜像:

$ podman build -t selenium-python .

要在容器中运行程序,在运行容器时将包含 Python 代码的文件作为卷挂载:

$ podman run -t --rm --network host \
 -v $(pwd)/browser-test.py:/browser-test.py:z \
 selenium-python python3 browser-test.py

输出看上去像这样:

Loading page...
Loaded
Done.

接下来做什么

上面的示例程序是最小的,也许没那么有用。但这仅仅是最表面的东西!查看 SeleniumPython 绑定 的文档。在那里,你将找到有关如何在页面中查找元素、处理弹出窗口或填写表单的示例。拖放也是可能的,当然还有等待事件。

在实现一些不错的测试后,你可能希望将它们包含在 CI/CD 流程中。幸运的是,这是相当直接的,因为一切都是容器化的。

你可能也有兴趣设置 grid 来并行运行测试。这不仅有助于加快速度,还允许你同时测试多个不同的浏览器。

清理

当你容器使用完后,可以使用以下命令停止并删除独立容器:

$ podman stop server
$ podman rm server

如果你还想释放磁盘空间,请运行以下命令删除镜像:

$ podman rmi docker.io/selenium/standalone-firefox
$ podman rmi selenium-python fedora:29

总结

在本篇中,你已经看到使用容器技术开始使用 Selenium 是多么容易。它允许你自动化与网站的交互,以及测试交互。Podman 允许你在没有超级用户权限或 Docker 守护程序的情况下运行所需的容器。最后,Python 绑定允许你使用普通的 Python 代码与浏览器进行交互。


via: https://fedoramagazine.org/automate-web-browser-selenium/

作者:Lennart Jern 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

原创 ...
作品声明:个人观点、仅供参考 前言 12月4日,美国政府发布...
2026-01-22 18:48:40
我们是否用错误的方式测试A...
当人们想要对人工智能的现状及其意义有一个清醒的认识时,他们往往会求...
2026-01-21 19:47:46
火狐Firefox 146...
IT之家 12 月 9 日消息,火狐 Firefox 浏览器 14...
2026-01-20 11:26:42
原创 ...
文|唐辰 图注:千问App产品发布会现场 唐辰现场拍摄 阿里千问打...
2026-01-17 16:18:13
Manus首席科学家季逸超...
Manus首席科学家季逸超和张小珺对谈,是2025年最重要的一篇中...
2026-01-11 20:48:15
让AI自己教自己写代码,会...
你有没有想过这样一个问题:如果把一个AI扔进GitHub的代码海洋...
2026-01-05 18:45:36

热门资讯

如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
Textual:为 Pytho... 快速入门使用 TextualPython 在 Linux 上有像 TkInter 这样的优秀 GUI...
硬核观察 #1245 Open... #1 OpenAI 悄然删除禁止将 ChatGPT 用于 “军事和战争” 的禁令在 1 月 10 日...
使用时间序列数据,用开源工具助... InfluxData 是一个开源的时间序列数据库平台。下面介绍了它是如何被用于边缘应用案例的。收集到...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
硬核观察 #1249 LG 洗... #1 LG 洗衣机每天上传近 4GB 的数据?一个名为 Johnie 的 LG 洗衣机用户发现,他的...
2024 年 Linux 和开... 让我们尝试预测未来吧!新的一年快乐,朋友们 ✨2024 年的钟声已经敲过,我们有必要去预见一下将塑造...