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

posted @ 2020-01-17 15:51  小北鼻  阅读(285)  评论(0编辑  收藏  举报