Selenium for python中的多个页面加载方案

时间:2018-12-15 11:02:57

标签: python selenium

首先,即使我使用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参数作为定位器。但是看来我做错了。通常如何完成?

也许这种情况应该由建造者建造?或者可能是工厂在给定场景下可以使用正确的加载方法返回对象?

0 个答案:

没有答案