Подтвердить что ты не робот

Как вернуть значение при использовании execute_script в capybara?

У меня есть действительно простая строка в тесте, которая вызывает execute script следующим образом:

puts page.execute_script("return somefunction();").to_i.inspect

И в javascript у меня есть такая функция:

function somefunction(){
    console.log("test");
    return 999;
}

"Тест" из журнала консоли выходит из системы, поэтому он работает...

При просмотре журналов при запуске теста execute_script возвращает 0 не 999, поэтому в rspec я не могу получить возвращаемое значение из функции, как заставить page.execute_script вернуть это значение из этой функции?

4b9b3361

Ответ 1

Драйвер Poltergeist предназначен для возврата nil для execute_script:

def execute_script(script)
  browser.execute(script)
  nil
end

Полтергейст вернет значение только в том случае, если вы используете evaluate_script:

def evaluate_script(script)
  browser.evaluate(script)
end

Capybara имеет соответствующие методы для каждого - т.е. Session#execute_script и Session#evaluate_script. Ваш код должен работать, если вы переключитесь на использование evaluate_script (и, как указывает @AndreyBotalov, вам также нужно удалить return):

puts page.evaluate_script("somefunction();").to_i.inspect