Introduction¶
Here is an example for taking screenshots at runtime, and for comparing images/screenshots at runtime with the help of an external (Java-based) tool:
import os
import os.path
import subprocess
import sys
def main():
startApplication("myaut")
# Create remote screenshot and copy
# screenshot file to the local computer:
some_object = waitForObject("some_object_name_here")
img1 = "temp1.png"
myGrabWidget(window, img1)
# Do something in application...
# Create remote screenshot and copy
# screenshot file to the local computer:
img2 = "temp2.png"
myGrabWidget(window, img2)
# Compare images:
if compare_images(img1, img2):
test.passes("Images are identical")
else:
test.fail("Images are different")
def compare_images(img1, img2):
# Verify that CompareImages.class exists
# in the test suite folder:
compare_tool_class = squishinfo.testCase + "/../CompareImages.class"
if not os.path.exists(compare_tool_class) or os.path.isdir(compare_tool_class):
raise RuntimeError("Compare tool .class file not found. Aborting...")
compare_tool_name = squishinfo.testCase + "/../CompareImages.sh"
if sys.platform == "win32":
compare_tool_name = squishinfo.testCase + "/../CompareImages.bat"
# Verify that CompareImages.bat/.sh exists
# in the test suite folder:
if not os.path.exists(compare_tool_name) or os.path.isdir(compare_tool_name):
raise RuntimeError("Compare tool '%s' not found. Aborting..." % compare_tool_name)
# Verify that CompareImages.bat/,sh file
# can be executed:
try:
proc = subprocess.Popen(args=[compare_tool_name])
proc.communicate()
if proc.returncode != 10:
raise RuntimeError("Executing compare tool ('%s') failed (exit code %s). Is it executable?" % (compare_tool_name, exit_code))
except OSError:
raise RuntimeError("Executing compare tool ('%s') failed. Is it executable?" % (compare_tool_name))
# Compare images:
args = [compare_tool_name, img1, img2]
proc = subprocess.Popen(args)
proc.communicate()
test.log("%s" % proc.returncode)
return proc.returncode == 0
def myGrabWidget(widget, filename):
# Create remote screenshot:
img = grabWidget(widget)
# Save image on the computer where the application is running.
# (Use object.grabScreenshot() to have the image on the
# computer where the Squish IDE (or squishrunner) is being
# executed. See https://doc.qt.io/squish/squish-api.html#object-grabscreenshot-function)
img.save(filename, "PNG")
# Copy remote file to computer that is
# executing this script/squishrunner;
# file will be in squishrunner working
# directory (default is test case folder):
testData.get(filename)
Required Files¶
These files need to be placed into the test suite folder (not in any of the test case folders).
CompareImages.bat (for Windows)
CompareImages.sh (for Unix)
CompareImages.class (compiled with JDK 1.8.0_112)