背景:

在Katalon中,我们通过Spy抓取的控件,保存在Object Repository中,其中的定位的属性是固定的

如果把这些固定的定位属性参数化呢,一种方式是直接通过Xpath路径,创建Test Object,另外一种

方法是把,获取到的控件定位属性参数化

如何进行参数化呢?

定位属性参数化:

所谓控件定位属性参数化,就是当这个控件运行的时候,动态给定位属性参数具体的值,如text

用一个实际的例子来看

假设APP启动的时候有一个引导界面,其中需要我们从六个兴趣标签中点击选择

通过Spy Mobile,我们可以看到这几个兴趣标签,但无法通过resource-id来区分,因为resource-id都一样

但Text是不一样的,那么我们就是需要把这个Text进行参数化,在运行的时候,给不同的Text值,从而选择

不同的控件

捕获到的控件如下,其中一共有六个控件,其中resource-id其实都是一样的

如果我们要把其中的text修改为动态的属性

此时我们需要把text的vlaue修改为 ${textname}

此时表示这个属性为动态的

并且关联的动态变量的名字为testname

在testcase中的命令中选择使用这个控件,此时打开Test Object Input

在这个Test Object选择中,下面有一个“Variables"

在这个Variables中可以创建一个变量,同时指定变量的值

指定的变量名,需要和Object Repository中,控件属性中指定的变量名要一致,即设置为"testname"

此时切换到Scripts中,可以看到详细的命令

Mobile.tap(findTestObject('tag_label', [('textname') : '军事知识']), 0)

当然这个动态的变量,可以支持文本,数字,或者Katalon中的变量,全局变量等

如可以在Variables中,添加了一个变量,如叫label

此时,命令就变成了

 Mobile.tap(findTestObject('tag_label', [('textname') : label]), 0)

通过这种方式,我们可以在运行的时候,参数化控件的定位属性

那么,在一开始六个相似的Text控件,我们可以在Object Repository,只保留一个

而不需要创建六个相似的控件,但只是Text属性不同

如果依次点击,可以通过传递不同的Text的值来分别动态定位

在脚本中,可能就是这样的

Mobile.tap(findTestObject('tag_label', [('textname') : '军事知识']), 0)

Mobile.tap(findTestObject('tag_label', [('textname') : '史前巨兽']), 0)

Mobile.tap(findTestObject('tag_label', [('textname') : '动物天地']), 0)

Mobile.tap(findTestObject('tag_label', [('textname') : '恐龙世界']), 0)

如果有多个动态的属性,其实是一样的

如添加resource-id也同样变成了动态的属性

那么命令如下:

Mobile.tap(findTestObject('tag_label', [('textname') : '军事知识', ('resouceid') : 'com.mxr.dreambook:id/tv_tag']), 0)

这部分的内容,Katalon的帮助中有说明

可以参考

https://docs.katalon.com/katalon-studio/docs/manage-test-object.html#test-objects-in-scripting-view

定位序列:

现在还是思考这个六个相似的TextView,已经实现通过Text属性来动态定位,但如果要循环点击这六个标签

我们必须先创建一个数值,类似['军事知识','恐龙世界','动物世界'],然后通过循环来遍历

但如果Text的内容修改了,则会失效,并且通过文本数组来遍历有些笨重

我们想是否可以通过序列来遍历呢?

一开始观察的时候,想到是否可以通过instance的属性

因为这六个不同的TextView,其中的instance的属性分别是3,4,5,6,...

实际尝试后发现通过instance无法定位,因为instance属性是无法生效的,

我们在xpath中,如果定位到多个,是可以通过[i]来区分

此时可以在Object Repository中,修改那个控件的定位方式为xpath

Xpath属性为

