通过调用 PageObject 导航到页面

Navigating to a page by calling it's PageObject

我正在编写一些 selenium 测试,想知道如何导航到我的 ProfilePage,只需在我的测试中调用它 class 所以我得到了我的 BasePage class,

class BasePage(object):
    def __init__(self,driver):
        self.driver = driver  
        self._validate_page(driver)

    @abstractclassmethod
    def _validate_page(self,driver):
        return

class PageNotDisplayedException(Exception):
 """throw this exception when page was not displayed, or different page is displayed""" 
       pass

我的 BaseTestCase class

class BaseTestCase(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(5)
        self.driver.maximize_window()

        # navigate to the application home page
        self.driver.get('http://www.facebook.com')

    def navigateTo(self, to):
        self.driver.get(to)

    def tearDown(self):
        # close the browser window
        self.driver.quit()

和我的烟熏测试。在我的 smoketest 中,我想放置类似 navigateTo(ProfilePage) 的东西,而不是直接调用 webdriver 的测试。

class SmokeTest(BaseTestCase):
    def test_login(self):
        LoginPage(self.driver).login(self.driver)
        navigateTo(self.ProfilePage)

和我的个人资料页面:

class ProfilePage(BasePage):

    _page_id = ".//[@class='profile']"
    url = "https://www.facebook.com/my.profile"

    def __init__(self,driver):
        super(ProfilePage, self).__init__(driver)

    def _validate_page(self, driver):
        try:
            driver.find_element_by_xpath(self._page_id)
        except: 
            raise PageNotDisplayedException
            ("Profile Page could not be displayed")

您的 ProfilePage 页面对象 class 应该有一个与页面相关联的 url 属性:

class ProfilePage(BasePage):
     url = "https://my.url/profile"

那么,navigateTo 方法应该使用这个 属性:

def navigateTo(self, page):
    self.driver.get(page.url)

然后,您应该在测试中调用 self.navigateTo

class SmokeTest(BaseTestCase):
    def test_login(self):
        LoginPage(self.driver).login(self.driver)

        profilePage = ProfilePage(self.driver)
        self.navigateTo(profilePage)