一、使用OpenCV图像识别函数

 1 import time
2 import cv2
3 import requests
4 from selenium import webdriver
5 from selenium.webdriver import ActionChains
6 from selenium.webdriver.common.by import By
7
8 def FindPic(target="../lib/bj.jpg", block="../lib/block.jpg"):
9 """
10 找出图像中最佳匹配位置
11 :param target: 目标即背景图
12 :param template: 模板即需要找到的图
13 :return: 返回最佳匹配及其最差匹配和对应的坐标
14 """
15 #读取图片
16 target_rgb = cv2.imread(target)
17 #灰度处理
18 target_gray = cv2.cvtColor(target_rgb, cv2.COLOR_BGR2GRAY)
19 #读取滑块
20 template_rgb = cv2.imread(block, 0)
21 #匹配缺口在背景图的位置
22 res = cv2.matchTemplate(target_gray, template_rgb, cv2.TM_CCOEFF_NORMED)
23 #获取最差和最佳匹配结果
24 value = cv2.minMaxLoc(res)
25 print(value)
26 # 返回最佳匹配的x坐标
27 return value[2][0]

二、登录页面代码

 1 driver = webdriver.Chrome()
2 driver.implicitly_wait(10)
3
4 #打开网站
5 driver.get('https://faerge.com/login')
6 driver.maximize_window()
7 username = driver.find_element(by=By.XPATH, value='//*[@id="root"]/section/div[2]/div/div/div[2]/div/form/div[1]/input')
8 username.clear()
9 username.send_keys('x15191690047')
10
11 password = driver.find_element(by=By.XPATH, value='//*[@id="root"]/section/div[2]/div/div/div[2]/div/form/div[2]/input')
12 password.clear()
13 password.send_keys('953680003xp@')
14
15 login = driver.find_element(by=By.XPATH, value='//*[@id="root"]/section/div[2]/div/div/div[2]/div/form/button')
16 login.click()
17
18 time.sleep(2)
19
20 driver.switch_to.frame(driver.find_element(by=By.XPATH, value='//*[@id="tcaptcha_iframe"]'))
21
22 #获取图片地址
23
24 #背景图
25 ele_bj = driver.find_element(by=By.XPATH, value='//*[@id="slideBg"]')
26 src_bj = ele_bj.get_attribute('src')
27 #滑块图
28 ele_block = driver.find_element(by=By.XPATH, value='//*[@id="slideBlock"]')
29 src_block = ele_block.get_attribute('src')
30 print(src_bj)
31 print(src_block)
32
33 #下载背景图
34 img_bj = requests.get(src_bj).content
35 f = open('../lib/bj.jpg', mode='wb')
36 f.write(img_bj)
37 f.close()
38
39 #下载滑块图
40 img_block = requests.get(src_block).content
41 f = open('../lib/block.jpg', mode='wb')
42 f.write(img_block)
43 f.close()
44
45 x = FindPic('../lib/bj.jpg', '../lib/block.jpg')
46 print(x)
47
48 #图片左边到缺块长度减去x的值是26,680是图片实际长度,340是图片缩放长度
49 x = int(x*340/680)-26
50
51 #滑动方法selenium中ActionChains
52 action = ActionChains(driver)
53 #按住鼠标图片不松动
54 action.click_and_hold(ele_block).perform()
55 #移动鼠标
56 action.move_by_offset(x, 0).perform()
57 #松开鼠标
58 action.release(ele_block).perform()

