一、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()
网友评论