Как вернуть значение при использовании 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 я не могу получить возвращаемое значение из функции, как сделать страницу.execute_script возвращать это значение от функции?

1 ответов


водитель полтергейст призвана вернуть nil для execute_script:

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

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

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

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

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