Selenium是否支持无头浏览器测试?


73

我目前正在查看Selenium Server,但似乎没有注意到支持无头浏览器测试的驱动程序。

除非我弄错了,否则它不支持。如果您使用的是X,则可以创建一个虚拟的帧缓冲区来隐藏浏览器窗口,但这并不是真正的无头浏览器。

谁能启发我?Selenium是否支持无头浏览器测试?

Answers:


19

您无需使用PhantomJS来替代Selenium。Selenium包括一个在GhostDriver平台上运行的PhantomJS Webdriver类。只需将PhantomJS二进制文件安装到您的计算机即可。在python中,您可以使用:

from selenium import webdriver
dr = webdriver.PhantomJS() 

和瞧。


使用Python和PhantomJS进行无头硒测试
-realpython.com/blog/python/…–

4
不要使用PhantomJS,它不是很可靠。人们应该使用Xvfb来运行Chrome或Firefox。
ffxsam 2015年

3
更新:考虑到Chrome 51的--headless标记,不再支持PhantomJS
Jay Wick

15

WebDriver API支持HTMLUnit作为测试的浏览器。Ruby人们已经使用Capybara进行无头硒测试已有一段时间了,因此它绝对是可行的。


抱歉,这是我有点困惑的地方-Selenium和Webdriver有什么区别?
khoomeister 2011年

1
有关Selenium和WebDriver的详细说明,请参见stackoverflow.com/questions/6995016/…
Craig Delthony 2011年

1
旧问题,但是如果您可以编辑答案以包含PhantomJS,那就太好了。
Arpit Rai 2014年

11

我知道这是旧帖子。认为它会帮助正在寻找答案的其他人。

您可以使用XVFB在任何Linux发行版中安装完整版本的firefox。这样可以确保在真实的浏览器中执行测试。一旦完成了无头设置,就可以使用您选择的webdriver连接并运行测试。


7

无头浏览器是个坏主意。它们为您提供了一些测试,但是却没有真正的用户所看到的东西,并且它们掩盖了只有真正的浏览器才会遇到的许多问题。在无头环境(例如Windows或具有XVFB的Linux )上使用“带头”的浏览器(HTMLUnit以外的任何东西),您将获得无限的收益。


16
不,您想要持续集成,所以无头只是逻辑。为什么要掩盖问题?无头只是意味着不使用任何图形设备。
罗兰·科夫勒

1
@Roo OP明确地说:“您可以创建一个虚拟的帧缓冲区来隐藏浏览器窗口,但这并不是真正的无头浏览器”,他的意思不是“不使用任何图形设备”。实际上,您和我都同意-运行没有显示功能的真实浏览器,一切都会很好。
罗斯·帕特森

1
@Roo,我看到无头测试失败了,实际上该Web应用程序在所有浏览器中都能正常运行并且代码还可以。而且我已经看到,无头的测试成功了,实际上,至少在某些浏览器中,Web应用程序损坏了。我不相信无头的测试。他们是比什么都没有,我想,但应与有问题的Web应用程序中最“重要”的浏览器的自动测试相结合更好,想。
KajMagnus

@KajMagnus我见过xvfb上的“无头”测试实际上在实际图形环境中工作时失败了。在开发的这个阶段,不得不与webdriver一起工作只是痛苦。很多错误,很多头痛,没有真正的选择……
antimatter 2015年

7

我注意到您说使用X帧缓冲区并不是真正的无头解决方案,但是,对于大多数人来说,我认为这是可以接受的。除此之外,如果您对此解决方案感兴趣,此服务将帮助您实现这一目标。


2

Selenium确实以某种方式支持无头浏览器测试。Docker Selenium由SeleniumHQ维护。这些docker容器开箱即用,具有xvfb支持。有一些像PhantomJS这样的工具可以与Selenium连接。但是,Selenium本身并未正式支持它。

就像其他人所描述的一样,实际上不建议使用PhantomJS。Selenium的全部重点是使浏览器自动化。但是为什么要自动化没有人使用的浏览器呢?我从未理解过开发人员如何经常忽略它。


2

是。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);

0

是的,硒支持无头浏览器测试...但是我发现HTMLUnit大多数时候都失败了...我正在寻找替代方法... PhantomJs真的很棒。与其他浏览器相比,您绝对可以尝试一下它非常快对烟雾测试真的很好

http://phantomjs.org/


0

使用ruby和macOS:brew install phantomjs然后:

driver = Selenium::WebDriver.for :phantomjs

0

是的Selenium支持无头浏览器测试。无头浏览器比实时浏览器更快。


0

在linux服务器上进行安装chromeDrivergoogle-chrome-stable版本控制,在该服务器上将触发测试,并在代码中添加相同的二进制文件。

代码段:

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);
}

0

这是关于如何在运行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的说明进行操作

要使用刚安装的驱动程序,请执行以下操作:

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()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.