Running Headless Selenium on a Raspberry Pi
I wanted to run Selenium WebDriver headlessly on a Raspberry Pi for a project of mine (not related to automated testing). Here’s what I did:
1. Install Ruby. In my case, the version didn’t matter, so I installed it lazily with sudo apt-get install ruby
. Note that the repo’s Ruby is a bit old (1.9.1), so you should use RVM if the version matters.
2.Install Mozilla Iceweasel, Debian’s rebranded version of Mozilla Firefox. Make sure to apt-get update
and upgrade
; the Iceweasel install didn’t work for me until I did.
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install iceweasel
3. Install Xvfb, which is a virtual framebuffer that lets you run stuff like Iceweasel headlessly.
sudo apt-get install xvfb
4.Get the gems you need:
sudo gem install selenium-webdriver
sudo gem install headless # Ruby wrapper for Xvfb
5. Disable ipv6 on the Pi. To do this you’ll need to modify two files. Modify /etc/modprobe.d/ipv6.conf
:
plain /etc/modprobe.d/ipv6.conf
# Don't load ipv6 by default
alias net-pf-10 off
alias ipv6 off
and modify /etc/hosts
:
/etc/hosts
127.0.0.1 localhost
#::1 localhost ip6-localhost ip6-loopback
#fe00::0 ip6-localnet
#ff00::0 ip6-mcastprefix
#ff02::1 ip6-allnodes
#ff02::2 ip6-allrouters
127.0.1.1 raspberrypi
6. At this point, everything should “just work.” Write a quick script and test it out!
require 'selenium-webdriver'
require 'headless'
headless = Headless.new
headless.start
driver = Selenium::WebDriver.for :firefox
driver.navigate.to 'http://google.com'
puts driver.title
headless.destroy