PageObject+unittest框架
思想:UI层自动化测试前台页面的改变导致整个测试代码运行失败,测试脚本维护困难
解决办法:将页面元素和页面元素的操作单独封装,实现页面元素和页面元素操作和脚本的分离
框架的大致思路:
1.BasePage
基础页面模块,封装基础的方法和页面元素定位的方法
2.LoginPage
登录模块,包括了登录要操作的所有元素,登录的元素方法的封装
3.test_login
测试登录模块,引入了unittest模块,实现断言操作,验证登录的不同场景。
包括登录成功的场景,登录失败的场景
BasePage模块的代码如下:
#coding=utf-8
from selenium import webdriver
class Page():
def __init__(self,driver):
self.driver=driver
def open(self):
self.driver.get("http://127.0.0.1:82/bugfree/bugfree3.0.4/index.php/site/login")
def find_element(self,*loc):
return self.driver.find_element(*loc)
if __name__ == '__main__':
pass
Login_Page模块的代码如下:
#coding=utf-8
from BasePage import Page
from selenium.webdriver.common.by import By
class LoginPage(Page):
username_loc=(By.ID,'LoginForm_username')
password_loc=(By.ID,'LoginForm_password')
submit_loc=(By.ID,'SubmitLoginBTN')
null_password_loc=(By.ID,'login-error-div')
pass_loc=(By.CLASS_NAME,'user-info')
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 login_null_password(self):
return self.find_element(*self.null_password_loc).text
def login_pass(self):
return self.find_element(*self.pass_loc).text
def login_action(self,username,password):
po=LoginPage(self.driver)
po.open()
po.type_username(username)
po.type_password(password)
po.type_submit()
test_login模块的代码如下:
#coding=utf-8
from LoginPage import *
from selenium import webdriver
import unittest
class T(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
def test_1(self):
po=LoginPage(self.driver)
po.login_action('admin',' ')
self.assertEqual(po.login_null_password(),u'密码 不可为空白. ')
def test_2(self):
po=LoginPage(self.driver)
po.login_action('admin','123456')
self.assertIn(u'欢迎',po.login_pass())
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()