UI自动化滑动登录的更多相关文章

  1. robot framework UI自动化之登录

    前面已写环境的搭建,接下来就可以直接进行UI自动化的编写工作了 目录 1.准备工作 2.了解定位 3.一个登录案例 1.准备工作 第一步:需要使用chrome浏览器来测试,因此首先要有一个驱动,下载好 ...

  2. IDEA+java通过SSH来进行分析日志,实现UI自动化动态验证码登录

    在我写自动化脚本的时候是要真实发送验证码才能往下进行UI自动化 思路:验证码会显示在哪些地方,手机短信?数据库存储?日志? 完整代码如下: package guanyu.tools; import c ...

  3. Appium UI自动化的那些梗

    @作者 彭海波 转载请注明出处 前言 由于需求的快速迭代和敏捷测试的要求,在测试过程中引入自动化成为必不可少的手段.作为一个互联网测试团队,我们自然也引入了自动化测试这个环节.在众多的测试框架中,我们 ...

  4. Android手机QQ的UI自动化实践

    本文首发于果的博客园,原文链接:https://www.cnblogs.com/yuxiuyan/p/14992682.html, 转载请注明出处. UI自动化 我们为什么要搞UI自动化 可能很多同学 ...

  5. UI自动化测试之Airtest

    官方文档: https://airtest.doc.io.netease.com/ 本文我们讲解下Airtest的使用,主要学习目标有以下几点: (1)认识Airtest (2)了解Airtest能做 ...

  6. 【Android测试】UI自动化代码优化之路(临时发布, 随时删除)

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5993622.html 关于UI自动化的抱怨 听过不少人这样 ...

  7. 洗清UI自动化鸡肋说的不白之冤

    人类文明发展的一个重要标识是工具的诞生,当人类开始制作工具来提高生产力时,就逐渐拉开了与其他生物的距离.曾在2013年,<Google如何测试软件>中提到的分层自动化金字塔,轰动业界.而在 ...

  8. 基于Selenium2+Java的UI自动化(4) - WebDriver API简单介绍

    1. 启动浏览器 前边有详细介绍启动三种浏览器的方式(IE.Chrome.Firefox): private WebDriver driver = null; private String chrom ...

  9. Python—UI自动化完整实战

    实战项目 均来源于互联网 测试报告2017年11月29日优化后的测试报告:https://github.com/defnngj/HTMLTestRunner 1.项目概述: 本实战已126邮箱为例子进 ...

随机推荐

  1. 解释内存中的栈(stack)、堆(heap)和方法区(method area) 的用法?

    通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的 现场保存都使用 JVM 中的栈空间:而通过 new 关键字和构造器创建的对象则放在 堆空间,堆是垃圾收集器管理的主要区域,由于现 ...

  2. MariaDB 存储引擎一览(官方文档翻译)

    inline-translate.translate { } inline-translate.translate::before, inline-translate.translate::after ...

  3. 描述一下 DispatcherServlet 的工作流程 ?

    DispatcherServlet 的工作流程可以用一幅图来说明: 1.向服务器发送 HTTP 请求,请求被前端控制器 DispatcherServlet 捕获. 2. DispatcherServl ...

  4. java-反射-注解-json-xml

    反射: 框架设计的灵魂 框架:半成品软件.可以再框架的基础上进行软件开发,简化代码 定义:将类的各个组成部分封装为其他对象,这就是反射机制 好处: 可以再程序运行过程中,操作这些对象 可以解耦,提高程 ...

  5. Leetcode刷题之矩阵中的指针用法

    矩阵中的指针用法 1 快慢指针 ​ Leetcode27移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度.不要使用额外的数组 ...

  6. (stm32f103学习总结)—stm32外部中断

    一.外部中断介绍 1.1 EXTI简介 EXTI简介 STM32F10x外部中断/事件控制器(EXTI)包含多达 20 个用于产生事 件/中断请求的边沿检测器.EXTI的每根输入线都可单独进行配置,以 ...

  7. 祖先元素transform非none时在Iphone6上引起后代fixed/absolute元素的怪异表现及解决方案

    如题,祖先元素transform非none时,记录一下Iphone6中引起后代元素fixed参考视图怪异表现和解决方案. 层叠关系及参考视图 层叠上下文是HTML元素的三维概念,这些HTML元素在一条 ...

  8. Socket.io+Notification实现浏览器消息推送

    前言 socket.io: 包含对websocket的封装,可实现服务端和客户端之前的通信.详情见官网(虽然是英文文档,但还是通俗易懂).Notification: Html5新特性,用于浏览器的桌面 ...

  9. 深入理解ES6之《扩展对象》

    属性初始值的简写 当对象字面量只有一个属性的名称时,JS引擎会在可访问作用域中查找其同名变量:如果找到则该变量的值被赋给对象字面量里的同名属性 function createPerson(name, ...

  10. python爬取梦幻西游召唤兽资质信息(不包含变异)

    一.分析 1.爬取网站:https://xyq.163.com/chongwu/ 2.获取网页源码: request.get("https://xyq.163.com/chongwu/&qu ...