zoukankan      html  css  js  c++  java
  • selenium+python系统登录实战代码

    整个代码的设计思路是,利用page object思想,融合selenium+python,将某个系统的每个登录页面常用到的元素将其封装为一个类,此文章以登录XX学院的系统为例。

    接下来为大家一一附上实现代码:

    1、首先附上整个登录测试脚本的工程结构:

    其中,Pages模块专门用于写登录一一些常用到的页面元素。一个page就写一个类,便于数据与代码分离。

    (1)Maizi_base_bage:这个class文件专门提供并简化了对页面元素的定位操作功能,下载url,获取当前url等操作

    # -*- coding:utf-8 -*-
    #应用HTMLRunner和page_object的思维来实现网易云课堂的登录,并规定,从本地文件.txt中读取用户名和密码

    from selenium import webdriver

    class Maizi_base_page(object):
    driver = None
    url = None
    def __init__(self,driver):
    self.driver = driver

    #对元素的基本操作
    def by_id(self,the_id):
    return self.driver.find_element_by_id(the_id)

    def by_id_error(self,the_id):
    return self.driver.find_elements_by_id(the_id)

    def by_name(self,the_name):
    return self.driver.find_element_by_name(the_name)

    def by_class_name(self,the_calss_name):
    return self.driver.find_element_by_class_name(the_calss_name)

    def by_class_selector(self,the_class_selector):
    return self.driver.find_element_by_css_selector(the_class_selector)

    def by_link_text(self,the_link_text):
    return self.driver.find_element_by_link_text(the_link_text)

    def by_js(self,js):
    return self.driver.execute_script(js)

    #加载页面
    def navigate(self,url):
    self.driver.get(url)

    #获取url
    def get_url(self):
    return self.url

    (2)Deault_Page:此页面是进入系统时的默认显示页面,在该页面获取【登录】链接元素,
    以便在最终编写单独的测试用例脚本代码时能够调用该函数,并实现其对应操作
    # -*- coding:utf-8 -*-
    #此页面是进入麦子学院的默认页面,需要对某个特定的元素来进行操作
    from Pages.Maizi_base_page import Maizi_base_page

    class Deaultf_Page(Maizi_base_page):
    def click_login_link(self):
    return self.by_link_text('登录')

    (3)login_page:此代码专门用于对登录页面的用户名、密码输入框、以及【登录】按钮进行操作
    # -*- coding:utf-8 -*-
    #此页面是用户登录页面,需要对用户名输入框,密码输入框进行操作

    from Pages.Maizi_base_page import Maizi_base_page

    class login_page(Maizi_base_page):

    def username(self):
    return self.by_id('id_account_l')


    def password(self):
    return self.by_id('id_password_l')

    def click_login_btn(self):
    return self.by_id('login_btn')

    #这里返回一个登录组件的元组
    def Find_Login_Element(self):
    return self.username(),self.password(),self.click_login_btn()

    #这里的用户名及密码都是从XSL文件中读取,所以需要修改一些地方
    def login_start(self,username,password):
    self.username().clear()
    self.username().send_keys(username)
    self.password().clear()
    self.password().send_keys(password)
    self.click_login_btn().click()
    (4)dashboard_page:此页面,其实代表的是一个正确的输入用户名、密码之后,点击【登录】按钮一定能够登录成功,
    此时,页面应该会跳转到一个admin页面,其页面右上角会出现你的用户名【链接】显示
    # -*- coding:utf-8 -*-
    #此页面是登录成功以后跳转的页面,登录成功后我们需要加载该页面
    from Pages.Maizi_base_page import Maizi_base_page

    class dashboard_page(Maizi_base_page):
    def greeking_link(self):
    return self.by_class_name('nick') #登录成功后,右上角会有账户显示link
    (5)Read_Data:此class用来从表格文件中读取数据,如果你在本地上存在一个已经设计好了的登录测试用例数据,并且是.xlsx文件的用户名及密码,
    那么该class就允许你从表格文件中获取数据,并且把他们转换为字典型的list列表。
    # -*- coding:utf-8 -*-
    #此文件代码,是专门用于从指定文件中读取

    import xlrd

    class Read_Data(object):

    def __init__(self,path=''):
    self.xl = xlrd.open_workbook(path)

    def Get_Use_Info(self): #从表格中,一行一行来读取数据,然后把对应的数据与变量来组成相应的字典,并且添加到一个list列表中
    listkey = ['username','password']
    info_list = []
    for row in range(1,self.sheet.nrows):
    info = self.sheet.row_values(row)
    tmp = zip(listkey,info)
    info_list.append(dict(tmp))
    return info_list

    #通过表格名字来获取表格内容,并且得到的还是一个字典型的list列表
    def Get_Sheet_By_Name(self,name):
    self.sheet = self.xl.sheet_by_name(name)
    return self.Get_Use_Info()

    #通过表格下标获取表格内容,并且得到的还是一个字典型的list列表
    def Get_Sheet_By_Index(self,index):
    self.sheet = self.xl.sheet_by_index(index)
    return self.Get_Use_Info()

    #定义一个函数,专门用于把表格中的所有数据转换成字符串类型,因为对于表格中的数据
    #python会把从表格中获得的数据默认为float类型
    def Switch_Var_To_String(self,value):
    if isinstance(value,float):
    value = str(int(value))
    return value
    运行效果如下:

    注意:此时list列表中的字典元素中的值是float型,这是因为,纯数字的字符串,从表格中读取出来默认是float类型,
    后期应用是需要调用Switch_Var_To_String(self,value)函数来转换其数据类型。

    (5)Write_Login_Info_To_XSL_File:这是为了把最后的测试结果报告写入到指定的表格文件中,使得测试报告独立成份!!

    # -*- coding:utf-8 -*-

    import xlsxwriter
    import time

    class Write_Login_Info_To_XSL_File(object):
    '''
    该函数用于创建工作簿,并且创建一个表格
    '''
    #初始化工作簿
    def __init__(self,path='',mode = 'w'):
    fname = time.strftime('%Y-%m-%d',time.gmtime())
    self.xls = xlsxwriter.Workbook(path + fname +'.xls')
    self.row = 0

    # 向表格中写入数据
    def xls_write(self, args):
    col = 0
    for value in args:
    self.sheet.write_string(self.row, col, value)
    col += 1
    self.row += 1

    #初始化表格
    def login_sheet_init(self,sheetname,*table_header):
    self.sheet = self.xls.add_worksheet(sheetname)
    self.sheet.set_column('A:C',30)
    self.xls_write(*table_header)

    #创建一个写登录信息的接口
    def Write_Log(self,*args):
    self.xls_write(*args)

    def Close_XLS(self):
    self.xls.close()

    if __name__ =='__main__':
    xinfo = Write_Login_Info_To_XSL_File()
    header = ['uname','pwd','error_msg']
    xinfo.login_sheet_init('test',header)
    info = ['小程序','2435456','right!']
    xinfo.Write_Log(info)
    xinfo.Close_XLS()

    运行结果:


    此时,数据已成功写到指定目录下的.xlsx文件中。

    (6)登录成功的测试用例:
    # -*- coding:utf-8 -*-
    #此处专门用于写测试用例,page和测试用例应该分离开来,用户数据应该跟代码分离开来
    #测试结果用HTMLRunner来实现报告输出
    from selenium import webdriver
    from Pages.Login_Page import login_page
    from Pages.Default_Page import Deaultf_Page
    from Read_Data.Read_Data_From_File import Read_Data
    from Write_Login_Info_To_XSL_File.Write_Login_Info_To_XSL_File import Write_Login_Info_To_XSL_File

    if __name__ == '__main__':
    driver = webdriver.Firefox()
    url = 'http://www.maiziedu.com/'
    default = Deaultf_Page(driver) #实例化麦子学院默认页面
    default.navigate(url) #然后加载麦子学院页面
    default.click_login_link().click() #在默认页面找到【登录】按钮并实现点击,此时到达登录页面
    #向登录页面的用户名输入框和密码输入框输入数据,数据从文件中读取
    login_page = login_page(driver) #实例化一个登录页面,然后对其用户名元素和密码元素进行数据设置

    #对于输入用户名和密码,我们专门从本地XLS文件中读取出来,并把读取出来的信息通过send_keys来实现登录操作
    read_object = Read_Data(r'C:UsersAdministratorDesktopuserinfo.xlsx')
    #然后调用然后调用这个类里面的Get_Sheet_By_Name()方法来获取字典型用户信息
    infolist = read_object.Get_Sheet_By_Name('userinfo')

    # 在此处来判断是否登录成功,并把登录成功与否的信息写入到测试报告表格中
    # 把登录是否成功的信息写入到XSL文件中
    # 1、首先,实例化一个写文件的对象
    write_object = Write_Login_Info_To_XSL_File()
    header = ['uname', 'pwd', 'error_msg']
    write_object.login_sheet_init('test', header)

    #然后根据每个元素里面的键找到对应的值即可。
    for dict in infolist:
    # 但是从表格中读取出来的数据默认是float型,所以需要强制转换为string类型
    username = read_object.Switch_Var_To_String(dict['username'])
    password = read_object.Switch_Var_To_String(dict['password'])
    login_page.login_start(username,password)
    log_mark = '登录成功'
    log_info = [username,password,log_mark]
    write_object.Write_Log(log_info)

    注意:写测试用例时,应将成功的测试用例和失败的测试用例单独分离出来,这样可以减小代码复杂度,同时也能更好的管理和维护测试脚本代码。
  • 相关阅读:
    base加密解密工具类
    根据银行卡号判断所属银行(部分资源网上抄录)
    input autocomplete属性设计输入框自动联想(php实现)
    XFire+Spring构建Web Service经验总结
    php学习手记(持续更新)
    ios上遇到的坑(持续更新)
    随笔
    HTML5微信长按图片不会弹出菜单的解决方法
    能在编辑器里面写出的字符
    css文本两端对齐,分散对齐
  • 原文地址:https://www.cnblogs.com/xqq-admin-content/p/10033891.html
Copyright © 2011-2022 走看看