赞
踩
hello大家好,我是你们的小编!
本商城测试项目采取PO模型和数据分离式架构,采用pytest+selenium+jenkins结合的方式进行脚本编写与运行,项目架构如下:
1、创建项目名称:code_shopping,创建所需项目文件
2、在tools层中建立 get_log.py文件,复制以下代码
此为项目日志工具,使用时直接调用即可
- import logging.handlers
- from conftest import BASE_PATH
- import os
-
-
- # 新建类
- class GetLog:
- # 新建一个日志变量
- __logger = None
-
- # 新建获取日志的方法
- @classmethod
- def get_logger(cls):
- # 判断日志器为空
- if cls.__logger is None:
- # 获取日志器
- cls.__logger = logging.getLogger()
- # 修改默认的级别
- cls.__logger.setLevel(logging.INFO)
- log_path = BASE_PATH + os.sep + "result" + os.sep+"log" + os.sep + "AT.log"
- # 获取处理器
- th = logging.handlers.TimedRotatingFileHandler(filename=log_path,
- when="midnight",
- interval=1,
- backupCount=3,
- encoding="utf-8")
- # 获取格式器
- fmt = "%(asctime)s%(levelname)s[%(filename)s(%(funcName)s:%(lineno)d)]-%(message)s"
- fm = logging.Formatter(fmt)
- # 将格式器添加到处理器中
- th.setFormatter(fm)
- # 将处理器添加到日志器中
- cls.__logger.addHandler(th)
- # 返回日志器
- return cls.__logger
-
-
- if __name__ == '__main__':
- log = GetLog.get_logger()
- log.info("1111")
- log.error("22222")

3、在scripts中建立 sh_login文件夹和 test_login.py文件
开始编写商城登录页面代码
4、在test_login.py中编写脚本
商城登录页面包含:帐号+密码+滑动验证码的混合验证模式
4.1首先将验证码的2张图片下载到本地(注意填写等待图片加载时间),通过商城HTML页面发现图片经过base64加密,需解码保存本地
- # 获取图片的地址
- # sleep(3)
- img = driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[2]/div[3]/div[1]/img[1]'))
- img2 = driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[2]/div[3]/div[1]/img[2]'))
-
- s = img.get_attribute("src")
- s2 = img2.get_attribute("src")
- # print(type(s))
- # print(s)
- # 使用split()函数将字符串拆分成多个数字
- numbers = s.split(",")
- numbers2 = s2.split(",")
- # print(numbers)
- # print(type(numbers))
- # 获取图片的base64加密数据
- djd = numbers[1]
- djd2 = numbers2[1]
- # 输出提取出的数字
- # print(djd)
- # base64解码
- lk = base64.b64decode(djd)
- lk2 = base64.b64decode(djd2)
- # 获取图片到本地
- pic = open("re.png", "wb")
- pic2 = open("can.png", "wb")
- pic.write(lk)
- pic2.write(lk2)
- pic.close()
- pic2.close()

4.2 对图像进行处理,计算出滑块的拖动距离(此方法单独写在test001.py文件,方便调用)
- import cv2
-
-
- # 对图像处理
- def handel_img(img):
- imgGray = cv2.cvtColor(img, cv2.COLOR_RGBA2GRAY) # 转灰度图
- imgBlur = cv2.GaussianBlur(imgGray, (5, 5), 1) # 高斯模糊
- imgCanny = cv2.Canny(imgBlur, 60, 60) # Canny算子边缘检测
- return imgCanny
-
-
- # 读取图像
- def match(img_jpg_path, img_png_path):
- # 读取图像
- img_jpg = cv2.imread(img_jpg_path, cv2.IMREAD_UNCHANGED)
- img_png = cv2.imread(img_png_path, cv2.IMREAD_UNCHANGED)
- img = handel_img(img_jpg)
- small_img = handel_img(img_png)
- res_TM_CCOEFF_NORMED = cv2.matchTemplate(img, small_img, 3)
- value = cv2.minMaxLoc(res_TM_CCOEFF_NORMED)
- value = value[3][0] # 获取到移动距离
- return value
-
-
- if __name__ == '__main__':
- dd = match('./re.png', './can.png')
- print(dd)

