Selenium 是瀏覽器自動化的絕佳工具。使用 Selenium IDE,你可以錄制命令序列(如單擊、拖動和輸入),驗證結果並最終儲存此自動化測試供日後使用。這非常適合在瀏覽器中進行活躍開發。但是當你想要將這些測試與 CI/CD 流整合時,是時候使用 Selenium WebDriver 了。
WebDriver 公開了一個系結了許多程式語言的 API,它允許你將瀏覽器測試與其他測試整合。這篇文章向你展示了如何在容器中執行 WebDriver 並將其與 Python 程式一起使用。
Podman 是下面例子的容器執行時。有關如何開始使用 Podman 的資訊,請參見。
此例使用了 Selenium 的獨立容器,其中包含 WebDriver 伺服器和瀏覽器本身。要在後台啟動伺服器容器,請執行以下命令:
$ podman run -d --network host --privileged --name server docker.io/selenium/standalone-firefox
當你使用特權標誌和主機網路執行容器時,你可以稍後從在 Python 中連線到此容器。你不需要使用 sudo
。
現在你可以提供一個使用此伺服器的簡單程式。這個程式很小,但應該會讓你知道可以做什麼:
from selenium.webdriver.common.desired_capabilities import DesiredCapabilitiesserver ="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.titledriver.quit()print("Done.")
首先,程式連線到你已經啟動的容器。然後它載入 Fedora Magazine 網頁並判斷 “Fedora” 是頁面標題的一部分。最後,它退出對談。
需要 Python 係結才能執行此程式。既然你已經在使用容器了,為什麼不在容器中這樣做呢?將以下內容儲存到 Dockerfile 中:
FROM fedora:29RUN dnf -y install python3RUN 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...LoadedDone.
上面的範例程式是最小的,也許沒那麼有用。但這僅僅是最表面的東西!檢視 Selenium 和 Python 係結 的文件。在那裡,你將找到有關如何在頁面中查詢元素、處理彈出視窗或填寫表單的範例。拖放也是可能的,當然還有等待事件。
在實現一些不錯的測試後,你可能希望將它們包含在 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 程式碼與瀏覽器進行互動。