Early this year Carlos Campos from Igalia implemented an automation mode in GNOME Web (sometimes known as Epiphany). This is especially useful for automated web testing, a subset of GUI testing. I decided it was time to take it for a spin. Carlos has covered the details in his post, here I will focus on the practical requirements to get things running in PureOS.
We will use the version of GNOME Web included in PureOS (currently 3.32.1.2) and the Python-based Selenium driver.
sudo apt install epiphany-browser # already installed, so not strictly neccessary
sudo apt install webkit2gtk-driver # required for browser integration
sudo apt install python3 pipenv # basic Python tools, don't leave home without 'em
mkdir webtest
cd webtest
pipenv install selenium # get latest version from PyPIYou’ll note that we’re using Pipenv to isolate our Python packages. This helps when sharing the tests between developers and machines. The upshot is that to access the Python libraries we must:
cd webtest)pipenv run pythonNow create a simple Python file called web.py. I really liked Carlos’ encapsulation of GNOME Web as a Selenium driver:
from selenium import webdriver
class Epiphany(webdriver.WebKitGTK):
def __init__(self):
options = webdriver.WebKitGTKOptions()
options.binary_location = 'epiphany'
options.add_argument('--automation-mode')
options.set_capability('browserName', 'Epiphany')
options.set_capability('version', '3.32')
webdriver.WebKitGTK.__init__(self, options=options, desired_capabilities={})
# Simple test
ephy = Epiphany()
ephy.get('https://pureos.net')
ephy.quit()Now invoke the code:
pipenv run python web.pyAn orange-bordered web window will briefly appear, load the page and then close:

We can now set up a testing skeleton. Let’s keep the Epiphany class, but remove everything from # Simple test onwards. Instead we’ll create a new file called test_web.py:
from web import Epiphany
def test_load():
ephy = Epiphany()
ephy.get('https://pureos.net')
ephy.quit()Before we can use this file we need to install a testing framework:
pipenv install pytestAnd now we can run the tests:
pipenv run pytestFinally we will perform a simple web test using the Selenium API. Expand test_web.py as follows:
from web import Epiphany
def test_load():
ephy = Epiphany()
ephy.get('https://pureos.net')
ephy.quit()
def test_title():
ephy = Epiphany()
ephy.get('https://puri.sm')
assert 'Purism' in ephy.title
ephy.quit()Now invoke pytest again. You should get a result with 2 passed.
For more details on the Selenium API, see https://www.selenium.dev/selenium/docs/api/py/
With that, you are ready to create web tests using the default PureOS browser.