此API手册是基于自研的UI自动化测试框架的,面向对象是使用此框架开发脚本的用户
API列表
- click 左键单击
- actionClick 左键单击
- rawClick 左键单击
- doubleClick 左键双击
- moveTo 移动鼠标
- setValue 设置元素Value
- sendKeys 模拟逐字符输入
- switchFrame 进入iframe
- backToDefault 返回顶层iframe
- keyPressSingle 键盘按键
- scrollTop 垂直向滚屏
- scrollToElement 滚屏到元素位置
- wait 强制等待
- waitToAppear 等待元素出现
- waitToDisappear 等待元素消失
- removeReadOnly 去除元素的只读属性
- get 在浏览器中执行浏览操作
- switchToWindow 将Driver切换到指定窗口
- setConfig 设置全局参数
- fileoperation 文件操作
- execFile 执行外部文件
- getfocus 获取焦点
- blur 失去焦点
- setVar 设置参数
- foreach 循环操作
- reFresh 刷新页面
- screenShot 截图
- alertDialog 对话框
- setElementAttr 设置元素值
- getElementValue 获取元素值
- http请求
- switchToDriver 切换Driver
- execSql 执行SQL
- checkpoint 检查点
- getHeaderIndex 获取数据表列头索引
内置函数
执行条件
API列表
click 左键单击
用JS实现的点击操作,脚本中建议第一优先使用这个点击方法
注意:该方法优点是稳定,不会因为元素被遮挡或不可见就抛异常,但是点击可能不会触发页面上的一些事件,所以具体使用哪个点击方法需要视页面实际情况而定,元素是否能响应该点击方法 可以使用浏览器的开发者工具进行调试。
操作元素:是
参数:无
actionClick 左键单击
selenium的Action类提供的模拟左键点击操作,可触发事件,click方法无效时可以使用这个
操作元素:是
参数:无
rawClick 左键单击
selenium提供的点击操作,上面两个都无效可以尝试这个
参数:无
操作元素:是
doubleClick 左键双击
selenium提供的模拟左键双击操作
操作元素:是
参数:无
moveTo 移动鼠标
鼠标模拟移动到元素上,适用于某些动态弹出的菜单之类
操作元素:是
参数:无
setValue 设置元素Value
用JS实现的设置元素文本的操作,方法参数为需输入的文本
注意: 该方法与click类似都是由JS实现,速度快、稳定,即使元素被遮挡或不可见也能操作。但是不会触发页面事件,比如onClick,onFocus,blur之类
操作元素:是
参数:需要输入的内容
sendKeys 模拟逐字符输入
说明:逐个字符输入参数中指定的内容
操作元素:是【需要操作可输入信息的元素才有效】
参数:需要输入的内容
switchFrame 进入iframe
进入到指定的iframe中,iframe就是操作的元素
操作元素:是
参数:无
backToDefault 返回顶层iframe
从子iframe中返回到顶层iframe
操作元素:否
参数:无
keyPressSingle 键盘按键
模拟键盘功能按钮点击,现在只实现了esc和enter键
操作元素:否
参数:【esc | enter】
scrollTop 垂直向滚屏
滚屏操作,带滚动条的元素才能有效操作
操作元素:是
参数:滚动的像素值,正整数为向下滚屏,负整数向上
scrollToElement 滚屏到元素位置
滚屏到元素位置
操作元素:是
参数:无
wait 强制等待
强制等待,会阻塞当前线程
操作元素:是
参数:等待的时长,单位为秒
waitToAppear 等待元素出现
等待指定元素出现,只要能在dom树中找到即可,被遮挡或者隐藏状态都没关系
只要在超时时长内找到了对应的元素,马上返回true并执行下一步骤操作。如果返回false,则会抛出异常
操作元素:是
参数:超时时长,单位为秒
waitToDisappear 等待元素消失
等待指定元素消失,必须是在dom树中找不到才行,隐藏不算(一般用来等待进度条之类的元素消失)
这个需要在超时时长全部等待完毕后,如果还找不到元素才能返回true
操作元素:是
参数:超时时长,单位为秒
removeReadOnly 去除元素的只读属性
去除元素的只读属性
操作元素:是
参数:无
get 在浏览器中执行浏览操作
相当于在浏览器中输入URL并回车
操作元素:否
参数:URL地址
switchToWindow 将Driver切换到指定窗口
一个浏览器实例开了多个窗口的情况下,需要指定一个当前操作的窗口
操作元素:否
参数:可输入两种类型的参数,根据输入的参数自动匹配
- 窗口标题(文本值):窗口title的模糊匹配
- 窗口索引(正整数): 索引从1开始
setConfig 设置全局参数
在脚本中变更全局参数的数值(指从 config/globalconfig.xml 和 config/general/*.xml 配置文件中获取的全局参数),通过此方法,可以在脚本中覆盖配置文件中对应参数的值。(应用场景一般是在脚本运行过程中可能某些特别的用例需要临时修改配置项)
操作元素:否
参数:key=value[,key1=value1,…] (key必须是配置文件中存在的)
fileoperation 文件操作
文件操作,现在可用于删除指定路径的文件(分布式执行环境不可用)
操作元素:否
参数:
//${user.dir}为框架内置变量,表示工程所在的根目录
{
"type":"delete",
"filepath":"${user.dir}/downloads/1.txt"
}
execFile 执行外部文件
执行外部可执行文件,如exe,py,bat,sh等(应用场景:用于处理文件上传对话框;处理本地文件之类,也可以代替fileoperation方法来清理本地文件,视可执行文件的内容而定)
操作元素:否
参数:__path(可执行文件的路径 [可执行文件自身的参数列表])
实例:
__path(${user.dir}/raw/附件/upload.exe ${user.dir}/raw/附件/印章.jpg)
getfocus 获取焦点
使元素获得焦点(通常与blur配合使用用于触发事件)
操作元素:是
参数:无
blur 失去焦点
使元素失去焦点(通常与getfocus配合使用用于触发事件)
操作元素:是
参数:无
setVar 设置参数
设置当前脚本上下文可用的参数
操作元素:否
参数:Json实体
- varname : 需要保存的参数名称
- vartype : 参数数据类型,可输入 [string | list | map]
- varsource : 参数来源,可输入 [text | file],
text - 直接输入值字符串
file - 从文件中获取值
- vartype为string时,source只能使用text
- vartype为list时,source可使用text或file,
- vartype为map时,source只能使用file
- varvalue : 参数的值
- vartype为text时,保存的参数值就是varvalue本身
- vartype为list时,会把varvalue以逗号为分隔符进行拆分后保存为list
- vartype为map时,此项不需要提供
- filepath :文件路径,当varsource为file时,必须提供此参数
file数据文件格式说明:
文件格式 : csv
list型读取第一列数据,每一行内容存储为一个元素。
map型读取前两列数据,分别以key和value存储[两列数据数量不一致时以key列为准,如key比value多,则多出的key对应的value都是值列最后一行中的value]
setVar实例
// 例1 : 从filepath的文件中读取一列数据保存到名为var1的列表中,
//csv文件中每一行的数据为列表中一个元素
{
"varname":"var1",
"vartype":"list",
"varsource":"file",
"filepath":"raw/Parameterized/test1.csv"
}
//例2:将字符串【abc123】 保存为名为var2的参数
{
"varname":"var2",
"vartype":"string",
"varsource":"text",
"varvalue":"abc123"
}
//例3:将varvalue按逗号拆分成列表, 保存为名为var3的参数
{
"varname":"var3",
"vartype":"list",
"varsource":"text",
"varvalue":"a1,b2,c3"
}
foreach 循环操作
指定脚本中的步骤进行循环操作,可指定某几个步骤进行参数化
比如指定执行 A、B、C、D四个步骤,并指定B步骤的参数为参数化数据,则框架会重复执行这四个步骤,区别只是每次执行B步骤时的参数不同,执行次数取决于B步骤参数列表的元素个数
参数:json实体
- steps:字符串,指定需要循环执行的步骤编号,使用逗号分隔
- params:Json数组,元素至少要有一个,每一个元素有两个字段
- varname - 标识使用哪个参数进行参数化
- parstepno - 标识需要进行参数化的步骤
foreach实例
/**
此参数表示使用steps指定的几个步骤(re08,re09,re10,re11,re12,re13)进行循环操作,其中
需要进行参数化替换的步骤为 re09、re08
1、re09的步骤参数,使用test1参数,每轮循环从上至下取一个元素
2、re08的步骤参数,使用test2参数,每轮循环从上至下取一个元素
3、循环的次数取决于test1参数的元素个数。这里要求test1与test2的元素个数必须相同
4、执行该步骤之前必须保证已保存了test1和test2的公共参数,
该方法可以结合setvar一起使用,也可以使用上下文中动态保存的参数使用
当参数化步骤的参数字段为空时,将会直接使用参数数据作为方法的参数; 不为空时,使用参数数据替换 #param# 占位符,其他的常量字符串将保留。这样在类似于checkpoint之类带参数的步骤中,也可以将参数化数据和常量文本拼接到一起使用
*/
{
"steps": "re08,re09,re10,re11,re12,re13",
"params": [
{
"varname": "test1",
"parstepno": "re09"
},
{
"varname": "test2",
"parstepno": "re08"
}
]
}
reFresh 刷新页面
刷新页面,相当于浏览器的F5
操作元素:否
参数:无
screenShot 截图
截图
操作元素:无
参数:截图文件名称(一般情况下截图是异常时回调执行的,这个API是提供给脚本端自定义截图用的,存储路径与异常截图相同)
alertDialog 对话框
操作windows对话框(不是css模拟的对话框,是系统对话框,现在很少见了,一些比较老的系统里还有)
参数:
- accept或空 :点击确认按钮
- 其他任意值 :点取消按钮
setElementAttr 设置元素属性
修改元素指定的属性,
如attrname为元素当前已有的属性 则会更新属性的值,反之则会添加一个新属性
操作元素:是
参数:json实体
- attrname:属性名
- 和attrvalue:属性值
setElementAttr实例
//此步骤表示将元素id改为 myid01,如元素没有id,则会添加id属性
{
"attrname":"id",
"attrvalue":"myid01"
}
getElementValue 获取元素指定的值
获取元素指定的值,并可以保存为指定的参数
操作元素:是
参数 :Json实体
- valuetype :值的类型,枚举值 【text[文本] | value[value] | attr[属性] 】
- attrname : 属性名称,当valuetype为attr时,必须提供 attrname
- setvar :需要保存的变量名称,如变量名在当前脚本中已存在则会抛出异常【包括全局配置文件中的变量名称, 以及脚本中该步骤之前已经定义的变量名】
getElementValue实例
//获取元素的value,保存为haha参数
{
"valuetype": "value",
"setvar": "haha"
}
<
http请求
发送http请求,支持get、post、delete请求,httpGet请求可设置提取器保存变量,
操作元素:否
- httpGet:
//参数说明
{
"url":"#get接口URL#",
"save":{
"jsonpath":"#Jsonapth表达式#",
"varname":"#保存的变量名#"
}
}
//实例
{
"url":"http://192.168.0.134/api/service?no=1&size=10&searchProp=name&searchValue=app-busybox",
"save":{
"jsonpath":"$.list[0].id",
"varname":"appId"
}
}
- httpPost:
//参数说明
{
"url":"#post接口URL#",
"body":"#post参数体(双引号需要转义)#"
}
//实例
{
"url":"http://192.168.0.134/api/domain",
"body":"{\"tenantId\":6,\"name\":\"volume-tester-1.volume-tester-1\"}"
}
- httpDelete:
//参数说明
{
"url":"#delete接口URL#"
}
//实例
{
"url":"http://192.168.0.134/api/service/__vars(appId)"
}
这里引用了【appId】,如果前面没有保存这个变量,引用时会报异常,所以在这一步的执行条件中要加上判断参数,变量存在时才执行该步骤
//执行条件
{
"conditiontype":"variable",
"varname":"appId",
"relation":"exists"
}
switchToDriver 切换Driver
切换当前上下文的Driver实例。可以用来打开新的浏览器实例或切换操作的浏览器实例
操作元素:否
参数:json实体
- fromdriver : 保存切换之前的Driver标签(也就是当前操作的浏览器),可用于以后切换回来的标记。该值不能为空
- todriver :标识当前需要切换到哪个Driver标签,可为空。为空时则会开一个新的Driver实例
switchToDriver实例
//例1: 开一个新的Driver并切换到新Driver,将之前的Driver保存为【acsDriver】
{fromdriver:"acsDriver",todriver:""}
//例2:切换到之前保存的【acsDriver】,并将当前操作的driver保存为【acsDriver2】
{fromdriver:"acsDriver2",todriver:"acsDriver"}
execSql 执行SQL
执行非查询请求(delete、update、insert)
操作元素:否
参数:json实体
- sqlstatement :SQL语句
execSql实例
{"sqlstatement":"delete from T_PA_REMINDTYPE t1 where t1.FREMINDID in (select FID from T_PA_REMINDSET t2 where t2.fahead_day = '76')"}
checkpoint 检查点
checkpoint方法表示检查点,执行断言
操作元素:否
参数:json实体
-
checktype:检查点类型,枚举类型(下面标粗体的属性表示必填,否则是有默认值的可选填,或者需要根据具体的属性取值来决定是否必填)
- text:检查元素文本值是否符合预期
可用属性 - xpath、checkcontent、comparetype、status、checknumber、 isany、onerror、needscreenshot、retrysteps、retrycount、timeout - attr:检查元素属性是否包含预期的值
可用属性 - xpath、attrname、attrvalue、timeout、needscreenshot、onerror、retrysteps、retrycount - file:检查文件是否存在
可用属性 - filepath、filechecktype、filecheckcontent、onerror、retrysteps、retrycount - value:检查元素的Value值是否符合预期
可用属性 - xpath、checkcontent、comparetype、onerror、needscreenshot、retrysteps、retrycount、timeout - loop:检查多个元素的指定属性是否符合期望(text、value、appear、disappear)
可用属性 - loopchecktype、xpathtype、xpath、placeholders、expects、onerror、needscreenshot、retrysteps、retrycount、timeout
- text:检查元素文本值是否符合预期
-
xpath 待检查元素的xpath,大部分的类型都需要提供此项
-
checkcontent 待检查的文本内容,checktype为text和value都必填
-
comparetype 比较方式,枚举类型。 可选值为equals、contains。默认为equals
-
status 检查元素是否存在。枚举类型。 可选值为 appear 、disappear。这里两个选项的判断条件有点不同
- appear时,元素只要存在于dom树中,不管是否可见都会判定成功
- disappear时,元素不可见或者不存在于dom树中,都会判定为成功
-
checknumber 检验元素数量,值为正整数或all , 可为空,默认为1,设置为all可检验匹配到的所有元素
注 : 该属性的作用是当一个xpath表达式可以找到多个元素时(比如在数据列表中同一列的多行数据)可以指定只检验1个或者是所有元素的值是否都符合期望值。
生效条件 : 只有当checktype 为 text 或 loop - text/value时 ,该参数才会生效 -
onerror 断言失败时的处理,枚举值 ,可为空,默认为throw,可选项为:
- throw(抛出异常,当前用例标识为失败,后续步骤不继续执行)
- skip(忽略断言失败,在日志中记录警告信息,脚本继续向下执行)
- retry(重试,需要指定重试步骤(retrysteps)和次数(retrycount),超过最大次数仍然失败则执行throw处理) "
-
retrysteps 重试步骤 ,onerror为retry时不可为空,步骤即为用例的步骤编号,以逗号分隔
-
retrycount 重试次数 ,onerror为retry时不可为空
-
errmsg 失败时的自定义提示信息,可为空
-
attrname 元素属性名称,checktype为attr时不可为空
-
attrvalue 元素属性的期望值,checktype为attr时不可为空
-
timeout 超时时间,单位秒,可为空,默认为5秒
-
isany 布尔型参数,当设置为true时,表示结果集中有任意一个符合期望值即可断言成功
注意 该属性的优先级高于checknumber,即设置了这个就不会再使用checknumber
生效条件 : 只有checktype为text时可以使用 -
needsceenshot 布尔型参数,用于标识遇到异常时是否需要截图,可为空,默认值为true
-
filepath 待检查的本地文件路径,可填写相对路径。当checktype为file时,此项必填,
-
filechecktype 文件检查类型,可选值为exists、filesize、content,分别代表检查文件是否存在、检查文件大小、检查文件内容。暂时只支持exists
-
filecheckcontent 当filechecktype为exists时,可选值为 true/false
filesize、content为预留功能,现在还未实现 -
loopchecktype 枚举值,有四种选项 text、value、appear、disappear 分别对应验证text、value的值 和 元素出现、消失,可为空,默认值为appear
-
xpathtype 枚举值,可选值为wildcard、special,可为空,默认为wildcard
-
placeholders xpathtype为wildcard时,xpath表达式中的#placeholder#占位符会被下面提供的placeholders值替代 ;为special时,直接取xpath
-
expects loopchecktype为value或text时,需要提供期望值列表。这是一个字符串数组
注意: 根据提供的xpath找到的元素列表的value或text组成的列表如果与期望值列表长度不相等会直接报错
checkpoint实例
//实例一、判断元素的文本是否为 【运行中】,最多等待30秒
{
"checktype": "text",
"xpath": ".//span[normalize-space(text())='uiauto-app-01']/following-sibling::span/span",
"checkcontent": "运行中",
"status": "appear",
"timeout": "30"
}
注意这里的xpath写法,使用app名称通过xpath轴定位到边上的状态span标签的
场景截图
//实例二、判断指定xpath匹配到的元素文本是否【包含】【已发布】,有一个不对就断言失败
{
"checktype": "text",
"xpath": ".//td[contains(@class,'el-table_4_column_27 el-table__cell')]//span[@class='text']",
"checkcontent": "已发布",
"checknumber": "all",
"status": "appear",
"comparetype":"contains"
}
场景截图
//实例三、判断指定xpath匹配到的元素文本是否为【UI冒烟测试专用】, 如果断言失败则重试【1】次,并指定重试步骤(重试步骤需要在逻辑上过得去才行,否则会有上下文问题)
{
"checktype": "text",
"xpath": ".//table[@class='x-grid3-row-table']//div[contains(@class,'x-grid3-col-3')]",
"checkcontent": "UI冒烟测试专用",
"status": "appear",
"onerror": "retry",
"retrycount": "1",
"retrysteps": "re01,re02,re03,re04,re05,re06,re07,re08,chk_re"
}
场景截图:无
//实例四、循环判断指定Xpath匹配到的元素的【value】,并提供了占位符的实参,以及期望值(这个一般是用于查看详情界面校验表单中多个元素的值,这些元素可以用相同的xpath+各自的标签来实现定位)
{
"checktype": "loop",
"loopchecktype":"value",
"xpath":".//div[@id='ct_formWindow']//label[@title='#placeholder#']//ancestor::div[2]//input[@type='text']",
"placeholders":["券商名称","交易市场","交易单元类型"],
"expects":["冒烟测试专用","上海交易所","普通交易单元"],
"timeout": "2"
}
场景截图:无
//实例四、循环判断指定Xpath匹配到的【元素的属性值】,并提供了占位符的实参,以及期望值
{
"checktype": "loop",
"loopchecktype":"attr",
"xpath":".//span[text()='#placeholder#'//ancestor::button[1]]",
"placeholders":["启用","禁用"],
"attrname":"disabled",
"attrvalue":"disabled",
"timeout": "2"
}
场景截图
//实例五、loopchecktype为appear时,判断指定的元素是否存在于DOM树中(无论是否可见)
{
"checktype": "loop",
"loopchecktype":"appear",
"xpath":".//*[normalize-space(text())='#placeholder#']/following-sibling::div//input",
"placeholders":["Nginx 镜像名","nginx 镜像版本","nginx 配置组名"],
"timeout": "2"
}
场景截图 :这里校验的是选择了编排模板后,页面是否正确加载了对应的控件
<
src=‘./pics/checkpoint4.png’ style=“zoom: 50%;” />
//实例六、loopchecktype为value,expects使用了内置函数 __today() 默认日期格式为 yyyy-MM-dd
{
"checktype": "loop",
"loopchecktype":"value",
"xpath":".//form[contains(@id,'form') and contains(@id,'earch')]//label[@title='#placeholder#']//ancestor::div[2]//input[@type='text']",
"placeholders":["启用日期","截止日期"],
"expects":["__today()","__today()"],
"timeout": "2"
}
场景截图:无
查看内置函数说明
getHeaderIndex 获取数据表列头索引
用于获取数据列表中,指定列头名称的class属性特征值,并将其保存(key就是列头名称,可通过__getIndex(列头名称) 方式来获取)
操作元素:否
参数:两种方式 【字符串 | Json实体】
- 字符串:以逗号分隔的列头名称字符串(这种方式实际是把列头定位xpath写在了代码里)
- Json实体:
- xpath:列头定位Xpath表达式,必须是wildcard模式
- headers:以逗号分隔的列头名称字符串
//下面是参数解析以及获取列头class特征值
String params = testcase.getParams().trim().replace(",", ",");
String xpath = "";
String headerStr = "";
if (JSONUtil.isJson(params)) {
xpath = JsonPathUtil.jsonPathValue(params,"$.xpath");
headerStr = JsonPathUtil.jsonPathValue(params,"$.headers");
} else {
//这里是内置的列头定位Xpath
xpath = ".//table[@class='el-table__header']//div[text()='#placeholder#']/ancestor::th";
headerStr = params;
}
//列头以逗号分隔
String[] headers = headerStr.split(",");
if (headers.length > 0) {
for (int i = 0; i < headers.length; i++) {
WebElement ele1 = waitForElement(logger, headers, xpath, i, context, testcase);
String eleClass = ele1.getAttribute("class").trim();
//索引取class属性的空格前一段
if (index >= 0) {
String headerIndex = eleClass.substring(0, index);
mapHeadersIndex.put(headers[i], headerIndex);
}
}
}
列头特征值就是取红框中的这一段
这是表格元素class,与表头有相同的特征值
src=‘./pics/getheaderindex2.png’ style=“zoom: 60%;” />
getheaderindex实例
1、先获取两列【应用名称,所属租户】的列头特征值
2、在checkpoint中使用__getIndex(应用名称,所属租户)来调用
{
"checktype": "loop",
"loopchecktype":"text",
"xpath":".//table[@class='el-table__body']//td[contains(@class,'#placeholder#')]/div/a",
"placeholders":[__getIndex(应用名称,所属租户)],
"expects":["uiauto-deploy-app","tenant-autotest"],
"timeout": "2"
}
内置函数
setvalue和sendkeys等输入类方法可以支持变量型参数输入,变量型参数以“__”开头,加小括号,括号中可以填写参数的参数,下面是框架内置的变量列表
日期函数
日期格式 : 指日期的展示格式,下面函数如无注明,默认都为 yyyy-MM-dd
- __today([#日期格式#]) : 当日日期
- __yesterday([#日期格式#]) : 昨日日期
- __thismonth([#日期格式#]) :当月月份 默认格式 yyyy-MM
- __lastmonth([#日期格式#]) : 上个月份 默认格式 yyyy-MM
- __beginofyear([#日期格式#]) : 今年第一天的日期
- __endofyear([#日期格式#]) : 今年最后一天的日期
- __beginofmonth([#日期格式#]) : 本月第一天的日期
- __endofmonth([#日期格式#]) : 本月月末的日期
路径函数
- __path(#文件路径#)
路径函数,一般用来作为exeFile接口的参数使用
文件路径参数说明
-
如果是path(系统环境变量)中未维护的路径,则需要填写文件的绝对路径,此时该参数和普通字符串参数相同
-
可以使用
${变量名}
来获取java的系统变量,比如${user.dir}可以自动转化为项目所在的根路径 -
其他还有可能用到的系统变量有
user.home
user.name
file.encoding
os.version
__path实例
__path(java -jar d:/dir01/java01.jar)
#注:java.exe 在path中所以不需要写绝对路径,后面的jar包则需要
# 此例表示执行 upload.exe 应用,用于上传指定路径的jpg文件
__path(${user.dir}/raw/附件/upload.exe ${user.dir}/raw/附件/印章.jpg)
# 注: upload.exe是autoit工具录制打包的处理windows系统文件选择对话框的应用,她本身需要一个参数,就是处理上传的文件路径
取值函数
- __vars(#参数名#)
通过此函数获取框架公共参数池中的参数值
注意:如果参数本身是键值对类型的,直接获取将无法使用,需要通过 aaa.bbb 的形式指定二级key。并且现在最多只支持二级
例如:在runcases配置文件中的env字段之后有几个自定义参数
<env name="XX环境">
<!-- 已忽略其他无关参数-->
<params>
<param name="p1" value="http://150.tiduyun.com"></param>
<param name="p2" value="value2"></param>
</params>
</env>
在脚本中通过获取p1的值的方式为 : __vars(params.p1)
- __getIndex(#列头名#) 多个列头以逗号分隔
这个专门用来获取列头特征值池中的特征值,与__vars不是同一个池,因为此函数的参数是以列头名为key自动put的,共享参数池可能会造成污染
框架中保存自定义参数到参数池中的几种方式
1、setVar方法,可在脚本中设置参数
2、switchToDriver方法,将fromdriver保存到池中
3、执行条件,通过setvar字段设置条件判断结果
4、测试启动前,会将项目配置XML文件的所有字段存入池中
5、httpGet方法,通过save参数可从返回体中提取信息保存到池中
从变量池中获取变量值的方式
1、内置函数 : __vars(变量名)
2、foreach方法中通过varname字段值获取
3、switchToDriver方法中通过toDriver字段值获取
4、执行条件中,通过varname字段值获取
字符串处理函数
- __urlencode(#字符串#)
用来对输入的字符串进行URL编码(不要双引号)
执行条件
执行条件 - 指当前步骤是否执行,如果满足参数表达式的条件则执行,否则跳过该步骤
参数:内置字符串或者Json实体
- 内置字符 : self ,当前步骤操作的元素存在并可见则返回true。
例如步骤中使用了A元素,在执行条件处填入self,则只有在A元素可见的条件下,才会执行此步骤 - Json实体 :
- conditiontype :条件类型,枚举值,可选项有 text | variable | attr
- text - 表示根据元素的innerText()来判断
- variable - 表示根据前面步骤保存的参数来判断
- attr - 表示根据元素的属性值来判断
- xpath :conditiontype为text或attr时,必须提供此参数,用于定位元素
- expect:期望值,conditiontype为text或attr时,必须提供此参数,用于和取到的元素text或属性值进行比较
- attrname:conditiontype为attr时,必须提供此参数,用于指定元素的属性
- relation:比较关系操作符,枚举型 可选值 有 <> 、=、exists ,分别表示 不等于 、等于、变量存在,必填参数
- setvar:可选参数,用于将比对结果(true | false)保存下来给后面的步骤使用,这里填写的是需要保存的参数key
- conditiontype :条件类型,枚举值,可选项有 text | variable | attr
执行条件实例
//此参数表示通过xpath定位元素后获取其text,与expect进行比较,不相等则执行操作,并将比对结果通过setvar字段保存为startup参数
{
"conditiontype": "text",
"xpath": ".//table[@class='x-grid3-row-table']//div[contains(@class,'x-grid3-col-5')]",
"expect": "ACTIVE",
"relation": "<>",
"setvar":"startup"
}
//此参数表示获取startup参数的值与expect进行比较,相等则执行操作
{
"conditiontype": "variable",
"varname": "startup",
"relation": "=",
"expect": "true"
}
//此参数表示获取指定xpath的元素的属性名为 checked 的属性值,期望为null(实际上就是该元素没有checked这个属性) 如相等则执行操作
{
"conditiontype": "attr",
"xpath": ".//span[contains(text(),'000028_MYCSCP')]//ancestor::a//preceding-sibling::input[@type='checkbox']",
"attrname":"checked",
"expect": null,
"relation": "="
}
//判断参数名为appId的参数在参数池中是否存在,存在则返回true。
//使用场景是当用http请求清除脏数据时,只有前面的查询步骤(httpGet)获取到了对应的id并保存为appId,当前步骤才会执行
{
"conditiontype":"variable",
"varname":"appId",
"relation":"exists"
}