如何使用Robot Framework调用异步JavaScript函数并获取返回值
解决Robot Framework调用异步JavaScript函数并获取返回值的问题
你的代码无法运行的核心原因是**Execute Async Javascript的使用方式不符合要求**:这个关键字要求必须调用它自动注入的回调函数来传递异步操作的结果,而直接返回async函数的执行结果(Promise对象)时,Selenium不会自动解析Promise并返回值,导致无法获取结果甚至超时。
修正后的代码示例
你可以通过解析async函数返回的Promise,再调用回调函数来传递结果,具体写法如下:
*** Settings *** Library SeleniumLibrary *** Variables *** ${ASYNC_JAVA_SCRIPT_FUNCTION} async function calculate(input1, input2) { return input1 + input2; } *** Test Cases *** Call And Validate Async JavaScript Function Open Browser about:blank HeadlessChrome ${result}= Execute Async Javascript ... // 获取Selenium注入的回调函数 ... const callback = arguments[arguments.length - 1]; ... // 执行异步函数,解析Promise后调用回调返回结果 ... (${ASYNC_JAVA_SCRIPT_FUNCTION})(3, 5).then(callback); Log ${result} Close Browser
或者使用await语法更直观地处理异步函数:
*** Test Cases *** Call And Validate Async JavaScript Function Open Browser about:blank HeadlessChrome ${result}= Execute Async Javascript ... const callback = arguments[arguments.length - 1]; ... const calculateFunc = ${ASYNC_JAVA_SCRIPT_FUNCTION}; ... const result = await calculateFunc(3, 5); ... callback(result); Log ${result} Close Browser
关键说明
Execute Async Javascript会自动在脚本的参数末尾添加一个回调函数,你需要通过arguments[arguments.length - 1]获取它。- async函数执行后返回的是Promise对象,必须通过
.then()或await解析出实际结果,再传给回调函数,Selenium才能将结果返回给Robot Framework变量。
内容的提问来源于stack exchange,提问作者Prabodha
相关产品推荐
相关产品推荐

