自动化selenium脚本开发(示例1:用户管理)

Posted zhaoxueying

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化selenium脚本开发(示例1:用户管理)相关的知识,希望对你有一定的参考价值。


import time

from lib.pyse import Pyse

‘‘‘
# PageObject思想:将一个页面抽象成一个类,将这个页面上能够操作的元素,抽象成一个个的方法
# 好处:已封装好的模块,要修改的时候,就可以定位到某一块代码的地方
‘‘‘
#方法和思路,以及需要注意的点:
#1、当存在很多个类的时候,按照顺序从上到下依次继承,b继承a,c继承b,d集成c...
#2、一个页面是一个类,每个页面里面的任意一个操作都是一个方法
#3、每个页面结束之后,都要进行一个校验,看页面跳转之后页面的某个元素是否存在,比如登录成功之后,退出按钮是否存在
#4、如果某个元素定位不到的时候,就写全定位地址tmp=‘css=>#horizontal>div>div>ul>li[id="00000000000000000000000000000000"]‘,不要只写li[id="00000000000000000000000000000000"]
#5、调试过程中,当不知道为什么报错的时候,如何确定是不是定位元素的问题:
# print(self.pyse.wait_and_save_exception(tmp1,‘hehehe‘)),看打印的是true还是false,即可以判断有没有定位错误


#思路:
####1、page.py:用来存放页面的类和一个个操作的方法
#1、公用类里面放初始函数,用来选择浏览器
#2、公用类里面的open函数,用来放访问地址url——初始函数和open被test_zbox.py用例脚本的setUpClass调用
#3、公用类里面的quit函数,用来访问结束后退出——被test_zbox.py用例脚本的tearDownClass调用

###2、test_zbox.py:用来放测试用例,比如登录用例,提bug用例
###3、lib下放一个path.py:专门来存放基本的路径,比如用例路径、报告路径、错误图片路径
###4、run.py就是main.py,专门用来执行所有的用例,以及运行之后的结果存在测试报告当中

class BasePage(object): #放一些公用方法的类
def __init__(self):
self.pyse=Pyse(‘chrome‘) #pyse中默认是firefox,所以这里需要定义chrome

