ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

任何人都可以启发我吗? Selenium 是否支持无头浏览器测试?


M
Magenta Nova

你不需要使用 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
A
AutomatedTester

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


抱歉,这是我有点困惑的地方 - selenium 和 webdriver 有什么区别?
有关 Selenium 和 WebDriver 的详细说明,请参阅 Ross Patterson 在 stackoverflow.com/questions/6995016/… 的回答
老问题,但如果您可以编辑答案以包括 PhantomJS,那就太好了。
M
Matt

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

您可以使用 XVFB 在任何 linux 发行版中安装完整的 firefox。这可以确保您的测试是在真实的浏览器中执行的。一旦你有一个无头设置,你可以使用你选择的 webdriver 来连接和运行测试。


R
Ross Patterson

无头浏览器是个坏主意。它们为您提供一些测试,但与真实用户所看到的完全不同,它们掩盖了许多只有真实浏览器才会遇到的问题。在无头环境(例如,Windows 或带有 XVFB 的 Linux)上使用“有头”浏览器(即除了 HTMLUnit 之外的任何东西)会更好。


不,你想要持续集成,所以无头只是逻辑。为什么要掩盖问题?无头仅意味着不使用图形设备。
@Roo OP很清楚地说“您可以创建一个虚拟帧缓冲区来隐藏浏览器窗口,但这并不是真正的无头浏览器”,他并不是说“没有使用图形设备”。事实上,你我都同意——运行一个没有显示器的真正浏览器,一切都会好起来的。
@Roo,我已经看到无头测试失败,而实际上网络应用程序在所有浏览器中都可以正常工作并且代码没问题。而且我已经看到无头测试在实践中至少在某些浏览器中被破坏时成功。我不相信无头测试。我想它们总比没有好,但应该结合对相关网络应用程序最“重要”浏览器的自动测试,认为。
@KajMagnus 我已经看到 xvfb 上的“无头”测试在实践中在真实的图形环境中工作时失败。这只是在开发的这个阶段必须使用 webdriver 的痛苦。很多错误,很多令人头疼的问题,没有真正的替代品......
G
General Redneck

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


S
Sean

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

就像其他人所描述的那样,PhantomJS 并不是真正推荐的。 Selenium 的全部意义在于使浏览器自动化。但是,为什么要自动化没有人使用的浏览器呢?我从来不明白开发人员如何经常忽视这一点..


R
Radadiya Nikunj

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

V
Vicky

是的,selenium 支持无头浏览器测试...但我发现 HTMLUnit 大部分时间都失败了...我正在寻找替代方案...PhantomJs 真的很棒。你绝对可以试一试它与其他浏览器相比非常快...烟雾测试真的很好...

http://phantomjs.org/


D
Dorian

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

driver = Selenium::WebDriver.for :phantomjs

S
Siva K

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


g
gehbiszumeis

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

C
Cloud Artisans

这是关于如何在运行 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()