Page Object设计模式登陆QQ空间实例

2018-08-22  本文已影响101人  Root_123

一、Page Object

它是自动化测试开发实践的最佳设计模式,主要体现在对界面交互细节的封装。

二、这种设计模式的好处

1,可以分层设计,不同层关心不同的问题。
第一层是页面基础操作层,即新建一个Page类。
第二层是对象层,即设计一个LoginPage类继承Page类。
第三层创建test_user_login函数,将单个元素操作组成一个完整的动作,设计username,password等参数。
第四层也是main函数,传递参数,实现登陆。
2,减少代码的重复
3,提高测试用例的可维护性和可读性

三、用PO设计模式登陆QQ空间

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep


class Page(object):
    """基础类,固定套路,用于所以页面对象类继承"""
    login_url = 'https://i.qq.com'

    def __init__(self, selenium_driver, base_url=login_url):
        self.base_url = base_url
        self.driver = selenium_driver
        self.timeout = 30

    def on_page(self):
        return self.driver.current_url == (self.base_url + self.url)

    def _open(self, url):
        url = self.base_url + url
        self.driver.get(url)
        assert self.on_page(), 'did not land on %s' % url

    def open(self):
        self._open(self.url)

    def find_element(self, *loc):
        return self.driver.find_element(*loc)


class LoginPage(Page):
    """登录页面模型"""
    url = '/'
    # 定位器
    username_loc = (By.ID, 'u')
    password_loc = (By.ID, 'p')
    submit_loc = (By.ID, 'login_button')

    def type_username(self, username):
        self.find_element(*self.username_loc).send_keys(username)

    def type_password(self, password):
        self.find_element(*self.password_loc).send_keys(password)

    def type_submit(self):
        self.find_element(*self.submit_loc).click()


def test_user_login(driver, username, password):
    """测试获取的用户名、密码是否可以登录成功"""
    login_page = LoginPage(driver)
    login_page.open()
    driver.maximize_window()
    driver.switch_to_frame('login_frame')
    driver.find_element_by_id("switcher_plogin").click()
    login_page.type_username(username)
    login_page.type_password(password)
    login_page.type_submit()


def main():
    driver = webdriver.Firefox()
    username = '33833838'  # 调试的时候需要换成对应的QQ号
    password = '123456'  # 需要换成对应的密码
    test_user_login(driver, username, password)
    sleep(3)

    driver.close()


if __name__ == '__main__':
    main()
上一篇下一篇

猜你喜欢

热点阅读