Ask a Question

How to call methods of user defined objects in keyword test?

SOLVED
ucuber
Occasional Contributor

How to call methods of user defined objects in keyword test?

Hi *,

 

maybe this was asked before, but I can't find a solution.

 

Given: 

 

- language: python

- class definition:

  remark: I prefer identifying page elements with css-selectors because the name mapping tree seems to be to inconvenient to me, especially when there are still coming layout changes. Coming from angular there are too much panels, you know?

class AppLogin(WebElement):
  def __repr__(self):
    return "{}()".format(self.__class__.__name__)
  
  def __str__(self):
    return "{}".format(self._selectors)
    
  def __init__(self, page):
    super().__init__(page)
    self._selectors = dict(
      InputUsername=r'app-login input[type=text]',
      InputPassword=r'app-login input[type=password]',
      MessageArea=r'app-login p',
      ButtonLogin=r'app-login button[type=submit]',    
    )
  
  #-- API --     
  @property
  def InputUsername(self):
    return self.get("InputUsername")
  
  ...

  #-- Convenience --                 
  def set_username(self, text):
    self.InputUsername.Click()
    self.InputUsername.SetText(text)
    return self

  ...

- what I want to do:

 

  in a keywordtest I would like to define a step, where the object of type AppLogin is instantiated and the method set_username called: AppLogin(page).set_username("blah"). I do not want to write a wrapper function around it, because this adds another level of indirection, what I do not think is a good solution.

 

If someone of you has an idea to call the method directly as shown above in the keyword test?

 

Regards

 

Ulrich

 

1 REPLY 1
tristaanogre
Esteemed Contributor

Short answer: you can't.  Keyword tests do not have access to the objects declared in script code without having some sort of instance or wrapper around it.  You can call a Script Routine from a keyword test but the class you have created is not available to the keyword test engine.  Your best solution is to create a wrapper function around that class so that you can call it from the keyword test.


Robert Martin
[Hall of Fame]
Please consider giving a Kudo if I write good stuff
----

Why automate?  I do automated testing because there's only so much a human being can do and remain healthy.  Sleep is a requirement.  So, while people sleep, automation that I create does what I've described above in order to make sure that nothing gets past the final defense of the testing group.
I love good food, good books, good friends, and good fun.

Mysterious Gremlin Master
Vegas Thrill Rider
Extensions available
cancel
Showing results for 
Search instead for 
Did you mean: