Selenium 是不是支持无头浏览器测试?
Posted
技术标签:
【中文标题】Selenium 是不是支持无头浏览器测试?【英文标题】:Does Selenium support headless browser testing?Selenium 是否支持无头浏览器测试? 【发布时间】:2011-11-26 00:03:13 【问题描述】:我目前正在查看 Selenium Server,但我似乎没有注意到支持无头浏览器测试的驱动程序。
除非我弄错了,否则它不支持它。如果您在 X 上,您可以创建一个虚拟帧缓冲区来隐藏浏览器窗口,但这并不是真正的无头浏览器。
有人能告诉我吗? Selenium 是否支持无头浏览器测试?
【问题讨论】:
【参考方案1】:您不需要使用 PhantomJS 作为 Selenium 的替代品。 Selenium 包含一个 PhantomJS webdriver 类,它在 GhostDriver 平台上运行。只需将 PhantomJS 二进制文件安装到您的机器上。在python中,您可以使用:
from selenium import webdriver
dr = webdriver.PhantomJS()
瞧瞧。
【讨论】:
使用 Python 和 PhantomJS 进行无头 Selenium 测试 - realpython.com/blog/python/… 不要使用 PhantomJS,它不是很可靠。人们应该使用 Xvfb 来运行 Chrome 或 Firefox。 更新:鉴于 Chrome 51 的--headless
标志,不再支持 PhantomJS【参考方案2】:
WebDriver API 支持 htmlUnit 作为您的测试浏览器。 Ruby 人使用 Capybara 进行无头硒测试已经有一段时间了,所以这绝对是可行的。
【讨论】:
对不起,这是我有点困惑的地方 - selenium 和 webdriver 有什么区别? 有关 Selenium 和 WebDriver 的详细描述,请参阅 Ross Patterson 在***.com/questions/6995016/…的回答 老问题,但如果您可以编辑您的答案以包括 PhantomJS,那就太好了。【参考方案3】:我知道这是一篇旧帖子。认为它会帮助其他正在寻找答案的人。
您可以使用 XVFB 在任何 linux 发行版中安装完整的 firefox。这可以确保您的测试是在真实的浏览器中执行的。完成无头设置后,您可以使用您选择的 webdriver 来连接和运行测试。
【讨论】:
【参考方案4】:无头浏览器是个坏主意。它们为您提供一些测试,但与真实用户所看到的完全不同,它们掩盖了许多只有真实浏览器才会遇到的问题。在无头环境(例如、Windows 或带有 XVFB 的 Linux)上使用“有头”浏览器(即,除了 HTMLUnit 之外的任何东西)会更好。
【讨论】:
不,你想要持续集成,所以无头只是逻辑。为什么要掩盖问题?无头只是意味着不使用图形设备。 @Roo OP 很清楚地说“你可以创建一个虚拟帧缓冲区来隐藏浏览器窗口,但这并不是真正的无头浏览器”,他不是这个意思“未使用图形设备”。事实上,你我都同意 - 运行一个没有显示器的真正浏览器,一切都会好起来的。 @Roo,我见过无头测试失败,但实际上 Web 应用程序在所有浏览器中都可以正常工作并且代码也可以。而且我已经看到无头测试在实践中至少在某些浏览器中被破坏时成功。我不相信无头测试。我想它们总比没有好,但应该结合对相关网络应用程序最“重要”浏览器的自动测试,想想。 @KajMagnus 我已经看到 xvfb 上的“无头”测试在实际工作于真实图形环境时失败。这只是在开发的这个阶段必须使用 webdriver 的痛苦。很多错误,很多麻烦,没有真正的替代品......【参考方案5】:我注意到您说使用 X 帧缓冲区并不是真正的无头解决方案,但是,对于大多数人来说,我认为这是可以接受的。除此之外,如果您对此解决方案感兴趣,this service 将帮助您实现这一目标。
【讨论】:
【参考方案6】:Selenium 在某种程度上支持无头浏览器测试。 Docker Selenium 由 SeleniumHQ 维护。这些 docker 容器开箱即用,带有 xvfb 支持。有像 PhantomJS 这样的工具可以与 Selenium 连接。但是,它并未得到 Selenium 本身的官方支持。
就像其他人所描述的那样,PhantomJS 并不是真正推荐的。 Selenium 的全部意义在于使浏览器自动化。但是,为什么要自动化没有人使用的浏览器呢?我一直不明白为什么开发人员经常忽视这一点..
【讨论】:
【参考方案7】:是的。 Selenium 支持无头浏览器测试,速度更快,更方便执行大量测试用例。
ChromeOptions cromeOptions = new ChromeOptions();
//Location of browser binary/.exe file
cromeOptions.setBinary("/usr/bin/google-chrome-stable");
cromeOptions.addArguments("--headless");
cromeOptions.addArguments("--no-sandbox");
cromeOptions.addArguments("--disable-gpu");
cromeOptions.addArguments("--window-size=1920,1080");
WebDriver webDriver = new ChromeDriver(cromeOptions);
【讨论】:
【参考方案8】:是的,selenium 支持无头浏览器测试...但我发现 HTMLUnit 大多数时候都失败了...我正在寻找替代方案...PhantomJs 真的很棒。你绝对可以试一试它的速度非常快到其他浏览器...烟雾测试真的很好...
http://phantomjs.org/
【讨论】:
【参考方案9】:使用 ruby 和 macOS:brew install phantomjs
然后:
driver = Selenium::WebDriver.for :phantomjs
【讨论】:
【参考方案10】:是的,Selenium 支持无头浏览器测试。无头浏览器比实时浏览器更快。
【讨论】:
【参考方案11】:在 linux 服务器上安装 chromeDriver
和 google-chrome-stable
版本,将触发测试并在代码中添加相同的二进制文件。
代码sn-p:
private static String driverPath = "/usr/bin/chromedriver";
static
System.setProperty("webdriver.chrome.driver", driverPath);
options = new ChromeOptions();
options.setBinary("/usr/bin/google-chrome-stable");
options.addArguments("headless");
driver = new ChromeDriver(options);
【讨论】:
【参考方案12】:这是关于如何在运行 Django/Python 的 Ubuntu Linux 环境中将 Selenium 与 xvfb 和 Firefox 驱动程序一起使用的“现代答案”:
# install xvfb and Firefox driver
sudo su
apt-get install -y xvfb firefox
wget https://github.com/mozilla/geckodriver/releases/download/v0.19.1/geckodriver-v0.19.1-linux64.tar.gz
tar -x geckodriver -zf geckodriver-v0.19.1-linux64.tar.gz -O >
/usr/bin/geckodriver
chmod +x /usr/bin/geckodriver
# install pip modules
pip install selenium
pip install PyVirtualDisplay
然后您可以关注Django LiveServerTestCase instructions。
要使用您刚刚安装的驱动程序,请执行以下操作:
from pyvirtualdisplay import Display
from selenium.webdriver.firefox.webdriver import WebDriver
driver = WebDriver(executable_path='/usr/bin/geckodriver')
display = Display(visible=0, size=(800, 600)).start()
# add your testing classes here...
driver.quit()
display.stop()
【讨论】:
以上是关于Selenium 是不是支持无头浏览器测试?的主要内容,如果未能解决你的问题,请参考以下文章