RobotFramework:钉钉扫码登录UI自动化
背景:
遇到一个项目,使用的是钉钉扫码登录,一时间不知道该怎么下手了,还是先F12抓包看下都有什么数据传输吧。
分析:
先熟悉下钉钉扫码登录的逻辑,参考官文:https://open-doc.dingtalk.com/microapp/serverapi2/kymkv6

正常操作,步骤
1、打开扫码登录页面

2、打开手机钉钉扫描后,手机钉钉显示这个授权页面,点击登录按钮,二维码页面就会跳转至系统内部登录成功。

F12分析下网络数据传输
1、在扫码登录页面,刷新页面(必须要刷新,否则不会调用default_yto接口)会生成一个新的二维码,同时查看网络,发现http://*.*.*/public/api/authenticate/ddtalk/default_yto接口返回中有gotoUrl,访问这个链接

2、访问后会显示登录钉钉页面,同时注意到页面上方写着统一登录平台(测试环境),说明此登录就是为了目标网站登录做授权:

3、输入账号密码后,成功进入系统,搞定!开心

操作:
上面已经分析出来了,步骤如下:
1、调用default_yto接口,提取到gotoUr链接
2、访问该链接,使用selenium输入账户和密码登录系统
实现代码如下:

文字版:
*** Settings ***
Library RequestsLibrary
Library Selenium2Library *** Keywords ***
登录
${content-type} Create Dictionary Content-Type application/json
Create Session api url=http://*.*.*.* headers=${content-type}
${ret} Get Request api /public/api/authenticate/ddtalk/default_yto
log ${ret.content}
${result_json} To Json ${ret.content}
${gotoUrl} Set Variable ${result_json['data']['gotoUrl']}
log ${gotoUrl}
Open Browser ${gotoUrl} gc
Click Element //a[contains(text(),'登录钉钉账号')]
Click Element //div[contains(text(),'请输入手机号码')] #必须点击div,再input,否则不能定位元素
Input Text //*[@id="mobile"] *******
Click Element //div[contains(text(),'请输入密码')]
Input Password //input[@id="pwd"] **********
Click Element //a[@id="loginBtn"]
遇到的问题:
1、定位“登录钉钉账号”元素
定位登录钉钉账号按钮时,总是提示找不到元素,
绝对路径:/html/body/section[2]/a[1]
相对路径://*[@href='https://login.dingtalk.com/login/index.htm?goto=https%3A%2F%2Foapi.dingtalk.com%2Fconnect%2Foauth2%2Fsns_authorize%3Fappid%3Ddingoap0sqtaucbscestgg%26response_type%3Dcode%26scope%3Dsnsapi_login%26state%3D47414c2cd98b8b106b03da509cf1361bsrWbAM4S19o%26redirect_uri%3Dhttp%3A%2F%2F61.152.207.98%2Fpublic%2Fapi%2Fauthenticate%2Fddtalk%2Fcallback']
等等各种方法都找不到元素,还联系了钉钉客服,问是不是做了反爬,反爬也是针对调用接口说的,我这只是页面点击元素应该不至于吧。
最后使用//a[contains(text(),'登录钉钉账号')],成功定位到元素。

2、定位输入账号密码输入框元素
元素定位时,发现聚焦输入框时对应的html是div标签,奇怪,不应该是input框吗?
既然人家定位到div标签那就写div标签的xpath吧,但是无论如何都不能输入,

在输入框中输入数据后,定位又指向了input标签,怀疑是需要先点击一下div元素,在input输入,实施后果然如我猜想,好了,搞定了,休息下吧。

