首先,我必须写一些“sosage around”来清楚地解释我需要弄清楚什么。所以,请耐心等待。
在我的SoapUI项目中的TestCase中,我有一个包含“send get request”步骤和“properties”步骤的测试步骤。在测试步骤“发送获取请求”中,我正在请求访问令牌
如果我想自动检索此访问令牌,可以通过Javascript(我已经拥有)来完成。
var userIdElement = document.querySelector("#idp *[name=userid]");
userIdElement.value = "123123"
var password = document.querySelector("#idp *[name=userpwd_page]");
password.value = "aa123456";
var button = document.querySelector("button[type=submit]")
button.click();
那么,我的问题是什么? 我需要弄清楚:
如何将变量从我的测试场景中的属性加载到JS变量:
userIdElement.value = "123123"
使用像
这样的语法很常见def var_sql = context.expand("${#Properties#ID_SQL}")
但这只能在Groovy脚本中使用。 那么,可以在Javascript中以某种方式完成吗?
第二件事是如果我想要检索AT,我必须点击“获取令牌”而不是点击“获取访问令牌”。但是当我需要自动执行此操作时,这是一个非常严重的问题。那么,您是否知道如何自动执行此操作?
非常感谢你们!
答案 0 :(得分:0)
您可以在SOAPUI中使用javascript从脚本中使用context.expand
。
例如,如果您在TestCase中添加一个名为SOME_PROPERTY
的属性,那么您可以使用javascript对其进行检索,如下所示:
var a = context.expand('${#TestCase#SOME_PROPERTY}');
log.info(a);
正如您所看到的那样,也可以在groovy中使用log
对象,我添加了log.info(a);
,因此您可以在script log
标签中看到结果。见下图:
因此,您的脚本不是context.expand
的问题是您在某些行的末尾错过了;
(正如您在评论中所说的那样{{1}引发的错误} js引擎是:rinho
)。添加缺失的Error: missing ; before statement
将解决您的问题。所以使用类似的东西:
;
而不是:
var userIdElement = document.querySelector("#idp *[name=userid]");
userIdElement.value = context.expand('${#TestCase#userIdProperty}');
var password = document.querySelector("#idp *[name=userpwd_page]");
password.value = context.expand('${#TestCase#passwordProperty}');
var button = document.querySelector("button[type=submit]");
button.click();
希望这有帮助,