需求内容

根据表格中给出的信息(提供了机构名称、机构代码、用户信息、具体操作等),选择系统管理 → 用户信息管理 → 用户维护,点击用户所在的机构,在机构中选择需调整的用户,进行相应的增删改操作。

关键步骤截图如下:

例如,表格给出的信息是 [01001] 分行营业部的某个员工需要进行修改操作,那么需要在目录中依次点击

[00000]银行 → [FR001总行] → [01]常州分行 → [010010]常州分行营业部 → [01001]分行营业部

然后在右侧的用户信息表中选中相应员工进行修改操作

难点说明

通过 F12 查看页面元素,可以看到下图中红框部分只有 [00000 银行] 这一个节点源码

点击 [00000 银行] 前面的’+’号,再次查看源码,发现多了下图红框中的内容,也就是说,这棵银行路径树的源码是根据鼠标点击动态加载的,我们无法提前知道所有的源码。

深入观察

继续点击并不断观察页面元素的变化,我们得到一些规律:

1. 每次点击后都会给当前节点下的所有子节点分配 id,id 号码是在父节点以及父节点的兄弟节点都依次标完号以后按顺序进行标号。下图详细解释了这种分配 id 的模式,[00000]银行的 id 为 1 号,我们先点击它,得到的三个子节点 [FR001] 总行、[FR002]大丰村镇银行、[FR003]上海村镇银行分别分配为 2、3、4 号;然后我们点击 [FR003] 上海村镇银行,得到的一个子节点 [03] 上海村镇银行分配为 5 号;我们点击 [03] 上海村镇银行,会得到四个子节点(注意:[03888]上海清算中心和 [03999] 上海管理机构也是子节点),分别分配 6、7、8、9 号,以此类推。如果每次点击的顺序不一样,那么最终的节点 id 号也会完全不同。

2. 带有文件夹标记的节点,需要对前面的’+‘号执行点击操作,如果点击的是 a 标签对应的元素,即上图中的第一个红框,将不会弹出下面的子节点。且’+‘号对应的元素比较好找,只要找到 a 标签对应的元素节点,然后顺藤摸瓜找到它所对应的父节点 li 下的第一个 span 标签的元素,就是我们要找的’+’号。

3. 每一个节点元素的 class 属性很容易理解,在根节点的元素([00000] 银行)为 level0,下面的子节点([FR001] 总行、[FR002] 大丰村镇银行、[FR003] 上海村镇银行)都为 level1,以此类推。

解决思路

根据第一个观察,我们可以设计一个动态标号算法,假设我们已经提前知道具体的点击顺序,那么就可以计算出按照这个点击顺序得到的每个节点的 id 所分配的号码是多少,然后得到每一次点击的 xpath 代码,通过 xpath 查找到元素后依次执行 click() 方法即可。但这种算法的难度较大,可以作为思考题。结合第二和第三个观察,我们可以设计一个更为简便的算法,同样假设已经提前知道了具体的点击顺序,并且依次存储在一个列表中,由于点击顺序一定是按照一层一层的节点往下的结构,所以这个列表中的每一个元素的 class 属性也一定是按照 level0、level1 的顺序排列,再结合一开始给定的机构名称、机构代码信息,我们就可以定位到所有的 a 标签对应的元素,再结合第二个观察,就能找到需要点击的’+’号。需要注意的是,最后用户所在的机构一定是不带有文件夹标记的节点,直接对定位到的 a 标签对应的元素执行点击操作即可。

运行片段

以 [02031] 为例,运行函数并依次执行点击操作,效果如下:

