selenium3+python自动化4-登录
一、前言
在写这篇博客之前,我已经根据自己目前的项目写好了一个登录脚本,并且写好的内容跟我今天看到的文章要求一致,自动化脚本大都是从“登录”开始,就好比学习每个语言都是从“hello,world”开始的。但是看了博主的文章,脚本还是要先跑起来,然后再优化的角度去写。我还是从头整理自己的思路,锻炼自己的分析能力。
二、登录的脚本
此处是以自己的项目为例,目标:体验从登录-验证登录信息正确性-关闭浏览器一个过程的自动化实现
思路如下:
(1)登录
- 打开浏览器,我用的都是谷歌浏览器,版本77.0.3865.75
- 输入网址
- 设置等待时间,等待页面元素加载出来(等待时间设置有三种方式:强制等待的sleep,静态等待的implicitly_wait(10),动态等待时间WebDriverWait(driver,10),三种方式可以找度娘问问区别。)
- 定位“账号”、“密码”输入框并传值
- 设置等待时间,为了手动输入验证码
- 定位“登录”按钮,并点击
(2)验证登录信息正确性
登录完成以后,系统的右上角会显示我当前登录的“账号”,只要添加一个检查点,判断右上角的账号跟我预期的账号是否一致。
- 先定位系统右上角“账号”,获取元素的text文本值
- 添加断言,判断获取到的值与期望是否一致,用到assert()函数
- 若一致,则代码无报错,继续执行,若不一致,则抛出异常,这里用到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函数就可以。
写在最后:跟博主的案例不同,这个代码自己在用,所以写起来比较简单一些,但是调试费了一些时间