zoukankan      html  css  js  c++  java
  • selenium3+python自动化4-登录

    一、前言

    在写这篇博客之前,我已经根据自己目前的项目写好了一个登录脚本,并且写好的内容跟我今天看到的文章要求一致,自动化脚本大都是从“登录”开始,就好比学习每个语言都是从“hello,world”开始的。但是看了博主的文章,脚本还是要先跑起来,然后再优化的角度去写。我还是从头整理自己的思路,锻炼自己的分析能力。

    二、登录的脚本

    此处是以自己的项目为例,目标:体验从登录-验证登录信息正确性-关闭浏览器一个过程的自动化实现

    思路如下:

    (1)登录

    1. 打开浏览器,我用的都是谷歌浏览器,版本77.0.3865.75
    2. 输入网址
    3. 设置等待时间,等待页面元素加载出来(等待时间设置有三种方式:强制等待的sleep,静态等待的implicitly_wait(10),动态等待时间WebDriverWait(driver,10),三种方式可以找度娘问问区别。)
    4. 定位“账号”、“密码”输入框并传值
    5. 设置等待时间,为了手动输入验证码
    6. 定位“登录”按钮,并点击

    (2)验证登录信息正确性

    登录完成以后,系统的右上角会显示我当前登录的“账号”,只要添加一个检查点,判断右上角的账号跟我预期的账号是否一致。

    1. 先定位系统右上角“账号”,获取元素的text文本值
    2. 添加断言,判断获取到的值与期望是否一致,用到assert()函数
    3. 若一致,则代码无报错,继续执行,若不一致,则抛出异常,这里用到try...except

    (3)关闭浏览器

    driver.quit()关闭浏览器所有窗口,结束进程,建议使用这种

    driver.close()关闭当前窗口

    代码:

    from selenium import webdriver
    from time import sleep
    #打开浏览器
    driver=webdriver.Chrome()
    driver.get("http://192.168.x.xxx:xxxx")
    driver.maximize_window()#放大窗口
    driver.implicitly_wait(10)#等待页面元素加载
    #登录系统
    driver.find_element_by_id('username').send_keys("neimenggu")
    driver.find_element_by_id('password').send_keys("xxxxxx")
    sleep(10)# 设置较长的等待时间为了手动输入验证码
    driver.find_element_by_xpath('//*[@id="formLogin"]/div[4]/div/div/span/button').click()
    driver.implicitly_wait(10)#等待系统页面上的元素加载
    #验证登录信息正确性(try...except捕获异常,assert()函数进行判断,实际结果与期望结果是否一致)
    try:
        login_name = driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[1]/div/div/span[1]/span[2]').text
        assert (login_name == '欢迎您,' + 'neimenggu')#assert比较断言
    except Exception as e:
        raise e
        print("登录失败")
    #关闭浏览器
    driver.quit()

    三、代码的优化

    优化原因:不同的账号登录,每次都要在代码中找到替换位置,特别费事,其实代码都不改变,只是变换“用户名”和“密码”,只要将登录写成一个函数,将“用户名”和“密码”参数化,这样每次登录,我都调用同一个函数,只是传的参数不同而已。

    优化如下:

    from time import sleep
    def login(driver,username,password):
        driver.get("http://192.168.x.xx:xxxxx")
        driver.maximize_window()
        driver.implicitly_wait(10)#等待页面元素加载
        driver.find_element_by_id('username').send_keys(username)
        driver.find_element_by_id('password').send_keys(password)
        sleep(10)# 设置较长的等待时间为了手动输入验证码
        driver.find_element_by_xpath('//*[@id="formLogin"]/div[4]/div/div/span/button').click()
        driver.implicitly_wait(10)#等待系统页面上的元素加载
        try:
            login_name = driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[1]/div/div/span[1]/span[2]').text
            assert (login_name == '欢迎您,' + username)#assert比较断言
        except Exception as e:
            raise e
            print("登录失败")
        driver.quit()
    
    
    if __name__=="__main__":
        driver=webdriver.Chrome()
        login(driver,"neimenggu","xxxxx")

    这样每次只要调用login函数就可以。

    写在最后:跟博主的案例不同,这个代码自己在用,所以写起来比较简单一些,但是调试费了一些时间

    参考博客:https://www.cnblogs.com/yoyoketang/p/6128596.html

  • 相关阅读:
    山东理工大学ACM平台题答案关于C语言 1137 C/C++经典程序训练7---求某个范围内的所有素数
    又遇BUG-ORA-01148:数据文件忽然变为recover状态
    poj 1191 棋盘分割 动态规划
    libevent的使用方法--回显服务器的简单实例
    java.lang.OutOfMemory总结分析
    山东理工大学ACM平台题答案关于C语言 1580 闰年
    SAE搭建WordPress教程 免费建WordPress博客站
    编译小结(6)认识Automake
    PHP再学习1——cURL表单提交、HTTP请求和响应分析
    新手一步一步OpenCV+Win7+Visual Studio 2013环境配置
  • 原文地址:https://www.cnblogs.com/xiaobeibi/p/12205147.html
Copyright © 2011-2022 走看看