RPA 案例:银行综合对账系统权限更改中的难点解决的更多相关文章

  1. 银行综合储蓄业务系统,水平为学了一年C语言

    银行综合储蓄业务系统 #include <stdio.h> #include<string.h> int acccunt = 0; char name[10],pw[10]; ...

  2. Android开发之深入理解Android 7.0系统权限更改相关文档

    http://www.cnblogs.com/dazhao/p/6547811.html 摘要: Android 6.0之后的版本增加了运行时权限,应用程序在执行每个需要系统权限的功能时,需要添加权限 ...

  3. Python 小案例实战 —— 简易银行存取款查询系统

    Python 小案例实战 -- 简易银行存取款查询系统 涉及知识点 包的调用 字典.列表的混合运用 列表元素索引.追加 基本的循环与分支结构 源码 import sys import time ban ...

  4. 26、生鲜电商平台-RBAC系统权限的设计与架构

    说明:根据上面的需求描述以及对需求的分析,我们得知通常的一个中小型系统对于权限系统所需实现的功能以及非功能性的需求,在下面我们将根据需求从技术角度上分析实现的策略以及基于目前两种比较流行的权限设计思想 ...

  5. Android 6.0 开发人员对系统权限的使用与练习(Permissions Best Practices)

    Permissions Best Practices 在安装的过程中,用户非常easy忽略权限请求. 假设一个用户相应用感觉沮丧或者操心泄漏个人信息,那么这些用户就会不用他或者卸载它. 怎样规避这个问 ...

  6. Java生鲜电商平台-商家支付系统与对账系统架构实战

    Java生鲜电商平台-商家支付系统与对账系统架构实战 说明:关于生鲜电商平台,支付系统是连接消费者.商家(或平台)和金融机构的桥梁,管理支付数据,调用第三方支付平台接口,记录支付信息(对应订单号,支付 ...

  7. Java生鲜电商平台-RBAC系统权限的设计与架构

    Java生鲜电商平台-RBAC系统权限的设计与架构 说明:根据上面的需求描述以及对需求的分析,我们得知通常的一个中小型系统对于权限系统所需实现的功能以及非功能性的需求,在下面我们将根据需求从技术角度上 ...

  8. linux系统权限(基本权限)

    linux的系统权限:r--  100 4-w- 010 2--x  001 1 [root@localhost ~]# ll -d dir drwxrwxrwx root root Nov : di ...

  9. 解析大型.NET ERP系统 权限模块设计与实现

    权限模块是ERP系统的核心模块之一,完善的权限控制机制给系统增色不少.总结我接触过的权限模块,以享读者. 1 权限的简明定义 ERP权限管理用一句简单的话来说就是:谁 能否 做 那些 事. 文句 含义 ...

随机推荐

  1. C# 序列化和反序列化(xml 文件)

    序列化是将对象保存为文本文件或二进制文件: 反序列化则是读取文件信息,还原为对象: 序列化保存为文本内容,主要是 xml 和 json 两种,这里介绍序列化为 xml 文件的方式. 想要序列化,先要在 ...

  2. 获取IP的三种方法

    第一种 取本主机ip地址 public string GetLocalIp() { ///获取本地的IP地址 string AddressIP = string.Empty; foreach (IPA ...

  3. JavaScript 7 获取可视窗口、网页元素、获取节点方式

    获取可视窗口对象 chrom *document.body firefox *document.documentElement 获取滚动条偏移量 ele.scrollTop ele.scrollLef ...

  4. composer中常用命令

    一些常用的composer命令: # 显示所有已经安装的包 composer show # 移除指定的依赖包package_name composer remove package_name # 搜索 ...

  5. 基于V7的新版RL-USB V6.X + RL-FlashFS V6.X模板,操作CLASS10的SD卡速度12-15MB/S,含RTX5和FreeRTOS两版

    说明: 1.如果需要RL-USB源码的话,将DAPLink(CMSIS-DAP)里面的USB代码导出来即可,DAPLink开源了RL-USB的Device代码.      也可以反过来,在工程模板的基 ...

  6. 转载-C语言中<<、>>、&、|的实际用途

    C语言中<<.>>.&.|的实际用途 作为一个开发人员,在看别人项目或者看第三方库的源代码时,可能经常会看到譬如a>>4&0x0f这样的写法,对于一 ...

  7. php中Session使用方法详解

    Session的声明与使用 Session的设置不同于Cookie,必须先启动,在PHP中必须调用session_start().session_start()函数的语法格式如下: Bool sess ...

  8. Scrapy中response属性以及内容提取

    一.属性 url :HTTP响应的url地址,str类型 status:HTTP响应的状态码, int类型 headers :HTTP响应的头部, 类字典类型, 可以调用get或者getlist方法对 ...

  9. 使用Vue-cli3.0创建的项目,如何发布npm包

    使用Vue-cli3.0创建的项目,如何发布npm包 在使用vue进行项目开发时,如果我们想要发布一个包,有时候会有点迷糊,不知道应该怎么修改脚手架的默认设置.这里记录一下一些常见的操作. 创建ind ...

  10. Java反射02 : Class对象获取的三种方式和通过反射实例化对象的两种方式

    1.Class对象获取的三种方式 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79361463 上一章节已经说过,一般情况下,Jav ...