【发布时间】:2020-06-18 00:49:43
【问题描述】:
有可能从文件中执行 javascript。
Execute JavaScript ${CURDIR}/js_to_execute.js
但是如何从这个文件中按名称调用函数呢?
【问题讨论】:
标签: javascript selenium automated-tests robotframework
有可能从文件中执行 javascript。
Execute JavaScript ${CURDIR}/js_to_execute.js
但是如何从这个文件中按名称调用函数呢?
【问题讨论】:
标签: javascript selenium automated-tests robotframework
无法使用开箱即用的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);
【讨论】:
这会有点难看,但它有效。您需要先使用 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 导出执行此操作,并且它工作正常。
【讨论】: