当前位置:   article > 正文

商城自动化测试实战 —— 登录+滑块验证_自动化测试模拟滑块验证

自动化测试模拟滑块验证

hello大家好,我是你们的小编!

本商城测试项目采取PO模型和数据分离式架构,采用pytest+selenium+jenkins结合的方式进行脚本编写与运行,项目架构如下:

图片

1、创建项目名称:code_shopping,创建所需项目文件

图片

2、在tools层中建立 get_log.py文件,复制以下代码

     此为项目日志工具,使用时直接调用即可

  1. import logging.handlers
  2. from conftest import BASE_PATH
  3. import os
  4. # 新建类
  5. class GetLog:
  6.     # 新建一个日志变量
  7.     __logger = None
  8.     # 新建获取日志的方法
  9.     @classmethod
  10.     def get_logger(cls):
  11.         # 判断日志器为空
  12.         if cls.__logger is None:
  13.             # 获取日志器
  14.             cls.__logger = logging.getLogger()
  15.             # 修改默认的级别
  16.             cls.__logger.setLevel(logging.INFO)
  17.             log_path = BASE_PATH + os.sep + "result" + os.sep+"log" + os.sep + "AT.log"
  18.             # 获取处理器
  19.             th = logging.handlers.TimedRotatingFileHandler(filename=log_path,
  20.                                                            when="midnight",
  21.                                                            interval=1,
  22.                                                            backupCount=3,
  23.                                                            encoding="utf-8")
  24.             # 获取格式器
  25.             fmt = "%(asctime)s%(levelname)s[%(filename)s(%(funcName)s:%(lineno)d)]-%(message)s"
  26.             fm = logging.Formatter(fmt)
  27.             # 将格式器添加到处理器中
  28.             th.setFormatter(fm)
  29.             # 将处理器添加到日志器中
  30.             cls.__logger.addHandler(th)
  31.         # 返回日志器
  32.         return cls.__logger
  33. if __name__ == '__main__':
  34.     log = GetLog.get_logger()
  35.     log.info("1111")
  36.     log.error("22222")

3、在scripts中建立 sh_login文件夹和 test_login.py文件

     开始编写商城登录页面代码

图片

4、在test_login.py中编写脚本

     商城登录页面包含:帐号+密码+滑动验证码的混合验证模式

     4.1首先将验证码的2张图片下载到本地(注意填写等待图片加载时间),通过商城HTML页面发现图片经过base64加密,需解码保存本地

图片

  1. # 获取图片的地址
  2. # sleep(3)
  3. img = driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[2]/div[3]/div[1]/img[1]'))
  4. img2 = driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[2]/div[3]/div[1]/img[2]'))
  5. = img.get_attribute("src")
  6. s2 = img2.get_attribute("src")
  7. # print(type(s))
  8. # print(s)
  9. # 使用split()函数将字符串拆分成多个数字
  10. numbers = s.split(",")
  11. numbers2 = s2.split(",")
  12. # print(numbers)
  13. # print(type(numbers))
  14. # 获取图片的base64加密数据
  15. djd = numbers[1]
  16. djd2 = numbers2[1]
  17. # 输出提取出的数字
  18. # print(djd)
  19. # base64解码
  20. lk = base64.b64decode(djd)
  21. lk2 = base64.b64decode(djd2)
  22. # 获取图片到本地
  23. pic = open("re.png""wb")
  24. pic2 = open("can.png""wb")
  25. pic.write(lk)
  26. pic2.write(lk2)
  27. pic.close()
  28. pic2.close()

4.2 对图像进行处理,计算出滑块的拖动距离(此方法单独写在test001.py文件,方便调用)

  1. import cv2
  2. # 对图像处理
  3. def handel_img(img):
  4.     imgGray = cv2.cvtColor(img, cv2.COLOR_RGBA2GRAY)  # 转灰度图
  5.     imgBlur = cv2.GaussianBlur(imgGray, (55), 1)  # 高斯模糊
  6.     imgCanny = cv2.Canny(imgBlur, 6060)  # Canny算子边缘检测
  7.     return imgCanny
  8. # 读取图像
  9. def match(img_jpg_path, img_png_path):
  10.     # 读取图像
  11.     img_jpg = cv2.imread(img_jpg_path, cv2.IMREAD_UNCHANGED)
  12.     img_png = cv2.imread(img_png_path, cv2.IMREAD_UNCHANGED)
  13.     img = handel_img(img_jpg)
  14.     small_img = handel_img(img_png)
  15.     res_TM_CCOEFF_NORMED = cv2.matchTemplate(img, small_img, 3)
  16.     value = cv2.minMaxLoc(res_TM_CCOEFF_NORMED)
  17.     value = value[3][0]  # 获取到移动距离
  18.     return value
  19. if __name__ == '__main__':
  20.     dd = match('./re.png''./can.png')
  21.     print(dd)

