前提:创建一个text文件,用于存储用户名和密码,再用代码去调用文件
,
root,
,122
root,123
yohonormal,123456
测试用的用户名和密码
此文件中包含了 用户名和密码都为空、密码为空、用户名为空、密码错误、用户名和密码都正确 的情况
1、打算把文件查看也封装成一个方法,发现没办法把登录加进去,写了一个半成品,还没搞好
from selenium import webdriver
from time import sleep
un = ''
pw = ''
# 打开谷歌浏览器
browser = webdriver.Chrome(r'/Users/chensihan/Downloads/chromedriver')
# 最大化浏览器
browser.maximize_window()
# 打开公司内部网站
browser.get("https://testsmallsystem.yoho8.com/login")
# 给1秒钟去打开页面,没打开页面就去做其他操作,会报错
sleep(1)
# 获取文件数据
def file():
# 将un,pw作为全部变量,在此函数中赋值后,在其他函数中可使用这个值,否则使用的是初始化的值
global un, pw, msg_line
# 打开文件,读取用户名
msg = open('/Users/chensihan/Desktop/用户名和密码.txt', 'r')
# 循环获取每行内容
for line in msg:
# 使用split按空格分割字符,并且用strip去除掉两边的空格,得到了一个列表msg_line,
# msg_line的第0个元素就是文件第一行的用户名,msg_line的第1个元素就是文件第一行的密码
msg_line = line.strip().split()
# 将msg_line的第0个元素赋值给un,用于登录函数中输入用户名
un = msg_line[0]
# 将msg_line的第1个元素赋值给pw,用于登录函数中输入密码
pw = msg_line[1]
msg.close()
# 登录
def login():
# 通过xpath定位用户名输入框,并清空输入框
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear()
# 输入用户名
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un)
# 通过xpath定位密码输入框,并清空输入框
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear()
# 输入密码
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw)
sleep(1)
# 登录
browser.find_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click()
# 给网页2秒加载时间
sleep(2)
# 退出当前账户
def quit():
browser.find_element_by_class_name('_1ECz20e4Sb4cz8jt2QRoBL').click()
sleep(2)
# file()
# login()
# quit()
def start():
while 1:
file()
if msg_line != []:
login()
quit()
else:
print('执行完毕!!!')
break
start()
#
# # 截取当前页面
# browser.save_screenshot("/Applications/Google Chrome.app/p.png")
# # 定位验证码
# yzm = browser.find_element_by_id('randImage')
#
# location = yzm.location
# size = yzm.size
# rangle = (int(location['x']), int(location['y']), int(location['x']+size['width']), int(location['y']+size['height']))
#
# i = Image.open('/Applications/Google Chrome.app/p.png')
# frame4 = i.crop(rangle)
# frame4.save('/Applications/Google Chrome.app/frame4.png')
# dym = Image.open('/Applications/Google Chrome.app/frame4.png')
# text = pytesseract.image_to_string(dym)
# browser.find_element_by_name('code').send_keys(text)
# browser.find_elements_by_class_name('btn').click()
未完成的循环,可以不看
未完成的循环,可以不看
2、除文件外,其余都封装成了方法
from selenium import webdriver
from time import sleep
un = ''
pw = ''
# 打开谷歌浏览器
browser = webdriver.Chrome(r'/Users/chensihan/Downloads/chromedriver')
# 最大化浏览器
browser.maximize_window()
# 打开公司内部网站
browser.get("https://testsmallsystem.yoho8.com/login")
# 给1秒钟去打开页面,没打开页面就去做其他操作,会报错
sleep(1)
# 登录
def login():
# 通过xpath定位用户名输入框,并清空输入框
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear()
# 输入用户名
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un)
# 通过xpath定位密码输入框,并清空输入框
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear()
# 输入密码
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw)
sleep(1)
# 登录
browser.find_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click()
# 给网页2秒加载时间
sleep(2)
# 退出当前账户
def quit():
browser.find_element_by_class_name('_1ECz20e4Sb4cz8jt2QRoBL').click()
sleep(2)
# 打开文件,读取用户名
msg = open('/Users/chensihan/Downloads/老男孩/selenium测试/0测试用的用户名和密码', 'r')
# 循环获取每行内容
for line in msg:
# 使用split按空格分割字符,并且用strip去除掉两边的空格,得到了一个列表msg_line,
# msg_line的第0个元素就是文件第一行的用户名,msg_line的第1个元素就是文件第一行的密码
msg_line = line.strip().split()
# 将msg_line的第0个元素赋值给un,用于登录函数中输入用户名
un = msg_line[0]
# 将msg_line的第1个元素赋值给pw,用于登录函数中输入密码
pw = msg_line[1]
# 容错处理
# 正确的执行登录和退出
# 关闭浏览器
browser.quit()
View Code
3、上边的代码只有正确账号登录,没有兼容错误的账号,本版本加了空账号、缺失用户名或密码的
from selenium import webdriver
from time import sleep
un = ''
pw = ''
# 打开谷歌浏览器
browser = webdriver.Chrome(r'/Users/chensihan/Downloads/chromedriver')
# 最大化浏览器
browser.maximize_window()
# 打开公司内部网站
browser.get("https://testsmallsystem.yoho8.com/login")
# 给1秒钟去打开页面,没打开页面就去做其他操作,会报错
sleep(1)
# 登录
def login():
# 通过xpath定位用户名输入框,并清空输入框
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear()
# 输入用户名
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un)
# 通过xpath定位密码输入框,并清空输入框
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear()
# 输入密码
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw)
sleep(1)
# 登录
browser.find_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click()
# 给网页2秒加载时间
sleep(2)
# 退出当前账户
def quit():
browser.find_element_by_class_name('_1ECz20e4Sb4cz8jt2QRoBL').click()
sleep(2)
# 打开文件,读取用户名
msg = open('/Users/chensihan/Downloads/老男孩/selenium测试/0测试用的用户名和密码', 'r')
# 循环获取每行内容
for line in msg:
# 使用split按空格分割字符,并且用strip去除掉两边的空格,得到了一个列表msg_line,
# msg_line的第0个元素就是文件第一行的用户名,msg_line的第1个元素就是文件第一行的密码
msg_line = line.strip().split(',')
# 判断是否输入为空,如果获取当前行的元素为0个
if len(msg_line) == 0:
un = ''
pw = ''
else:
# 将msg_line的第0个元素赋值给un,用于登录函数中输入用户名
un = msg_line[0]
# 将msg_line的第1个元素赋值给pw,用于登录函数中输入密码
pw = msg_line[1]
# 容错处理
# 正确的执行登录和退出
try:
login()
quit()
# 错误的跳出当前循环
except:
continue
# 关闭浏览器
browser.quit()
加了错误处理
加了错误处理
4、代码可执行了,接下来就是把测试结果保存到文件,测试结果,就是发送登录请求后,接口返回的数据,以及当前请求接口时使用的用户名和密码
from selenium import webdriver
from time import sleep
import requests
import json
un = ''
pw = ''
# 打开谷歌浏览器
browser = webdriver.Chrome(r'/Users/chensihan/Downloads/chromedriver')
# 最大化浏览器
browser.maximize_window()
# 打开公司内部网站
browser.get("https://testsmallsystem.yoho8.com/login_file")
# 给1秒钟去打开页面,没打开页面就去做其他操作,会报错
sleep(1)
# 登录
def login():
# 通过xpath定位用户名输入框,并清空输入框
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear()
# 输入用户名
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un)
# 通过xpath定位密码输入框,并清空输入框
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear()
# 输入密码
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw)
sleep(1)
# 登录
browser.find_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click()
# 给网页2秒加载时间
sleep(2)
# 获取登录后登录接口的数据
def request_url():
# 接口地址
url = 'https://testm.yoho8.com/apiauth/login/login'
# 请求头
headers = {
"Content-Type": "application/json",
}
# 请求体。因为是先执行的登录,所以使用当前登录的用户名和密码来请求这个接口
data = {
"userName": un,
"password": pw,
}
# 获取请求之后的返回信息
response = requests.post(url=url, data=json.dumps(data), headers=headers)
print(response.text)
# 将获取的返回信息保存到文件中,并换行
with open('测试结果', 'a') as fp:
fp.write('用户名:' + un + ' ' + '密码:' + pw + ' ' + '登录结果:' + response.text + '\n')
print('获取成功!')
# 退出当前账户
def quit():
browser.find_element_by_class_name('_1ECz20e4Sb4cz8jt2QRoBL').click()
sleep(2)
# 打开文件,读取用户名
msg = open('/Users/chensihan/Downloads/老男孩/selenium测试/login_file/0测试用的用户名和密码', 'r')
# 循环获取每行内容
for line in msg:
# 使用split按空格分割字符,并且用strip去除掉两边的空格,得到了一个列表msg_line,
# msg_line的第0个元素就是文件第一行的用户名,msg_line的第1个元素就是文件第一行的密码
msg_line = line.strip().split(',')
# 判断是否输入为空,如果获取当前行的元素为0个,则用户名和密码都为空
if len(msg_line) == 0:
un = ''
pw = ''
else:
# 将msg_line的第0个元素赋值给un,用于登录函数中输入用户名
un = msg_line[0]
# 将msg_line的第1个元素赋值给pw,用于登录函数中输入密码
pw = msg_line[1]
# 容错处理
# 正确的执行登录和退出
try:
login()
request_url()
quit()
# 错误的跳出当前循环
except:
continue
# 关闭浏览器
browser.quit()
输出测试结果并保存文件
输出测试结果并保存文件
5、分析测试结果
通过结果中的errcode,筛选出errcode非0(即登录不成功的状态)的所有数据,将登录的用户名和密码以及请求结果保存到新文件中
并且加了一行 “ if __name__ == '__main__': ” ,方便其他文件import此文件时,此文件内部的内容不会被执行
from selenium import webdriver
from time import sleep
import requests
import json
un = ''
pw = ''
# 打开谷歌浏览器
browser = webdriver.Chrome(r'/Users/chensihan/Downloads/chromedriver')
# 最大化浏览器
browser.maximize_window()
# 打开公司内部网站
browser.get("https://testsmallsystem.yoho8.com/login_file")
# 给1秒钟去打开页面,没打开页面就去做其他操作,会报错
sleep(1)
# 登录
def login():
# 通过xpath定位用户名输入框,并清空输入框
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear()
# 输入用户名
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un)
# 通过xpath定位密码输入框,并清空输入框
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear()
# 输入密码
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw)
sleep(1)
# 登录
browser.find_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click()
# 给网页2秒加载时间
sleep(2)
# 获取登录后登录接口的数据
def request_url():
# 接口地址
url = 'https://testm.yoho8.com/apiauth/login/login'
# 请求头
headers = {
"Content-Type": "application/json",
}
# 请求体。因为是先执行的登录,所以使用当前登录的用户名和密码来请求这个接口
data = {
"userName": un,
"password": pw,
}
# 获取请求之后的返回信息
response = requests.post(url=url, data=json.dumps(data), headers=headers)
# print(response.text)
# 将获取的返回信息保存到文件中,并换行
with open('测试结果', 'a') as fp:
fp.write('用户名:' + un + ' ' + '密码:' + pw + ' ' + '登录结果:' + response.text + '\n')
# print('获取成功!')
# 退出当前账户
def quit():
browser.find_element_by_class_name('_1ECz20e4Sb4cz8jt2QRoBL').click()
sleep(2)
# 分析测试结果
def test_result():
msg_dict = {}
with open('测试结果', 'r') as fp:
msg = fp.readlines()
for line in msg:
msg_line = line.strip().split()
for i in msg_line:
i1 = i.strip().split(',', 0)
for i in i1:
i2 = i1[0].split(':', 1)
msg_dict[i2[0]] = i2[1]
msg_dict['登录结果'] = eval(msg_dict['登录结果'])
if msg_dict['登录结果']['errCode'] != 0:
with open('测试结果分析', 'a') as fp1:
fp1.write(str(msg_dict) + '\n')
print('分析完毕!')
# 只在本文件中执行,被import的时候,不会执行整个程序
if __name__ == '__main__':
# 打开文件,读取用户名
msg = open('/Users/chensihan/Downloads/老男孩/selenium测试/login_file/0测试用的用户名和密码', 'r')
# 循环获取每行内容
for line in msg:
# 使用split按空格分割字符,并且用strip去除掉两边的空格,得到了一个列表msg_line,
# msg_line的第0个元素就是文件第一行的用户名,msg_line的第1个元素就是文件第一行的密码
msg_line = line.strip().split(',')
# 判断是否输入为空,如果获取当前行的元素为0个,则用户名和密码都为空
if len(msg_line) == 0:
un = ''
pw = ''
else:
# 将msg_line的第0个元素赋值给un,用于登录函数中输入用户名
un = msg_line[0]
# 将msg_line的第1个元素赋值给pw,用于登录函数中输入密码
pw = msg_line[1]
# 容错处理
# 正确的执行登录和退出
try:
login()
request_url()
quit()
# 错误的跳出当前循环
except:
continue
test_result()
# 关闭浏览器
browser.quit()
分析测试结果
分析测试结果