(//*[@class = 'android.widget.TextView' and @resource-id = 'com.mxr.dreambook:id/tv_tag'])[${index}]

其中,我们把这个index作为一个动态的参数,类似之前的方法

在脚本中,我们就可以通过1到6的循环来循环点击这个标签

//选择六个兴趣标签

for (def i : (1..6)) {

Mobile.tap(findTestObject('4Dapp/flashpage/tagselect/tag_Text', [('index') : i]), 5)

}

这样就实现了动态的循环

这部分的实现,可以参考Katalon的说明

https://docs.katalon.com/katalon-studio/docs/parameterize-webmobile-test-object-properties.html

 参考项目

Katalon官方参考项目

Katalon中控件的参数化相关推荐

  1. 用Cocos Studio 2.3.2制作UI界面中控件不再支持运行3d动作特效

    用Cocos Studio 2.3.2制作UI界面中控件不再支持运行3d动作特效  cocos2d-x + cocos studio无疑是当下二维手游开发的利器,但是在从旧版本向新版本的升级过程中,坑 ...

  2. 第三部分:MFC中控件的样式

    2019独角兽企业重金招聘Python工程师标准>>> 第三部分:MFC中控件的样式 控件是用来建立Windows应用程序用户界面的用户界面对象.你所见到的大部分Windows应用程 ...

  3. activex 控件的id 定义位置+使用ocx控件的客户端程序中对控件定义的文件中控件id定义的位置...

    activex 控件的id 定义位置 // SuperDisplayCtl.cpp IMPLEMENT_OLECREATE_EX(CSuperDisplayCtrl, "SuperDispl ...

  4. Repeater 操作HeaderTemplat或FooterTemplat模板中控件

    获取HeaderTemplat模板中控件 LinkBtn = rp.Controls[0].FindControl("LinkBtnMoreDel") as LinkButton; ...

  5. 自定函数获取datagrid,datalist,rpeater控件中header,footer栏中控件

    在论坛上看到很多关于datagrid,gridview,datalist,rpeater提取header,footer中控件的问题,整理了一下.供大家分享 下面我以DataGrid为便进行说明. fo ...

  6. vs2010 设计视图中控件无法加载,提示未将对象设置到对象的实例。

    vs2010 设计视图中控件无法加载,提示未将对象设置到对象的实例 的 解决方法   解决方案: 卸载掉你机器的所有silverlight插件,然后重启 !   搞定   如果想使用silverlig ...

  7. 【VS开发】VS2010 MFC中控件、对话框等背景颜色动态修改的方法

    [VS开发]VS2010 MFC中控件.对话框等背景颜色动态修改的方法 标签(空格分隔):[VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明: ...

  8. C#在一个form中改变另一个form中控件的内容、C#做登录界面并且密码显示为*

    C#中在一个窗体中改变另外一个窗体中控件的显示 这个问题可以用来改变messageBox中默认显示的"确定",可以使用此方法重新写一个窗体,显示OK: 方法: 1.将要改变的for ...

  9. VS2010开发MFC时工具箱中控件不见了的解决方法

    VS2010开发MFC时突然发现工具箱中控件不见了,该怎么调出工具箱中的控件呢? 1.调出资源视图,如果有资源视图,则跳过本步骤 点击菜单栏:视图->资源视图,就能调出资源视图了 2.调出工具箱 ...

最新文章

  1. 第17课:基于 CRF 的中文句法依存分析模型实现
  2. Centos7 CMake升级
  3. 可信云十年,重磅研究成果与2021云计算十大关键词悉数发布
  4. 开发中,常用到的Eclipse快捷键
  5. 小程序自定义数字键盘|仿微信支付、支付宝支付密码键盘
  6. Java学习笔记(3)——资源管理
  7. python 制作动画片_cocos2d from python Animation 动画片的实现
  8. Hilbert变换及相关特征值
  9. 搭建web项目常见错误
  10. 大学生微信公众号使用情况调查
  11. 计算机图形学必读的10本书
  12. PHP框架底层源码怎么看,php底层_php框架底层源码怎么看
  13. C++实现端口扫描器
  14. 适合运动的耳机有哪些、最好用的五款运动型耳机推荐清单
  15. 显示器接口_显示器接口类型怎么选,4种主流接口要了解
  16. 100个RPA经典应用场景解析
  17. Cadence Allegro修改Waived DRC标识颜色图文教程及视频演示
  18. 《职工带薪年休假条例》2008年元旦起施行(全文)
  19. 终端怎么退出python命令行
  20. 时间戳转换为String

热门文章

  1. tf.keras.activations.gelu tensorflow1.15.0
  2. Redis分布式Session
  3. dubbo负载均衡概念和使用
  4. 赫夫曼编码(Java版)
  5. C++设计一个Bank类,实现银行的创建账户存钱取钱查询交易明细
  6. 写好 Git Commit 信息的 7 个建议
  7. 程序员提加薪被领导点名批评,领导:技术不提高就想着加薪?
  8. 医疗票据识别,OCR深度学习新领域。
  9. HTML+CSS+JS网页设计期末课程大作业____(航天月球响应式 3页)
  10. 任何赴日软件开发问题