4.3 最后模拟鼠标点击拖动滑块动作,完成验证

  1. # 计算要滑动的距离
  2. dd = match('./re.png''./can.png')
  3. print(dd)
  4. sleep(2)
  5. # 拖动滑块
  6. # 找到拖动元素
  7. slider = driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[2]/div[3]/div[2]/span[2]'))
  8. # 按住按钮
  9. ActionChains(driver).click_and_hold(slider).perform()
  10. sleep(1)
  11. # 滑动距离对应距离
  12. ActionChains(driver).move_by_offset(xoffset=dd, yoffset=0).perform()
  13. sleep(3)
  14. # 放开鼠标
  15. ActionChains(driver).release().perform()

4.4 完成输入,验证,登录进入系统,判断是否登录成功

  1. # 判断是否登录成功
  2. getshu = driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[3]/div/ul[1]/ul/li[1]')).text
  3. # print(getshu)
  4. if getshu == "Hi,欢迎来到lilishop":
  5.     print("登录成功")
  6. else:
  7.     print("登录失败")

5、完整代码如下

  1. from selenium import webdriver
  2. from time import sleep
  3. from selenium.webdriver.common.by import By
  4. import base64
  5. from scripts.sh_login.test001 import match
  6. from selenium.webdriver import ActionChains
  7. # 启动浏览器驱动
  8. driver = webdriver.Chrome()
  9. # 最大化
  10. driver.maximize_window()
  11. # 输入商城地址
  12. driver.get("https://pc-b2b2c.pickmall.cn/login")
  13. sleep(1)
  14. # 输入用户名和密码
  15. driver.find_element(By.CSS_SELECTOR, ("[placeholder='用户名']")).send_keys("ceshi")
  16. sleep(1)
  17. driver.find_element(By.CSS_SELECTOR, ("[placeholder='密码']")).send_keys("123456")
  18. sleep(1)
  19. # 点击登录按钮
  20. driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[2]/div[2]/div[3]/div[1]/form[1]/div[3]/div/button')).click()
  21. sleep(2)
  22. # 滑动滑块
  23. # 获取图片的地址
  24. # sleep(3)
  25. img = driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[2]/div[3]/div[1]/img[1]'))
  26. img2 = driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[2]/div[3]/div[1]/img[2]'))
  27. = img.get_attribute("src")
  28. s2 = img2.get_attribute("src")
  29. # print(type(s))
  30. # print(s)
  31. # 使用split()函数将字符串拆分成多个数字
  32. numbers = s.split(",")
  33. numbers2 = s2.split(",")
  34. # print(numbers)
  35. # print(type(numbers))
  36. # 获取图片的base64加密数据
  37. djd = numbers[1]
  38. djd2 = numbers2[1]
  39. # 输出提取出的数字
  40. # print(djd)
  41. # base64解码
  42. lk = base64.b64decode(djd)
  43. lk2 = base64.b64decode(djd2)
  44. # 获取图片到本地
  45. pic = open("re.png""wb")
  46. pic2 = open("can.png""wb")
  47. pic.write(lk)
  48. pic2.write(lk2)
  49. pic.close()
  50. pic2.close()
  51. # 计算要滑动的距离
  52. dd = match('./re.png''./can.png')
  53. print(dd)
  54. sleep(2)
  55. # 拖动滑块
  56. # 找到拖动元素
  57. slider = driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[2]/div[3]/div[2]/span[2]'))
  58. # 按住按钮
  59. ActionChains(driver).click_and_hold(slider).perform()
  60. sleep(1)
  61. # 滑动距离对应距离
  62. ActionChains(driver).move_by_offset(xoffset=dd, yoffset=0).perform()
  63. sleep(3)
  64. # 放开鼠标
  65. ActionChains(driver).release().perform()
  66. sleep(5)
  67. # 判断是否登录成功
  68. getshu = driver.find_element(By.XPATH, ('//*[@id="app"]/div/div[3]/div/ul[1]/ul/li[1]')).text
  69. # print(getshu)
  70. if getshu == "Hi,欢迎来到lilishop":
  71.     print("登录成功")
  72. else:
  73.     print("登录失败")
  74. # 关闭浏览器
  75. driver.quit()

6、完成整个登录过程,成功视频如下

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/970113
推荐阅读
相关标签
  

闽ICP备14008679号