4.3 最后模拟鼠标点击拖动滑块动作,完成验证
- # 计算要滑动的距离
- dd = match('./re.png', './can.png')
- print(dd)
- sleep(2)
- # 拖动滑块
- # 找到拖动元素
- slider = driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[2]/div[3]/div[2]/span[2]'))
- # 按住按钮
- ActionChains(driver).click_and_hold(slider).perform()
- sleep(1)
- # 滑动距离对应距离
- ActionChains(driver).move_by_offset(xoffset=dd, yoffset=0).perform()
- sleep(3)
- # 放开鼠标
- ActionChains(driver).release().perform()
4.4 完成输入,验证,登录进入系统,判断是否登录成功
- # 判断是否登录成功
- getshu = driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[3]/div/ul[1]/ul/li[1]')).text
- # print(getshu)
- if getshu == "Hi,欢迎来到lilishop":
- print("登录成功")
- else:
- print("登录失败")
5、完整代码如下
- from selenium import webdriver
- from time import sleep
- from selenium.webdriver.common.by import By
- import base64
- from scripts.sh_login.test001 import match
- from selenium.webdriver import ActionChains
-
- # 启动浏览器驱动
- driver = webdriver.Chrome()
- # 最大化
- driver.maximize_window()
- # 输入商城地址
- driver.get("https://pc-b2b2c.pickmall.cn/login")
- sleep(1)
- # 输入用户名和密码
- driver.find_element(By.CSS_SELECTOR, ("[placeholder='用户名']")).send_keys("ceshi")
- sleep(1)
- driver.find_element(By.CSS_SELECTOR, ("[placeholder='密码']")).send_keys("123456")
- sleep(1)
- # 点击登录按钮
- driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[2]/div[2]/div[3]/div[1]/form[1]/div[3]/div/button')).click()
-
- sleep(2)
- # 滑动滑块
- # 获取图片的地址
- # sleep(3)
- img = driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[2]/div[3]/div[1]/img[1]'))
- img2 = driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[2]/div[3]/div[1]/img[2]'))
-
- s = img.get_attribute("src")
- s2 = img2.get_attribute("src")
- # print(type(s))
- # print(s)
- # 使用split()函数将字符串拆分成多个数字
- numbers = s.split(",")
- numbers2 = s2.split(",")
- # print(numbers)
- # print(type(numbers))
- # 获取图片的base64加密数据
- djd = numbers[1]
- djd2 = numbers2[1]
- # 输出提取出的数字
- # print(djd)
- # base64解码
- lk = base64.b64decode(djd)
- lk2 = base64.b64decode(djd2)
- # 获取图片到本地
- pic = open("re.png", "wb")
- pic2 = open("can.png", "wb")
- pic.write(lk)
- pic2.write(lk2)
- pic.close()
- pic2.close()
-
- # 计算要滑动的距离
- dd = match('./re.png', './can.png')
- print(dd)
- sleep(2)
- # 拖动滑块
- # 找到拖动元素
- slider = driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[2]/div[3]/div[2]/span[2]'))
- # 按住按钮
- ActionChains(driver).click_and_hold(slider).perform()
- sleep(1)
- # 滑动距离对应距离
- ActionChains(driver).move_by_offset(xoffset=dd, yoffset=0).perform()
- sleep(3)
- # 放开鼠标
- ActionChains(driver).release().perform()
- sleep(5)
- # 判断是否登录成功
- getshu = driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[3]/div/ul[1]/ul/li[1]')).text
- # print(getshu)
- if getshu == "Hi,欢迎来到lilishop":
- print("登录成功")
- else:
- print("登录失败")
- # 关闭浏览器
- driver.quit()

6、完成整个登录过程,成功视频如下
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。