selenium 数据驱动框架自动化从0到1–3
上一篇我们没有把链路上的页面封装完,这篇继续封装,上一篇封装后的代码如下:
#encoding = utf-8
from app_models.login_action import *
from util.open_browser import *
#创建chrome浏览器实例
driver = OpenBrowser()
lg = LoginAction()
lg.login(driver,'abc_123456qwe','abc_123456')
#获取通讯录按钮单击
get_element(driver,'xpath','//div[text()="通讯录"]').click()
#获取新建联系人按钮单击
sleep(3)
get_element(driver,'xpath','//span[text()="新建联系人"]').click()
#获取姓名输入框
sleep(3)
name = get_element(driver,'xpath',"//a[@title ='编辑详细姓名']/preceding-sibling::div/input")
#输入框输入名字
name.send_keys('我是谁')
#获取电子邮箱输入框
sleep(3)
email = get_element(driver,'xpath','//div[@id="iaddress_MAIL_wrap"]//dd//div//input')
#电子邮箱输入
email.send_keys('1322432@126.com')
#获取是否是星标朋友单击
sleep(3)
get_element(driver,'xpath','//span[text()="设为星标联系人"]/preceding-sibling::span/b').click()
#获取电话号码输入框
sleep(3)
phon = get_element(driver,'xpath','//div[@id="iaddress_TEL_wrap"]//dd//div//input')
#输入电话号码
phon.send_keys('13523232323')
#获取备注输入框输入备注
sleep(3)
common = get_element(driver,'xpath',"//textarea[@id='input_DETAIL']").send_keys('测试验证')
#获取确定按钮单击保存
sleep(3)
buton = get_element(driver,'xpath','//span[text()="确 定"]').click()
#断言我是谁是否添加成功
sleep(10)
assert u'我是谁' in driver.page_source
print('添加联系人成功')
#退出浏览器
driver.quit()
二,封装登陆后页面元素代码
1,在page_objects包下创建一个home_page.py 文件,代码如下:
#encoding = utf-8
from util.get_object_map import *
class HomePage(object):
def __init__(self,driver):
self.driver = driver
def address_book(self):
try:
#获取通讯录按钮元素对象
element = get_element(self.driver,'xpath','//div[text()="通讯录"]')
return element
except Exception as e:
raise e
if __name__ =='__main__':
from util.open_browser import *
from app_models.login_action import LoginAction
driver = OpenBrowser() #创建浏览器实例
lg=LoginAction() #创建登录页面实例
lg.login(driver,'abc_123456qwe','abc_123456') #登录
hg = HomePage(driver) #创建home 页面实例
hg.address_book().click() #点击通讯录按钮
driver.quit() #退出
三,封装添加联系人页面元素代码
1,在page_objects包下创建一个add_contact_person_page.py 文件,代码如下:
#encoding = utf-8
from util.get_object_map import *
class AddContactPensonPage(object):
def __init__(self,driver):
self.driver = driver
def add_contact_person_button(self):
try:
#获取添加联系人按钮元素对象返回给调用者
element = get_element(self.driver,'xpath','//span[text()="新建联系人"]')
return element
except Exception as e:
raise e
def user_name(self):
try:
#获取新建联系人姓名元素对象返回给调用者
element = get_element(self.driver,'xpath','//a[@title="编辑详细姓名"]/preceding-sibling::div/input')
return element
except Exception as e:
raise e
def user_person_email(self):
try:
#获取新建联系人电子邮箱元素对象返回给调用者
element = get_element(self.driver,'xpath','//div[@id="iaddress_MAIL_wrap"]//dd/div//input')
return element
except Exception as e:
raise e
def is_star(self):
try:
#获取是否是星标朋友的元素对象返回给调用者
element = get_element(self.driver,'xpath','//span[text()="设为星标联系人"]/preceding-sibling::span/b')
return element
except Exception as e:
raise e
def user_person_phon(self):
try:
#获取联系人手机号码元素对象返回给调用者
element = get_element(self.driver,'xpath','//div[@id="iaddress_TEL_wrap"]//dd/div//input')
return element
except Exception as e:
raise e
def user_person_comment(self):
try:
#获取备注元素对象返回给调用者
element = get_element(self.driver,'xpath','//textarea[@id="input_DETAIL"]')
return element
except Exception as e:
raise e
def save_button(self):
try:
#获取确定按钮元素对象返回给调用者
element = get_element(self.driver,'xpath','//span[text()="确 定"]')
return element
except Exception as e:
raise e
if __name__ =='__main__':
from util.open_browser import *
from app_models.login_action import LoginAction
from page_objects.home_page import *
from time import sleep
driver = OpenBrowser() #创建浏览器实例
lg = LoginAction() #创建登录页面实例
lg.login(driver,'abc_123456qwe','abc_123456') #登录
hg = HomePage(driver) #创建home页面实例
hg.address_book().click() #点击通讯录按钮
cp=AddContactPensonPage(driver) #创建添加联系人页面元素实例
cp.add_contact_person_button().click() #点击添加联系人按钮
sleep(3)
cp.user_name().send_keys('xinzeng') #姓名输入
sleep(3)
cp.user_person_email().send_keys('14432@163.com') #电子邮箱输入
cp.is_star().click() #点击星标按钮
cp.user_person_phon().send_keys('12345324323') #输入电话
cp.user_person_comment().send_keys('gdgfghgfh') #输入备注
cp.save_button().click() #点击确定
sleep(3)
assert u'xinzeng' in driver.page_source #断言xinzeng 是否添加完成
sleep(2)
print('断言成功')
driver.quit() #退出
2,在app_models包下创建一个add_contact_person_action.py 文件,封装添加联系人页面代码如下
#encoding = utf-8
from page_objects.add_contact_person_page import AddContactPensonPage
from page_objects.home_page import HomePage
import traceback
import time
class AddContactPersonAction(object):
def __init__(self):
print('开始添加联系人')
@staticmethod
def add_contact_person(driver,userName,userEmail,isStar,userPhon,userComment):
try:
hp = HomePage(driver) #获取home页面元素的实例
hp.address_book().click() #点击通讯录按钮
cp = AddContactPensonPage(driver) #获取联系人页面元素实例
cp.add_contact_person_button().click() #点击添加联系人按钮
time.sleep(2)
if userName:
cp.user_name().send_keys(userName) #输入姓名
cp.user_person_email().send_keys(userEmail) #输入email
if isStar =='y':
cp.is_star().click() #判断是不是星标,是点击按钮
if userPhon:
cp.user_person_phon().send_keys(userPhon) #输入电话
if userComment:
cp.user_person_comment().send_keys(userComment) #输入备注
cp.save_button().click() #点击提交
time.sleep(3)
assert userName in driver.page_source #断言添加的联系人是否添加成功
print('断言成功')
except Exception as e:
print(traceback.print_exc()) #打印堆栈信息
raise e
if __name__ =='__main__':
from util.open_browser import *
from app_models.login_action import *
driver = OpenBrowser() #实例化浏览器对象
lg = LoginAction() #实例化登录页面对象
lg.login(driver,'abc_123456qwe','abc_123456') #登录
cp=AddContactPersonAction() #实例化添加联系人页面
#添加联系人
cp.add_contact_person(driver,'sd','131243@163.com','y','12345345432','dsfds')
print('添加联系人结束')
#退出浏览器
driver.quit()
总结
于是乎,上一篇的代码就变成下面这样了:
是不是干净利落了,但还是没有把元素表达式,测试数据和代码分离,只是把相关模块封装了一下(初步框架),这样难于管理,如果开发稍微改动,我们就会花很多时间去修改维护,这不是我们想要的。下一篇我们先把页面元素表达式和代码分离
#encoding = utf-8
from app_models.add_contact_person_action import AddContactPersonAction
from page_objects.home_page import *
from app_models.login_action import *
from util.open_browser import *
#创建chrome浏览器实例
driver = OpenBrowser()
lg = LoginAction() #实例化登录页面
lg.login(driver,'abc_123456qwe','abc_123456') #登录
hp =HomePage(driver) #实例化home页面元素
hp.address_book().click() #点击通讯录按钮
cp = AddContactPersonAction() #实例化添加联系人页面
cp.add_contact_person(driver,'qerrw','1323233@163.com','n','13423232323','gdgd') #添加联系人
print('添加联系人成功')
#退出浏览器
driver.quit()