I was trying to create the selenium web element object repository in python. I have come up with three ways to do so. However, I am new to python so I am not sure which one is better than other.
Note: I am using Page object pattern for writing my tests, however just for understanding and simplicity I have put all the function in one file (class).
First: Using Decorator
def FindBy(by, value):
def decorator(func):
def wrapper(self):
return self.driver.find_element(by, value)
return wrapper
return decorator
class TestGoogle(object):
@FindBy(By.NAME, "q")
def search_input(self): pass
def test_search(self):
self.driver = webdriver.Firefox()
self.driver.get("https://google.com")
self.search_input().send_keys("selenium python")
Second & Third: using Lambda and Method
class TestGoogle(object):
def find_element(self, by, value):
return self.driver.find_element(by, value)
def search_input(self): return self.find_element(By.NAME, "q")
search_input_1 = lambda self: self.find_element(By.NAME, "q")
def test_search(self):
self.driver = webdriver.Firefox()
self.driver.get("https://google.com")
self.search_input().send_keys("selenium python")
self.search_input_1().clear()