def open(self): #打开url
self.pyse.open(‘http://hf.zhuofansoft.com:8301/sxgov_mysql/‘)

def quit(self): #使用完后退出url页面
self.pyse.quit()

class LoginPage(BasePage): #页面的类
def sendUsername(self):
tmp=‘css=>#loginCode‘
self.pyse.type(tmp,‘admin‘)

def sendPasswd(self):
tmp = "css=>#loginPassword"
self.pyse.type(tmp,‘123‘)

def clickLogin(self):
tmp = ‘css=>#submitButton‘
self.pyse.click(tmp)

def checkLogin(self,name): #登录页面校验的方法:看登录成功之后的页面的某个元素是否能定位到,比如只有登录成功之后才有退出按钮
tmp0=‘css=>[src="systemIndex.do"]‘
self.pyse.switch_to_frame(tmp0)
tmp=‘css=>a[lay-href="getMenuList.do?permission=402881f95b4b1209015b4c0d15080157"]‘
return self.pyse.wait_and_save_exception(tmp,name) #pyse里面这个就是正确时返回true,失败时截图操作


class JczcPage(LoginPage):
def clickJczc(self):
tmp = ‘css=>a[lay-href="getMenuList.do?permission=402881f95b4b1209015b4c0d15080157"]‘
self.pyse.click(tmp)


class YhglPage(JczcPage):
def Yhclick(self):
self.pyse.switch_to_frame_out()
tmp0=‘css=>[src="getMenuList.do?permission=402881f95b4b1209015b4c0d15080157"]‘
self.pyse.switch_to_frame(tmp0)
tmp=‘css=>#menu_list>ul>li[id="402881f95b4b1209015b4c14115c017d"]‘
# print(self.pyse.wait_and_save_exception(tmp,‘用户管理‘))
self.pyse.click(tmp)

def zengjia(self):
tmp0=‘css=>[src="sys/user/list.do"]‘
self.pyse.switch_to_frame(tmp0)
tmp1=‘css=>a[class="btn btn-primary"]‘
self.pyse.click(tmp1)

class Yhinfo(YhglPage): #填bug信息页面的类
def name(self): #所属模块,从父级指向下级a,父级定位唯一,在tmp12中会唯一获取到
self.pyse.switch_to_frame_out()
tmp0=‘css=>#_DialogFrame_0‘
self.pyse.switch_to_frame(tmp0)
tmp1=‘css=>#name‘
self.pyse.type(tmp1,‘张三6‘)

def birthdate(self):
tmp0=‘css=>#birthdate‘
self.pyse.click(tmp0)
self.pyse.switch_to_frame_out()
tmp1=‘css=>[hidefocus="true"]‘
self.pyse.switch_to_frame(tmp1)
tmp2=‘css=>tr>td[class="Wselday"]‘
self.pyse.click(tmp2)

def sex(self):
self.pyse.switch_to_frame_out()
tmp0=‘css=>#_DialogFrame_0‘
self.pyse.switch_to_frame(tmp0)
tmp1=‘css=>.sexual>div>ins[class="iCheck-helper"]‘
self.pyse.click(tmp1)

def cardNo(self):
tmp=‘css=>#cardNo‘
self.pyse.type(tmp,‘456789199911112222‘)


def mobile(self):
tmp=‘css=>#mobile‘
self.pyse.type(tmp,‘15812345678‘)

def telphone(self):
tmp=‘css=>#telphone‘
self.pyse.type(tmp,‘021-1234567‘)

def position(self): #领导
tmp=‘css=>#position‘
self.pyse.select_by_value(tmp,‘402882285f6ff04e015f700f4e1b0012‘)

def email(self):
tmp=‘css=>#email‘
self.pyse.type(tmp,‘1@1.com‘)

def sort(self):
tmp=‘css=>#sort‘
self.pyse.type(tmp,‘1‘)

def type(self):
tmp=‘css=>#type‘
self.pyse.select_by_value(tmp,‘4028800b58cc8b450158ccd500ce0004‘)

def districtName(self):
tmp=‘css=>#districtName‘
self.pyse.click(tmp)
tmp1=‘css=>.input-group>div>ul>ul>li>a[id="districtTree_1_a"]‘
self.pyse.click(tmp1)

def organName(self):
tmp1=‘css=>td[class="table_text form-group"]>div>input[id="organName"]‘
self.pyse.click(tmp1)
tmp2=‘css=>td[class="table_text form-group"]>div>div>ul>ul>li>a[id="sysOrganTree_11_a"]‘
self.pyse.click(tmp2)

def shuli(self):
tmp=‘css=>.table_text>div[class="iradio_square-green"]>ins[class="iCheck-helper"]‘
# tmp=‘css=>#manage>form>div>table>tbody>tr>td>div[class="iradio_square-green"]>ins[class="iCheck-helper"]‘
# print(self.pyse.wait_and_save_exception(tmp,‘梳理没有定位到‘))
self.pyse.click(tmp)

def square_green(self):
tmp=‘css=>tr[class="work-list"]>td[class="table_text"]>ul>span>div>ins[class="iCheck-helper"]‘
self.pyse.click(tmp)

def qdgl(self):
# tmp=‘css=>div[class="sexual"]>label [class]>div[class="icheckbox_square-green"]>input[value="2c98cbab6ae66587016ae73b51f2002f"]‘
# tmp=‘xpath=>//tbody[@id="tbody1"]/tr/td/div/label/div/input[@value="2c98cbab6ae0f3a6016ae11487c60000"]‘
# tmp=‘css=>tr[id="workList"]>td>table>tbody>tr>td>div>label>div>input[value="2c98cbab6ae0f3a6016ae11487c60000"]‘
# tmp=‘css=>input[value="2c98cbab6ae66587016ae73b51f2002f"]‘
# tmp=‘css=>table[class="table"]>tbody>tr>td>div>label>div>ins[class="iCheck-helper"]‘
# tmp=‘xpath=>//input[@name="roleOid4028829d5a7ea57e015a7eaa9da10001" and @class="minimal" and @value="2c98cbab6ae0f3a6016ae11487c60000"]‘
# tmp=‘xpath=>//tbody[@id="tbody1"]/tr[1]/td[3]/div/label[1]/div/input[@name="roleOid4028829d5a7ea57e015a7eaa9da10001"]‘
tmp=‘xpath=>//tbody[@id="tbody1"]/tr[1]/td[3]/div/label[1]/div‘
# print(self.pyse.wait_and_save_exception(tmp,‘清单没有匹配‘))
self.pyse.click(tmp)


def jczc(self):
tmp=‘xpath=>//tbody[@id="tbody1"]/tr[2]/td[3]/div/label[1]/div‘
# print(self.pyse.wait_and_save_exception(tmp,‘基础匹配‘))
self.pyse.click(tmp)

def account(self):
tmp=‘css=>#account‘
self.pyse.type(tmp,‘zs1234566‘)

def password(self):
tmp=‘css=>#password‘
self.pyse.clear(tmp)
self.pyse.type(tmp,‘zs1234566‘)

def save(self):
tmp=‘css=>div>a[class="layui-layer-btn2"]‘
self.pyse.click(tmp)

def sure(self):
self.pyse.switch_to_frame_out()
tmp=‘css=>#_ButtonOK_1‘
self.pyse.click(tmp)

def checkYhinfo(self,name):
# self.pyse.switch_to_frame_out()
tmp0 = ‘css=>[src="getMenuList.do?permission=402881f95b4b1209015b4c0d15080157"]‘
self.pyse.switch_to_frame(tmp0)
tmp = ‘css=>#menu_list>ul>li[id="402881f95b4b1209015b4c14115c017d"]‘
return self.pyse.wait_and_save_exception(tmp,name)


class Page(Yhinfo):
pass

if __name__==‘__main__‘:
page=Page()
page.open()
page.sendUsername()
page.sendPasswd()
page.clickLogin()
print(page.checkLogin(‘登录失败了‘))

page.clickJczc()
page.Yhclick()
page.zengjia()
page.name()
page.birthdate()
page.sex()
page.cardNo()
page.mobile()
page.telphone()
page.position()
page.email()
page.sort()
page.type()
page.districtName()
page.organName()
page.shuli()
page.square_green()
page.qdgl()
page.jczc()
page.account()
page.password()
page.save()
page.sure()
print(page.checkYhinfo(‘保存失败了‘))



以上是关于自动化selenium脚本开发(示例1:用户管理)的主要内容,如果未能解决你的问题,请参考以下文章

自动化selenium脚本开发(示例2:目录清单审核发布认领认领审核)

Selenium_python自动化第一个测试案例(代码基本规范)

一. Selenium介绍

python+selenium之框架设计

界面自动化脚本开发案例(第2版)

初始Selenium