【问题标题】:Call a function from js file in Robot Framework从机器人框架中的js文件调用函数
【发布时间】:2020-06-18 00:49:43
【问题描述】:

有可能从文件中执行 javascript。

Execute JavaScript    ${CURDIR}/js_to_execute.js

但是如何从这个文件中按名称调用函数呢?

【问题讨论】:

    标签: javascript selenium automated-tests robotframework


    【解决方案1】:

    无法使用开箱即用的Execute Javascript 调用函数。但是可以将函数名作为参数传递。

    Execute Javascript    ${CURDIR}/js/utils.js    ARGUMENTS    clickElement    ${locator}
    

    utils.js文件的内容:

    var utils = utils || {};
    
    (function (arguments) {
        utils.clickElement = function (locator) {
            // implementation of the function
        }
    
        // this piece of code does the trick
        // get function name from arguments and remove it from the list of arguments
        var functionName = [].shift.call(arguments);     
        // call the function and pass the arguments
        utils[functionName].apply(this, arguments);
    })(arguments);
    

    【讨论】:

      【解决方案2】:

      这会有点难看,但它有效。您需要先使用 Execute Javascript 注入整个 Javascript 代码,然后才能调用注入的函数。

      您可以在谷歌主页上使用以下 javascript 代码注入 Javascript,

      var s = document.createElement('script');
      s.text = "document.getElementById('hplogo').addEventListener('click',function(){alert('Google');});";
      document.getElementsByTagName('head')[0].appendChild(s);
      

      在机器人框架中,您可以使用 执行 Javascript

      执行相同的操作
      Open Browser    https://www.google.com
      Wait Until Page Contains Element    id=hplogo
      Execute Javascript    var s = document.createElement('script');s.text = "document.body.addEventListener('click',function(){alert('Google')})";document.getElementsByTagName('head')[0].appendChild(s);
      Sleep    2s          #wait so that injected javascript gets evaluated 
      Execute Javascript    document.getElementById('hplogo').click();
      Sleep    10s    #wait and click anywhere on body of the page to see the alert
      

      您的 s.text 变量将在一行中包含来自 js 文件的整个 javascript 代码。当然,如果您的 javascript 比它长,那将是一项肮脏的工作,但是在其中一个站点中,我必须为 pdf 导出执行此操作,并且它工作正常。

      【讨论】:

      • 感谢您的回答,但我的意思有点不同。我不够清楚,我的意思是按名称从文件中调用其中一个函数。
      • 问题出在您的本地机器上,您无法将 js 文件注入浏览器页面,但您可以将整个 javascript 作为代码注入。现在上面的例子做了同样的事情,你需要注入整个 javascript 代码或上面显示的特定函数,而不是你之后可以使用 Execute Javascript 函数调用它。
      • 更新了答案以显示如何调用注入的函数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 2022-12-28
      • 1970-01-01
      • 2014-11-28
      • 2016-05-19
      • 2018-03-13
      相关资源
      最近更新 更多