mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Automation Script to take screenshot for servo
This commit is contained in:
parent
34f388229d
commit
437276d3dc
3 changed files with 157 additions and 1 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -23,7 +23,7 @@ Servo.app
|
|||
.config.mk.last
|
||||
/glfw
|
||||
capture_webrender/
|
||||
|
||||
/screenshots
|
||||
# Editors
|
||||
|
||||
# IntelliJ
|
||||
|
|
132
etc/servo_automation_screenshot.py
Normal file
132
etc/servo_automation_screenshot.py
Normal file
|
@ -0,0 +1,132 @@
|
|||
# Copyright 2018 The Servo Project Developers. See the COPYRIGHT
|
||||
# file at the top-level directory of this distribution.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
# option. This file may not be copied, modified, or distributed
|
||||
# except according to those terms.
|
||||
|
||||
"""
|
||||
Created on Mon Mar 26 20:08:25 2018
|
||||
@author: Pranshu Sinha, Abhay Soni, Aayushi Agrawal
|
||||
"""
|
||||
|
||||
"""
|
||||
The below program is intended to test rendering mismatches in servo by taking screenshots of rendered html files.
|
||||
Here is the breakdown of how our code works:
|
||||
* A session is started on localhost:7002
|
||||
* The randomly generated webpage's (html files) data is sent as JSON to this session
|
||||
* Using curl request, we load the html files for this session ID based on the session we just created.
|
||||
"""
|
||||
import os
|
||||
import json
|
||||
import requests
|
||||
import start_servo
|
||||
import time
|
||||
import base64
|
||||
import sys
|
||||
import getopt
|
||||
|
||||
|
||||
def print_help():
|
||||
|
||||
print('\nPlease enter the command as shown below: \n')
|
||||
print('python3 ./etc/servo_automation_screenshot.py -p <port>'
|
||||
+ ' -i /path/to/folder/containing/files -r <resolution>'
|
||||
+ ' -n num_of_files\n')
|
||||
|
||||
|
||||
def servo_ready_to_accept(url, payload, headers):
|
||||
while(True):
|
||||
|
||||
try:
|
||||
# Before sending an additional request, we wait for one second each time
|
||||
time.sleep(1)
|
||||
session_request = requests.post(url, data=payload, headers=headers)
|
||||
json_string = session_request.json()
|
||||
# On success, we move on to render the files
|
||||
break
|
||||
except Exception as e:
|
||||
time.sleep(5)
|
||||
print('Exception: ', e)
|
||||
return json_string
|
||||
|
||||
|
||||
def ensure_screenshots_directory_exists():
|
||||
if not os.path.exists('screenshots'):
|
||||
os.makedirs('screenshots')
|
||||
|
||||
|
||||
def render_html_files(num_of_files, url, file_url, json_string, headers, cwd):
|
||||
for x in range(num_of_files):
|
||||
|
||||
json_data = {}
|
||||
json_data['url'] = 'file://{0}file{1}.html'.format(file_url, str(x))
|
||||
print(json_data['url'])
|
||||
json_data = json.dumps(json_data)
|
||||
requests.post('{0}/{1}/url'.format(url, json_string['value']['sessionId']), data=json_data, headers=headers)
|
||||
screenshot_request = requests.get('{0}/{1}/screenshot'.format(url, json_string['value']['sessionId']))
|
||||
image_data_encoded = screenshot_request.json()['value']
|
||||
with open("screenshots/output_image_{0}.png".format(str(x)), "wb") as image_file:
|
||||
image_file.write(base64.decodebytes(image_data_encoded.encode('utf-8')))
|
||||
print("################################")
|
||||
print("The screenshot is stored in the location: {0}/screenshots/"
|
||||
+ " with filename: output_image_{1}.png".format(cwd, str(x)))
|
||||
print("################################")
|
||||
|
||||
|
||||
def main(argv): # take inputs from command line by considering the options parameter i.e -h, -p etc.
|
||||
|
||||
# Local Variables
|
||||
port = ''
|
||||
resolution = ''
|
||||
file_url = ''
|
||||
num_of_files = ''
|
||||
cwd = os.getcwd()
|
||||
url = ''
|
||||
payload = "{}"
|
||||
headers = {'content-type': 'application/json', 'Accept-Charset': 'UTF-8'}
|
||||
json_string = ''
|
||||
try:
|
||||
# input options defined here.
|
||||
opts, args = getopt.getopt(argv, "p:i:r:n:", ["port=", "ifile=", "resolution=", "num-files="])
|
||||
except getopt.GetoptError:
|
||||
# an error is generated if the options provided in commandline are wrong.
|
||||
# The help statement is printed on how to input command line arguments.
|
||||
print_help()
|
||||
sys.exit(2)
|
||||
for opt, arg in opts:
|
||||
if opt == '-h': # -h means help. Displays how to input command line arguments
|
||||
print_help()
|
||||
sys.exit()
|
||||
elif opt in ("-p", "--port"): # store the value provided with the option -p in port variable.
|
||||
port = arg
|
||||
elif opt in ("-i", "--ifile"): # store the value provided with the option -i in inputfile variable.
|
||||
file_url = arg
|
||||
elif opt in ("-r", "--resolution"): # store the value provided with the option -r in resolution variable.
|
||||
resolution = arg
|
||||
elif opt in ("-n", "--num-files"): # store the value provided with the option -n in num_of_files variable.
|
||||
num_of_files = arg
|
||||
|
||||
url = 'http://localhost:{0}/session'.format(port)
|
||||
num_of_files = int(num_of_files)
|
||||
|
||||
# Starting servo on specified port
|
||||
start_servo.start_servo(port, resolution)
|
||||
|
||||
# Waiting until servo is ready to render files
|
||||
json_string = servo_ready_to_accept(url, payload, headers)
|
||||
|
||||
# Making sure the screenshots directory exists, if not, create it
|
||||
ensure_screenshots_directory_exists()
|
||||
|
||||
# Render each HTML file and take a screenshot
|
||||
render_html_files(num_of_files, url, file_url, json_string, headers, cwd)
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 8:
|
||||
print_help()
|
||||
sys.exit()
|
||||
else:
|
||||
main(sys.argv[1:])
|
24
etc/start_servo.py
Normal file
24
etc/start_servo.py
Normal file
|
@ -0,0 +1,24 @@
|
|||
# Copyright 2018 The Servo Project Developers. See the COPYRIGHT
|
||||
# file at the top-level directory of this distribution.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
# option. This file may not be copied, modified, or distributed
|
||||
# except according to those terms.
|
||||
|
||||
"""
|
||||
Created on Mon Mar 26 20:08:25 2018
|
||||
@author: Pranshu Sinha, Abhay Soni, Aayushi Agrawal
|
||||
The script is intended to start servo on localhost:7002
|
||||
"""
|
||||
import subprocess
|
||||
|
||||
|
||||
def start_servo(port, resolution):
|
||||
|
||||
# Use the below command if you are running this script on windows
|
||||
# cmds = 'mach.bat run --webdriver ' + port + ' --resolution ' + resolution
|
||||
cmds = './mach run --webdriver ' + port + ' --resolution ' + resolution
|
||||
process = subprocess.Popen(cmds, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
return process
|
Loading…
Add table
Add a link
Reference in a new issue