总结:
1、定位元素时使用xpath的话,//后最好加上需要定位的标签,如定位登录钉钉账号元素//a[contains(text(),'登录钉钉账号')],不要写成//*[contains(text(),'登录钉钉账号')],这样有可能找不到元素,而且效率低。
2、定位元素暂时找不到,不要心急,各种换,总有能定位到的。
RobotFramework:钉钉扫码登录UI自动化的更多相关文章
- 使用Django2.0.4集成钉钉第三方扫码登录
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_124 钉钉作为阿里旗下的一款免费移动通讯软件,受众群体越来越多,这里我们使用Django来集成一下钉钉的三方账号登录,首先注册钉钉 ...
- 钉钉授权第三方WEB网站扫码登录
一.阅读开发文档 首先阅读钉钉官方的开发文档,扫码登录其实用的是官方文档描述的第二种方式,即将钉钉登录二维码内嵌到自己页面中,用户使用钉钉扫码登录第三方网站,网站可以拿到钉钉的用户信息. 二.准备工作 ...
- 钉钉扫码登录web网站
钉钉扫码登录网站 前言 由于本公司前后台分离,这里主要讲述后台的实现逻辑与过程,前端相关的一略而过.前端我们采用的是把二维码内嵌到我们的网页中. 流程如下: 1.登录钉钉后台创建一个企业应用 2.根 ...
- (钉钉)第三方WEB网站扫码登录
年底在做钉钉和公司的知识库产品的对接,怎么使用钉钉api的如下: 第一步: 登录:https://oa.dingtalk.com/#/welcome 这点可以自己建立一个企业账号进行测试 点击工作台建 ...
- 【JavaWeb开发】初步实现网站应用钉钉扫码登录
http://blog.csdn.net/baofeidyz/article/details/59059379 版权声明:转载请注明我的个人微信平台 暴沸 目录(?)[+] 写在前面:如果你还不知道钉 ...
- uniapp实现钉钉扫码登录
由于uniapp暂无钉钉授权登录所以本文将钉钉扫码登录作为网页嵌入uniapp,最终实现钉钉扫码登录app 1. 用H5调起钉钉扫码登录 钉钉在网页端的扫码登录可参考钉钉文档:扫码登录第三方网站 - ...
- 网页接入dingding扫码登录
前言 有时候我们做了一些网页,希望只有某些人才能看的话,可以搞一个钉钉扫码登录,接入也比较简单,下面记录下接入的过程. 流程 我们先看看官方的文档:钉钉接入文档梳理一下官方的流程:1.先跳去一个扫码网 ...
- Web应用多账号系统设计及微信扫码登录实现
Web应用多账号系统设计及微信扫码登录实现 1 前言概述 公司对功能测试,性能测试,安全测试等等都做了比较好的自动化后,急需要一个MIS系统来统一管理这些结果及报表. 此MIS系统特点如下: 仅内 ...
- spring boot高性能实现二维码扫码登录(上)——单服务器版
前言 目前网页的主流登录方式是通过手机扫码二维码登录.我看了网上很多关于扫码登录博客后,发现基本思路大致是:打开网页,生成uuid,然后长连接请求后端并等待登录认证相应结果,而后端每个几百毫秒会循环查 ...
随机推荐
- Java实例练习——基于UDP协议的多客户端通信
昨天学习了UDP协议通信,然后就想着做一个基于UDP的多客户端通信(一对多),但是半天没做出来,今天早上在参考了很多代码以后,修改了自己的代码,然后运行成功,在这里分享以下代码,也说一下自己的认识误区 ...
- [Xcode 实际操作]四、常用控件-(17)为MKMapView地图上显示提示框
目录:[Swift]Xcode实际操作 本文将演示当点击地图上的标注圆点时,弹出信息窗口. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit ...
- 对zabbix监控磁盘性能的补充
原因 在上一篇文章中,我写了完整的磁盘监控步骤,希望对大家有所帮助.但是这里还需要作出一点补充. 根据上一篇文章的内容,我是使用iostat命令不停的收集磁盘的信息,然后写入到/tmp/iostat_ ...
- ios 自定义导航栏,开启侧滑返回手势
自定义一个常用ListViewController .h文件 #import <UIKit/UIKit.h> @interface ListViewController : UIViewC ...
- EOS 多主机多节点配置终极命令
eosio 10.186.11.211 hml 10.186.11.223 lwz 10.186.11.220 lx 10.186.11.141 //eosio private key 5K463yn ...
- vue中比较完美请求的栗子(使用 axios 访问 API)
vue中比较完美请求的栗子(使用 axios 访问 API) 官网地址:https://vuejs.bootcss.com/v2/cookbook/using-axios-to-consume-api ...
- Vue里的nextTick方法
官方解释: 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 自己总结: `Vue.nextTick(callback)`,当数据发生变化,更新后执 ...
- 关于MySQL AUDIT(审计)那点事
2017年06月02日MySQL社区版本最新版为MySQL_5.7.18,但是该版本不带AUDIT功能(MySQL Enterprise Edition自带AUDIT功能),因此需要加载plugin( ...
- luogu P5142 区间方差 十分优美的线段树
又来了个维护方差的线段树.... 大致推导过程(字丑多包涵QAQ) 注意取模时要加一些100000007防止出现负数.. #include<cstdio> #include<iost ...
- Python 起步 环境配置
1:https://www.python.org/ 首先进入这个网址,选择自己喜欢的版本 2:嘛,我以前装的是2.7,把下载好的安装一下就行 3:我的电脑Python的安装路径C:\Progra ...