Selenium快速入门知识7-测试程序优化之页面的封装

128 阅读3分钟
原文链接: zhuanlan.zhihu.com

案例:测试添加用户购物配送地址功能。

def test_Add_Addess(self):

username='cindy'

password='123456'

#登录

self.clear(self.find_element_by_id(driver,"id_username"))

self.send_keys(self.find_element_by_id(driver,"id_username"),username)

self.clear(self.find_element_by_id(driver,"id_password"))

self.send_keys(self.find_element_by_id(driver,"id_password"),password)

self.submit(self.find_element_by_class_name(driver,"form-signin"))

#在登录首页找到用户名

self.fd.click(self.fd.find_element_by_link_text(self.driver,username))

#进入用户信息列表

self.fd.click(self.fd.find_element_by_id(self.driver,"add_address"))

#进入添加送货地址信息页面,添加收货信息

self.fd.clear(self.fd.find_element_by_name(self.driver,"address"))

self.fd.send_keys(self.fd.find_element_by_name(self.driver,"address"),"北京清华")

self.fd.clear(self.fd.find_element_by_name(self.driver,"phone"))

  self.fd.send_keys(self.fd.find_element_by_name(self.driver,"phone"),"13699876655")

  self.fd.click(self.fd.find_element_by_xpath(self.driver,"/html/body/div/form/button"))

#验证加入的信息

self.assertIsNotNone(self.fd.find_element_by_link_text(self.driver,"删除"))

#测试完毕,清场操作

self.fd.click(self.fd.find_element_by_link_text(self.driver,"删除"))

被测对象是一个附录A电子商务网站,要测试在用户界面添加一条收货信息。所以必须先登录,登录完毕后点击当前用户名的超链,然后进入用户信息界面,接下来点击新建用户收货地址按钮,进入新建页面,建立完毕进行断言,最后为了以后仍旧可以进行这个测试用例,进行清除操作。由此可见,如果一个测试业务比较长,按照这样的写法可读性是比较差的,并不便于维护,因此采用目前比较流行的基于页面的封装方法。

先对登录页面进行封装,代码如下。

#通用信息

class Util:

def __init__(self,driver):

self.driver = driver

def logout(self):

findby.click(self.driver,findby.find_element_by_link_text(self,self.driver,"退出"))

findby.quit(self,self.driver)

#登录页面

class LoginPage:

def __init__(self,driver):

self.driver = driver

#登录操作

def login(self,username,password):

findby.clear(self.driver,findby.find_element_by_id(self,self.driver,"id_username"))#清空用户输入框

findby.send_keys(self.driver,findby.find_element_by_id(self,self.driver,"id_username"),username)#输入用户名

findby.clear(self.driver,findby.find_element_by_id(self,self.driver,"id_password")) #清空密码输入框

findby.send_keys(self.driver,findby.find_element_by_id(self,self.driver,"id_password"),password)#输入密码

findby.submit(self.driver,findby.find_element_by_class_name(self,self.driver,"form-signin"))#提交表单

产品页面封装如下。

#产品页面

class ProductPage:

def __init__(self,driver):

self.driver = driver

#进入用户信息页面

def click_username(self,username):

findby.click(self.driver,findby.find_element_by_link_text(self,self.driver,username))# 点击登录用户名链接

用户详情页面封装如下。

#用户详情页面

class UserPage:

def __init__(self,driver):

self.driver = driver

#添加购物配送地址信息

def click_add_address_button(self):

findby.click(self.driver,findby.find_element_by_id(self,self.driver,"add_address"))

#验证地址信息

def check_address(self):

return findby.find_element_by_link_text(self,self.driver,"删除")

#删除地址信息

def delete_address(self):

delete_button = findby.find_element_by_link_text(self,self.driver,"删除")

findby.click(self.driver,delete_button)

添加地址页面封装如下。

#地址

class AddressPage:

def __init__(self,driver):

self.driver = driver

#添加新地址

def create_address(self,addess,phone):

findby.clear(self.driver,findby.find_element_by_name(self,self.driver,"address"))#清空地址栏

findby.send_keys(self.driver,findby.find_element_by_name(self,self.driver,"address"),addess)#输入地址信息

findby.clear(self.driver,findby.find_element_by_name(self,self.driver,"phone"))##清空电话栏

findby.send_keys(self.driver,findby.find_element_by_name(self,self.driver,"phone"),phone)#输入电话信息

findby.submit(self.driver,findby.find_element_by_xpath(self,self.driver,"/html/body/div/form/button"))#提交表单

这样,验证添加购物地址的测试代码如下。

#coding:utf-8

from selenium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

import unittest,time

from util import drivers,findby

from page import Util,LoginPage,ProductPage,UserPage,AddressPage,CartPage

class CheckEBusiness(unittest.TestCase):

def setUp(self):

driver = drivers().driver

fd = findby()

self.util = Util(driver)

self.loginpage = LoginPage(driver)

self.producepage = ProductPage(driver)

self.userpage = UserPage(driver)

self.addresspage = AddressPage(driver)

self.cartpage = CartPage(driver)

fd.implicitly_wait(driver,5)

fd.get(driver,"http://127.0.0.1:8000")

self.username = "cindy"

self.password = "123456"

self.adddress = "首体南路3号"

self.phone = "13691729932"

def test_Add_Addess(self):

self.loginpage.login(self.username,self.password)

self.producepage.click_username(self.username)

self.userpage.click_add_address_button()

self.addresspage.create_address(self.adddress,self.phone)

self.assertIsNotNone(self,self.userpage.check_address())

self.userpage.delete_address()

if __name__=="__main__":

unittest.main()

这样测试程序的代码的可读性与可维护性都得到了很好得加强。现在增加“测试购物车功能”的验证。只需在Product类中建立如下两个方法。

案例:测试添加商品进购物车功能

#放入购物车

def put_into_cart(self):

findby.click(self.driver,findby.find_element_by_link_text(self,self.driver,"放入"))# 点击“放入”链接

#查看购物车

def view_cart(self):

findby.click(self.driver,findby.find_element_by_partial_link_text(self,self.driver,"查看购物车"))# 点击“查看购物车”链接在加入一个Cart(购物车)类。

然后增加一个购物车的类。

#购物车页面

class CartPage:

def __init__(self,driver):

self.driver = driver

#验证购物车中是否存在商品

def check_goods(self):

return findby.find_element_by_xpath(self,self.driver,"//*[@id=\"id_count\"]")

#删除购物车总中的商品

def delete_goods(self):

findby.click(self.driver,findby.find_element_by_link_text(self,self.driver,"移除"))

相应的测试代码如下。

def test_Add_Goods_into_Cart(self):

self.loginpage.login(self.username,self.password)

self.producepage.put_into_cart()

self.producepage.view_cart()

self.assertIsNotNone(self.cartpage.check_goods())

self.cartpage.delete_goods()

最后再来验证一下对商品查询的功能,在Product类中加入。

案例:测试商品查询功能

#商品查询

def search_goods(self,good_name):

findby.send_keys(self.driver,findby.find_element_by_name(self,self.driver,"good"),good_name)#输入查询内容

findby.click(self.driver,findby.find_element_by_xpath(self,self.driver,"//*[@id=\"navbar\"]/form/button"))#输入查询内容

return findby.find_element_by_link_text(self,self.driver,"放入")

而在测试代码中加入如下两行测试语句就可以了。

def test_Search_Goods(self):

self.loginpage.login(self.username,self.password)

self.assertIsNotNone(self.producepage.search_goods("茶"))

下一课我们将学习:Selenium批量运行。