mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-11 13:48:23 +02:00
97 lines
3.5 KiB
Python
Executable file
97 lines
3.5 KiB
Python
Executable file
#!/usr/bin/env python
|
|
|
|
from selenium import webdriver
|
|
from PIL import Image
|
|
from os import listdir
|
|
from os.path import isfile, join
|
|
import subprocess
|
|
import argparse
|
|
import re
|
|
from os import path
|
|
|
|
refs_location = path.join(path.dirname(__file__), "refs")
|
|
newscreenshots_location = path.join(path.dirname(__file__), "new")
|
|
diff_location = path.join(path.dirname(__file__), "diff")
|
|
ui_showcase_url = "http://localhost:3000/ui/"
|
|
|
|
def take_screenshots(dir_name):
|
|
fox = webdriver.Firefox()
|
|
# Open the UI Showcase
|
|
fox.get(ui_showcase_url)
|
|
# Find all component containers
|
|
elements = fox.find_elements_by_css_selector(".example")
|
|
regex = re.compile(r"[/\\(),':\-]")
|
|
|
|
for element in elements:
|
|
header = element.find_element_by_css_selector("h3")
|
|
component = element.find_element_by_css_selector(".comp iframe")
|
|
location = component.location
|
|
size = component.size
|
|
element_id = re.escape(re.sub(regex, '', header.get_attribute("id")))
|
|
title = path.join(dir_name, element_id + ".png")
|
|
print title
|
|
|
|
fox.save_screenshot(title) # saves screenshot of entire page
|
|
|
|
im = Image.open(title) # uses PIL library to open image in memory
|
|
|
|
left = location["x"]
|
|
top = location["y"]
|
|
right = location["x"] + size["width"]
|
|
bottom = location["y"] + size["height"]
|
|
|
|
im = im.crop((left, top, right, bottom)) # defines crop points
|
|
im.save(title) # saves new cropped image
|
|
|
|
fox.quit()
|
|
|
|
def diff_screenshots():
|
|
onlyfiles = [ f for f in listdir(refs_location)
|
|
if isfile(join(refs_location,f)) and f[-3:] == "png" ]
|
|
|
|
for f in onlyfiles:
|
|
print f
|
|
ref_file = path.join(refs_location, f)
|
|
new_file = path.join(newscreenshots_location, f)
|
|
diff_file = path.join(diff_location, f)
|
|
compare_cmd = "compare '" + ref_file + "' '" + new_file + \
|
|
"' '" + diff_file + "'"
|
|
join_cmd = "convert +append '" + ref_file + "' '" + diff_file + \
|
|
"' '" + new_file + "'" + " '" + diff_file + "_joined.png'"
|
|
remove_cmd = "rm " + diff_file
|
|
|
|
cmd = compare_cmd + " ; " + join_cmd + " ; " + remove_cmd
|
|
print cmd
|
|
subprocess.Popen(cmd, shell=True)
|
|
|
|
def cleanup(clean_location):
|
|
files = [ f for f in listdir(clean_location)
|
|
if isfile(join(clean_location,f)) and f[-3:] == "png" ]
|
|
|
|
for f in files:
|
|
remove_cmd = "rm " + re.escape(path.join(clean_location, f))
|
|
subprocess.Popen(remove_cmd, shell=True)
|
|
|
|
description = "Firefox Hello test for visual regressions. Run once before " + \
|
|
"making any changes with --refs to build the reference files " + \
|
|
"and once more with your patch applied using --diffs. If any " + \
|
|
"screenshots have changed they will show up in /test/diff."
|
|
|
|
parser = argparse.ArgumentParser(description=description)
|
|
parser.add_argument("-r", "--refs", action="store_true", help="Build the " +
|
|
"reference screenshots.")
|
|
parser.add_argument("-d", "--diffs", action="store_true", help="Compare " +
|
|
"your changes against the reference screenshots.")
|
|
parser.add_argument("-c", "--cleanup", action="store_true", help="Remove " +
|
|
"all files from /diff and /new folders but not the " +
|
|
"reference files")
|
|
args = parser.parse_args()
|
|
|
|
if args.refs:
|
|
take_screenshots(refs_location)
|
|
if args.diffs:
|
|
take_screenshots(newscreenshots_location)
|
|
diff_screenshots()
|
|
if args.cleanup:
|
|
cleanup(newscreenshots_location)
|
|
cleanup(diff_location)
|