Some of Squish's functions raise catchable exceptions on failure. We can write our test scripts so that they can catch these exceptions and respond accordingly—for example, by recording a test failure in the test log.
The exception handling mechanism works the same way for each scripting
language, no matter what function raised the exception, so we only need
to look at one example to see how it is done. To get an exception immediately
and suppress the Object Not Found dialog, we set
objectNotFoundDebugging to false
in
testsettings.
def main(): startApplication('"' + os.environ["SQUISH_PREFIX"] + '/examples/qt/paymentform/paymentform"') testSettings.objectNotFoundDebugging = False try: waitForObject(names.make_Payment_Check_Signed_QCheckBox, 2000) test.xpasses("Found the checkbox") except LookupError as err: test.xfail("Expectedly failed to find the checkbox", str(err))
function main() { startApplication('"' + OS.getenv("SQUISH_PREFIX") + '/examples/qt/paymentform/paymentform"'); testSettings.objectNotFoundDebugging = false; try { checkBox = waitForObject(names.makePaymentCheckSignedQCheckBox, 2000); test.xpass("Found the checkbox"); } catch (err) { test.xfail("Expectedly failed to find the checkbox", String(err)); }
sub main { startApplication("\"$ENV{'SQUISH_PREFIX'}/examples/qt/paymentform/paymentform\""); testSettings->objectNotFoundDebugging(0); eval { my $checkBox = waitForObject($Names::make_payment_check_signed_qcheckbox, 2000); test::xpass("Found the checkbox"); }; test::xfail("Expectedly failed to find the checkbox", "$@") if $@;
def main startApplication("\"#{ENV['SQUISH_PREFIX']}/examples/qt/paymentform/paymentform\"") TestSettings.objectNotFoundDebugging = false begin checkBox = waitForObject(Names::Make_Payment_Check_Signed_QCheckBox, 2000) Test.xpass("Found the checkbox") rescue Squish::LookupError => err Test.xfail("Expectedly failed to find the checkbox", String(err)) end sendEvent("QCloseEvent", waitForObject(Names::Make_Payment_MainWindow)) end
proc main {} { startApplication "\"$::env(SQUISH_PREFIX)/examples/qt/paymentform/paymentform\"" testSettings set objectNotFoundDebugging false if {[catch { set checkBox [waitForObject $names::Make_Payment_Check_Signed_QCheckBox 2000] } result]} { test xfail "Expectedly failed to find the checkbox" $result } else { test xpass "Found the checkbox" }
The waitForObject
function tries to find
the specified object. If the object is not accessible—perhaps
because it isn't visible—within the timeout period, the function
raises a catchable exception. Since we want to demonstrate a thrown exception
but still have the test case pass, we call the test.xpass
function if the object (a checkbox in
this example) is found within the timeout period, and the test.xfail
function if the object isn't found and
giving the exception (in string form) as the details text.
In most cases and for most languages Squish simply raises the
language's base class exception (e.g., Exception
in Python
and StandardError
in Ruby). However, for
Python and Ruby, when an object can't be found a more specific
LookupError
(Squish::LookupError
in Ruby) is
raised.
![]() | Python-specific |
---|---|
In Python, we must use the |