Forum Discussion

sriram_sig's avatar
sriram_sig
Contributor
6 years ago

Exception handling using python

I'm trying to use Try block to catch element not found exception and Log a message whenever there is an exception.

But for some reason, when a exception occurs the control does not seem to get into the except block and the log message is not printed. But since i have a try block, even if a error occurs in the if statement the code does not stop getting executed.

      try:
        if page.FindChildByXPath(NoApprovals).VisibleOnScreen == True:
          Queue[i]=0
          Log.Message("found")
      except Exception as e:
        Log.Message("Element not found")

 

  • I'm not sure this is exactly a Python problem.  I see two potential issues with the code.

     

    1) What if FindChildByXPath actually returns an empty stub object?  That object does not have the "VisibleOnScreen" property.  Errors like that don't raise as "exceptions", those are object recognition errors that need to be handled differently.  What you should do is check "Exists", not "VisibleOnScreen", if Exists is true, then you can do any other checks you want.  

    2) You're doing a search by XPath.  VisibleOnScreen is a property that TestComplete applies to distinct objects.  Finding an object by XPath does not ALWAYS return an object that TestComplete can interact with as a UI object so it might not even have the VisibleOnScreen property. Again... this would be an object recognition error, but with a different root cause.  This would not raise an exception and would not go into the except block. 

  • tristaanogre's avatar
    tristaanogre
    Esteemed Contributor

    I'm not sure this is exactly a Python problem.  I see two potential issues with the code.

     

    1) What if FindChildByXPath actually returns an empty stub object?  That object does not have the "VisibleOnScreen" property.  Errors like that don't raise as "exceptions", those are object recognition errors that need to be handled differently.  What you should do is check "Exists", not "VisibleOnScreen", if Exists is true, then you can do any other checks you want.  

    2) You're doing a search by XPath.  VisibleOnScreen is a property that TestComplete applies to distinct objects.  Finding an object by XPath does not ALWAYS return an object that TestComplete can interact with as a UI object so it might not even have the VisibleOnScreen property. Again... this would be an object recognition error, but with a different root cause.  This would not raise an exception and would not go into the except block. 

    • sriram_sig's avatar
      sriram_sig
      Contributor

      Thanks for your response. Actually the if statement in my code was not returning an exception since it was returning an empty stub object. Also i wanted to know the best way in testcomplete to store my object names and its corresponding xpath like a key-value pair, when using selenium with java i used to store these values in a properties file. so loooking for something similar in testcomplete

      • tristaanogre's avatar
        tristaanogre
        Esteemed Contributor

        You mean.... like.... NameMapping?

         

        While, it doesn't use XPath (in fact, in the TestComplete universe, XPath should only be used if the object is not available/visible to the main object browser), it provides an object repository with object hierarchy and properties providing the identification factors.  I know you're probably coming from Selenium... but this is a different tool with a built in object recognition feature...  Rather than re-invent the wheel, you might find that to work better.