引言:
做自动化测试,尤其是通过page object模式做UI自动化测试,登陆是个很麻烦的事情,比如你想对某个页面进行测试,一般直接链接到那个页面是不可能的,总是需要先登陆,然后刷新页面才能到想要的页面;而登录总不能每次都通过输入用户名、密码、验证码等登录,这就比较不智能,不自动化了;之前都是通过cookie来绕过登录,driver.add_cookie({‘name‘: ‘cookie_key‘, ‘value‘: ‘cookie_value‘});但是HTML5发布后,慢慢不在通过cookie来记录用户的信息,而是使用localstorage,什么是localstorage??请自己百度一下;
正文:
先上代码,这是我们公司内网的系统,估计看这文章的朋友,直接用我的代码会执行不了,可以看下基本思想,然后融会贯通到自己的系统中;
#coding:utf-8 from selenium import webdriver import time import requests def get_token(): api_url = ‘http://192.168.0.212:808/api/gwy/user/login.json‘ request_data = ‘data={"param":{"mobile":"18800080008","password":"96e79218965eb72c92a549dd5a330112"},"sign":"2b78538442997ea1b47eda413c91bf95"}‘ HEADER = { ‘Content-Type‘: ‘application/x-www-form-urlencoded; charset=UTF-8‘ } res = requests.post(api_url, data=request_data, headers=HEADER).json() return res driver = webdriver.Chrome() driver.get(‘http://192.168.0.212:808/html/marketTypeManagement.html‘) time.sleep(3) # driver.add_cookie({‘name‘: ‘token‘, ‘value‘: ‘f53fe0f1-504b-4cac-adde-eb17e42fde72‘}) driver.execute_script(‘localStorage.setItem("token", arguments["token"]);‘, get_token()[‘data‘]) time.sleep(5) driver.quit()
解读一下代码:
跟开发确认,是通过localstorage中的token字段来验证用户登录信息;所以首先一步是拿到登录的token,我这里是通过定义一个get_token()函数来调登录的接口,从接口返回值中拿到token值;
用的是requests模块模拟发起http请求,获取到返回值后,提取token值;
然后进行测试,主要是用执行一段js语法的脚本代码来想localStorage中塞入获取到的token值,然后刷新页面,就能绕过登录,直接到你指定的页面了;
driver.execute_script(‘localStorage.setItem("token", arguments["token"]);‘, get_token()[‘data‘])
时间: 2024-11-02 13:53:51