使用 Selenium 自动化 Web 浏览器

是浏览器自动化的绝佳工具。 使用 Selenium IDE,您可以记录命令序列(如单击、拖动和键入)、验证结果并最终存储此自动化测试以供以后使用。 这对于在浏览器中进行主动开发非常有用。 但是,当您想将这些测试与您的 CI/CD 流程集成时,就该转向 Selenium WebDriver。

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

使用 Podman 运行 Selenium

Podman 是以下示例中的容器运行时。 有关如何开始使用 Podman,请参阅上一篇文章。

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

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

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

在 Python 中使用 Selenium

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

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

server ="https://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 杂志网页并断言“Fedora”是页面标题的一部分。 最后,它退出会话。

为了运行程序,需要 Python 绑定。 既然您已经在使用容器,为什么不在容器中也这样做呢? Save 以下为文件名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.

接下来做什么

这 example 上面的程序是最小的,也许没有那么有用。 但它几乎没有触及可能的表面! 查看文档 并且对于 Python 绑定. 在那里,您将找到有关如何在页面中定位元素、处理弹出窗口或填写表单的示例。 拖放也是可能的,当然还有等待各种事件。

实现了一些不错的测试后,您可能希望将整个内容包含在 CI/CD 管道中。 幸运的是,这相当简单,因为一切都是容器化的。

您可能也有兴趣建立一个 网格 并行运行测试。 这不仅有助于加快速度,而且还允许您同时测试多个不同的浏览器。

打扫干净

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

$ podman stop server
$ podman rm server

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

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

结论

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

摄影者 罗迪翁·库察耶夫不飞溅.