python - 如何在使用 Selenium 和 Python 执行测试后关闭 Headless Firefox
问题描述
我一直在关注本教程来学习如何使用 Selenium,并且我刚刚成功运行了以下代码:
from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options
opts = Options()opts.headless=True
assert opts.headless # Operating in headless mode
browser = Firefox(options=opts)browser.get('https://bandcamp.com')
browser.find_element_by_class('playbutton').click()
如何确保无头 Firefox 不再运行?我运行了这段代码两次,现在两首歌曲正在相互播放。任何帮助表示赞赏,我只是想确保后台没有运行任何东西!
解决方案
无论是基于 GUI 的浏览器还是无头浏览器,在测试执行结束时,您应该始终调用browser.quit()
哪个调用/shutdown endpoint
,然后WebDriver实例和浏览上下文都被完全销毁,关闭所有页面/选项卡/窗口。
因此,您的有效代码块将是:
# previous lines of code
browser.find_element_by_class('playbutton').click()
browser.quit()
然而,在极少数情况下,可能会有WebDriver的残留实例,例如ChromeDriver占用内存,在这些情况下,您需要在触发下一个测试执行之前用蛮力杀死它们,如下所示:
Python解决方案(Windows):
import os os.system("taskkill /f /im geckodriver.exe /T") os.system("taskkill /f /im chromedriver.exe /T") os.system("taskkill /f /im IEDriverServer.exe /T")
Python解决方案(跨平台):
import os import psutil PROCNAME = "geckodriver" # or chromedriver or IEDriverServer for proc in psutil.process_iter(): # check whether the process name matches if proc.name() == PROCNAME: proc.kill()
您可以在 Selenium 中找到详细讨论:如何在不调用 driver.quit() 的情况下停止影响 PC 内存的 geckodriver 进程?
推荐阅读
- java - 如何实现加密的共享偏好
- google-cloud-platform - GCP 中是否有任何 API 可以获取资源使用详细信息..?
- reactjs - 谁能告诉我在 ReactJs 中开发单独的未定义组件的正确方法
- mysql - mysql if value = "0" 然后获取其他值
- mongodb - Spring Data 线程的版本注释对 Mongodb 是否安全?
- java - 如何为 Jenkins 设置 JDK 8 和为构建作业设置 JDK 14?
- node.js - pm2 显示状态“在线”,但该站点无法正常工作
- python - 将参数传递给烧瓶 GET 函数
- c# - 我应该如何在 WebAPI 集成测试中断言?
- apache-flink - Apache Flink 读取至少 2 条记录来触发 sink