当前位置: 首页 > 知识库问答 >
问题:

如何使用Selenium和Python在测试执行后关闭Headless Firefox

栾峰
2023-03-14

我一直在按照本教程学习如何使用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不再运行?我运行了这段代码两次,现在两首歌曲正在相互播放。感谢任何帮助,我只是想确保没有任何东西在后台运行!

共有3个答案

孟宏才
2023-03-14

您可以添加 add browser.close() 以关闭活动选项卡,并添加 browser.quit() 以关闭所有浏览器窗口并结束驱动程序的会话/进程。

花博厚
2023-03-14

只需添加

browser.close()

您也可以检查进程列表(例如,Ubuntu中的lsof)

姬实
2023-03-14

无论是基于GUI的浏览器还是无头浏览器,在测试执行结束时,您都应该调用< code>browser.quit(),它调用< code>/shutdown endpoint,随后WebDriver实例和浏览上下文都被完全销毁,关闭所有页面/选项卡/窗口。

因此,您的有效代码块将是:

# previous lines of code
browser.find_element_by_class('playbutton').click()
browser.quit()

您可以在PhantomJS的web驱动程序驻留在内存中中找到详细的讨论

然而,在极少数情况下,可能会有WebDriver的残余实例,例如ChromeDriver占用内存,在这些情况下,您需要在触发下一次测试执行之前用暴力杀死它们,如下所示:

> < li>

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()的情况下停止geckodriver进程冲击PC内存?

 类似资料:
  • 问题内容: 我必须使用Selenium WebDriver为100个用户执行应用程序的负载测试。一次有100位用户登录并访问服务器。 如何使用Selenium WebDriver执行此过程? 问题答案: 更新 如评论中所述,这是一个坏主意。如果您正在考虑使用Selenium Grid进行负载测试,请 重新考虑您的目的并验证SeleniumGrid是否确实是您唯一的选择。 免费解决方案: Selen

  • 问题内容: Firefox可以运行,但是在测试执行完毕后,Firefox仍然可以运行。 这是在带有Firefox 3.6的Debian Linux上。 问题答案: 解决方案是将Selenium指向firefox-bin文件而不是firefox文件,如果它位于/ usr / bin / firefox,则默认情况下可以使用它。

  • 我知道JMeter是一个很好的性能工具。 不幸的是,对于性能测试,我只有:Selenium、Junit、Jenkins(或者Jenkins的其他插件,你知道吗?) 我有用Selenium编写的Junit测试。 Jenkins中的每个节点都能服务5个线程。在多台机器上并行运行测试(在Chrome中)以轻松检查每个测试是否会在相似的时间通过,这是一个好的解决方案吗? 也许你有另一种使用Selenium

  • 下面是我编写测试的方法: 具有私有方法和运行所有其他私有方法的单个公共方法的类。 我在其他类中有一些通用方法,其中一个名为navigation.php。在这个类中,我有所有的方法,这些方法使我能够进入应用程序的特定点。 我所要做的就是,根据一个条件,正确地关闭(或退出,或处置,或任何你想要的)我的测试,而不返回一个错误。我尝试了quit()、close()和dispose(),但可能我用错了。

  • 问题内容: 关于如何使用Capybara / Selenium / Rspec 执行javascript测试的例子很多,您可以在其中编写如下测试: 但是,使用 minitest时, 您无法传递第二个参数来指示selenium执行测试。 有没有人对如何做到这一点有任何想法? 问题答案: 嗯,我注意到文档中有几行似乎说以上内容只能在Rspec中完成 但是,如果您使用的是 RSpec或Cucumber

  • 我想为詹金斯创建一个简单的硒项目。当我用Runner.java运行测试时,输出显示0种情况。当我用mvn运行我的测试时,e.g.mvn干净的验证-Dcucumber.options="--tags@烟雾"输出显示我构建成功 我所有的类都在src/test/java/package中 Runner:src/test/java/Runner/Runner。JAVA 胶水:src/test/java/胶