You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Robot Framework中如何调用外部JavaScript文件中的函数

解决Robot Framework调用外部JavaScript函数报错的问题

报错原因分析

  1. 函数名称不匹配:你的JavaScript文件中定义的是myFunction,但测试用例里调用的是minhaFuncaoGlobal,直接导致找不到目标函数。
  2. ES模块未暴露全局变量:JS代码使用了export声明,属于ES模块规范,通过普通script标签加载时,模块内的函数不会自动挂载到全局window对象上。
  3. 脚本异步加载未等待:通过createElement添加脚本是异步操作,第二个测试用例执行时,外部JS文件可能还未加载完成。

具体解决方案

方案一:将JS改为全局函数(最简单直接)

修改你的JavaScript文件,去掉export,将函数直接挂载到全局window对象:

function myFunction(parametro) {
  return "This is result  " + parametro;
}

// 显式挂载到全局,确保Robot能访问到
window.myFunction = myFunction;

然后修正Robot测试用例,同时添加加载等待逻辑:

*** Settings ***
Library    SeleniumLibrary

*** Test Cases ***
Carregar Funções JavaScript
    Open Browser    https://google.com    Firefox
    # 加载脚本并返回Promise等待加载完成
    Execute JavaScript    |
    ...    var script = document.createElement('script');
    ...    script.src = '/external-libs/robot-shared-function/index.js';
    ...    document.head.appendChild(script);
    ...    return new Promise((resolve) => {
    ...        script.onload = resolve;
    ...    });
    # 循环检查函数是否加载完成,超时10秒,每隔1秒检查一次
    Wait Until Keyword Succeeds    10s    1s    Execute JavaScript    return typeof window.myFunction === 'function';

Usar Função JavaScript
    ${resultado}=    Execute JavaScript    return myFunction('algumParâmetro');
    Log    ${resultado}

方案二:保留ES模块,手动暴露全局变量

如果需要保留ES模块的写法,修改JS文件主动将函数挂载到全局:

export function myFunction(parametro) {
  return "This is result  " + parametro;
}

// 暴露到全局对象
window.myFunction = myFunction;

加载脚本时指定type="module",并等待加载完成:

Carregar Funções JavaScript
    Open Browser    https://google.com    Firefox
    Execute JavaScript    |
    ...    var script = document.createElement('script');
    ...    script.type = 'module';
    ...    script.src = '/external-libs/robot-shared-function/index.js';
    ...    document.head.appendChild(script);
    ...    return new Promise((resolve) => {
    ...        script.onload = resolve;
    ...    });
    Wait Until Keyword Succeeds    10s    1s    Execute JavaScript    return typeof window.myFunction === 'function';

关键注意事项

  • 路径验证:确保script.src的路径正确,相对于当前页面的根路径,本地文件需使用file://协议或部署到服务器。
  • 异步等待:必须等待脚本加载完成后再调用函数,Wait Until Keyword Succeeds可以有效避免因异步加载导致的未定义错误。
  • 名称一致性:严格保证JS函数名与测试用例中调用的名称完全一致。

内容的提问来源于stack exchange,提问作者Isabela Santos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 06:42:19