Karate框架显式传递表格参数后无法获取返回值问题
Karate自动化测试:表格传参调用子场景无返回值问题解决
问题背景
主文件通过表格定义参数调用子文件场景时,无法获取子场景返回的变量;移除表格参数后可正常获取,且要求必须显式传参。
初始代码示例
主文件代码
* table names | id | |'123' | * def getEmail = call read('emailFile.feature@idEmail') names * def getVariable = getEmail.address * karate.log(getVariable)
子文件(emailFile.feature)代码
@idEmail Scenario: Get address and return it * input('#search', id) * def getAddress = (driver.value('#address')).trim() * def address = getAddress
现象
主文件中karate.log(getVariable)无任何输出;若移除names参数,可正常获取子场景返回的address值。
本地可复现场景
主文件代码
Given driver 'https://google.com' * driver.maximize() * table searchText | searchInput| | 'test' | * def callInput = call read('otherFile.feature@testInput')searchText * def getStuff = callInput.getText2 * karate.log(getStuff)
子文件(otherFile.feature)代码
@testInput Scenario: abc * input('#APjFqb', searchInput + Key.ENTER, 20) * def getText = (driver.text("div[class='VpH2eb vmod'] span[data-dobid='hdw']")).trim() * def getText2 = getText * karate.log(getText2)
解决方法
将表格参数改为Map参数,修改后主文件代码:
* def names = {id: '123'} * def getEmail = call read('emailFile.feature@idEmail') names
原因分析
Karate中使用table定义的参数本质是列表(List),当用列表作为call的参数时,返回结果也是列表而非单个Map对象。原代码中getEmail.address是尝试在列表对象上获取address属性,自然无法得到预期值;改用Map传参时,call返回单个Map对象,可直接通过.address获取返回变量。
若必须使用表格传参(如多组数据场景),可通过索引访问列表元素,示例:
* def getVariable = getEmail[0].address
内容的提问来源于stack exchange,提问作者hungryhippos
相关产品推荐
相关产品推荐

