前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >py+selenium一个可被调用的登录测试脚本【待优化】

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

作者头像
逆向小白
发布2018-09-12 15:51:45
1.3K0
发布2018-09-12 15:51:45
举报
文章被收录于专栏:py+selenium

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

目标: 

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

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

登录脚本auto.py:

代码语言:javascript
复制
# 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:

代码语言:javascript
复制
# 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(想写入也可以调),无关掉浏览器,直接等待下一步测试操作。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-07-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档