py+selenium一个可被调用的登录测试脚本【待优化】

大部分系统现在都有登录页面,本文主要尝试写一个登录的测试脚本,及另一个脚本调用它登录测试已登录的页面模块。

目标: 

    登录脚本:从excel里获取登录的测试数据(包括异常测试)→执行登录脚本→输出是否通过

    A模块测试脚本:调用登录脚本,从excel里获取正确登录的测试数据→执行自动登录脚本→执行模块测试用例→输出是否通过

登录脚本auto.py:

# coding:utf-8
from selenium import webdriver
import time
import xlrd
from xlutils.copy import copy


class login_test:

    def __init__(self, x, y, css):
        self.x = x
        self.y = y
        self.css = css

   # 函数功能:获取数据测试登录
    def auto_login(self):
        global driver, workbook
        # 打开excel,初始化excel参数
        workbook = xlrd.open_workbook(r'F:\test.xlsx')

        login = workbook.sheet_names()[1]

        sheet2 = workbook.sheet_by_name(login)
        # 取excel数据
        username = sheet2.cell(self.x, self.y).value
        password = sheet2.cell(self.x, self.y + 1).value
        ctype = sheet2.cell(self. x, self.y + 1).ctype

        if ctype == 2:  # 若是数字则转化为整型,这一步可避免报错类型
            password = int(password)

        # 初始化一个火狐浏览器实例:driver , 打开浏览器访问
        driver = webdriver.Ie()
        driver.maximize_window()  # 最大化浏览器

        driver.get("http://url") # 通过get()方法,打开一个url站点

        time.sleep(2)

        # 输入登录账号密码,点击登录
        driver.find_element_by_xpath("//input[@name='loginname']").send_keys(username)
        driver.find_element_by_xpath("//input[@name='password']").send_keys(password)
        driver.find_element_by_xpath(".//*[@id='btn']/input").click()

        time.sleep(2)

        # 调用判断元素是否存在来判断是否登录成功
        self.element_exist()

    # 函数功能:保存并关闭浏览器         为什么这一步要单独分出来呢,因为测试其他模块的时候,被调用的时可以不用执行这几行代码。
    def save_quit(self):
        
        wt = copy(workbook)
        wt.get_sheet("login").write(self.x, self.y+2, k)
        wt.save(r'F:\test.xlsx')
        driver.quit()

    # 函数功能:判断页面是否存在元素    可调用该函数进行验证页面是否存在某个元素

    def element_exist(self):
        global k
        s = driver.find_elements_by_css_selector(css_selector=self.css)
        result = [u'通过', u'不通过']
        if s:
            k = result[0]

            print("通过")
        else:
            k = result[1]

            print("不通过")
        return k


#这一步有待优化了,少了这一步,登录脚本被其他模块调用时会报driver未定义,多了这一步,又多开了个浏览器,所以我多加了一步,关闭浏览器,就当做测试下驱动
#如有优化建议,麻烦留言,谢谢!
driver = webdriver.Ie()
driver.quit()

if __name__ == "__main__":

    for x in range(1, 3):
        y = 0
        test = login_test(x, y, css="#foot")
        test.auto_login()
        test.save_quit()
 

excel结果:

A模块脚本调用登录脚本automain.py:

# coding:utf-8
from selenium import webdriver
import time
# import xlrd
# from xlutils.copy import copy
import auto
from auto import driver

auto.login_test(1, 0, css="#foot").auto_login()

time.sleep(2)

# 直接进行已登录页面的自动化测试操作 
driver.find_element_by_xpath(".//*[@id='xxxx']/li[2]/a").click()

执行automain.py, 则从excel获取正确登录的数据,直接登录,无回写入excel(想写入也可以调),无关掉浏览器,直接等待下一步测试操作。

如有错误,请及时指正,谢谢

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏linux运维学习

linux学习第二十四篇:管道符和作业控制,shell变量,环境变量配置文件

vmstat 1 自动显示系统的状态 sleep 100 可以使系统沉睡100秒 管道符和作业控制 管道符的作用:把管道符前面执行的结果输出内容交给管道符后面...

1967
来自专栏LIN_ZONE

laravel + vue 的路径的解析过程

vue要使用路由,必须使用vue-router插件,在package.json中添加

721
来自专栏算法channel

Python|模块,包,标准模板

01 .py文件-模块 一个.py文件就称之为一个模块,Module,模块使用的最大好处是大大提高了代码的可维护性。 当然,还提高了代码的复用性。 使用模块...

3555
来自专栏耕耘实录

which、type、whereis、locate几个命令的区别与联系

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢。

923
来自专栏决胜机器学习

《Redis设计与实现》读书笔记(十五) ——Redis AOF持久化原理与实现

《Redis设计与实现》读书笔记(十五) ——Redis AOF持久化原理与实现 (原创内容,转载请注明来源,谢谢) 一、概述 AOF(Append OnFil...

3545
来自专栏C/C++基础

Linux命令(8)——rz命令与sz命令

rz命令(Receive ZMODEM),使用ZMODEM协议,将本地文件批量上传到远程Linux/Unix服务器,注意不能上传文件夹。

2801
来自专栏pangguoming

angular之interceptors拦截器

<!DOCTYPE html> <html ng-app="nickApp"> <head> <meta charset="UTF-8"> <m...

3985
来自专栏IT可乐

Linux系列教程(四)——Linux常用命令之文件和目录处理命令

  这个系列教程的前面我们讲解了如何安装Linux系统,以及学习Linux系统的一些方法。那么从这篇博客开始,我们就正式进入Linux命令的学习。学习命令,首先...

2059
来自专栏用户2442861的专栏

命令ln的使用 以及 查看软件是否安装

这是linux中一个非常重要命令,请大家一定要熟悉。它的功能是为某一个文件或目录在另外一个位置建立一个同步的链接,类似Windows下的超级链接。 这个命...

2461
来自专栏bboysoul

linux下重命名脚本推荐

1072

扫码关注云+社区

领取腾讯云代金券