Вызов функции из файла js в Robot Framework - PullRequest
0 голосов
/ 05 марта 2020

Существует возможность выполнить javascript из файла.

Execute JavaScript    ${CURDIR}/js_to_execute.js

Но как я могу вызвать функцию по имени из этого файла?

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Это будет немного некрасиво, но это работает. Сначала вам нужно ввести весь код Javascript, используя Выполнить Javascript, а затем вы сможете вызвать введенную функцию.

Вы можете ввести Javascript, используя приведенный ниже код javascript на главной странице Google. страница,

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 будет иметь весь javascript код из js файла в одну строку. Конечно, если ваш javascript длинный, то это будет грязная работа, но на одном из сайтов мне пришлось сделать это для экспорта в PDF, и он работает нормально.

0 голосов
/ 05 марта 2020

Нет способа вызвать функцию, используя 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);
...