首先,即使我使用python编写单元测试,这个问题也很普遍,因此,如果您可以编写一些示例,比如说在Java或C#中,它们非常受欢迎,但是Python是确实更好。
我当前正在使用页面对象模式。我的 page.py 文件中有以下课程:
class BasePage(abc.ABC):
@abc.abstractmethod
def __init__(self, driver):
self.driver = driver
@abc.abstractmethod
def load(self):
pass
def click(self, locator, explicit_wait=settings.EXPLICIT_WAIT):
self.wait_for_element(locator, explicit_wait).click()
def wait_for_element(self, locator, explicit_wait=settings.EXPLICIT_WAIT):
return WebDriverWait(self.driver, explicit_wait).until(EC.presence_of_element_located(locator))
class MainPage(BasePage):
URL = settings.ROOT_URL
def __init__(self, driver):
super().__init__(driver)
self.load()
def confirm_age(self):
self.click(locators.MainPageLocators.CONFIRM_AGE_BUTTON)
def accept_cookie_policy(self):
self.click(locators.MainPageLocators.ACCEPT_COOKIE_BUTTON)
def load(self):
self.driver.get(MainPage.URL)
self.confirm_age()
self.accept_cookie_policy()
现在,其中一项测试需要从主页(映射到MainPage)加载所谓的ShopPage。我认为,仅针对此特定测试,在其load方法中定义ShopPage加载的特定逻辑不是一个好主意。 Cos,我们可能想以不同的方式或在不同的情况下加载它。这就是我的想法。我的问题是:允许这种行为的最佳方法是什么?我想实现一个特殊的方法,例如loads_from
,从页面中加载一个类,并使用by
参数作为定位器。但是看来我做错了。通常如何完成?
也许这种情况应该由建造者建造?或者可能是工厂在给定场景下可以使用正确的加载方法返回对象?