如何在capybara中使用execute_script时返回值?

Min*_*ure 28 integration-testing rspec ruby-on-rails capybara poltergeist

我在测试中有一个非常简单的行,它调用这样的执行脚本:

puts page.execute_script("return somefunction();").to_i.inspect
Run Code Online (Sandbox Code Playgroud)

在javascript中我有一个这样的函数:

function somefunction(){
    console.log("test");
    return 999;
}
Run Code Online (Sandbox Code Playgroud)

来自控制台日志的"测试"正在注销,因此它正在运行...

在运行测试时查看日志,execute_script返回0而不是999,所以在rspec中我无法获取函数的返回值,如何使page.execute_script从该函数返回该值?

Jus*_* Ko 42

Poltergeist驱动程序旨在返回nil execute_script:

def execute_script(script)
  browser.execute(script)
  nil
end
Run Code Online (Sandbox Code Playgroud)

如果您使用以下内容,吵闹者只会返回一个值evaluate_script:

def evaluate_script(script)
  browser.evaluate(script)
end
Run Code Online (Sandbox Code Playgroud)

Capybara每个都有相应的方法 - 即Session#execute_scriptSession#evaluate_script.如果你切换到使用你的代码应该工作evaluate_script(和@AndreyBotalov指出,你还需要删除return):

puts page.evaluate_script("somefunction();").to_i.inspect
Run Code Online (Sandbox Code Playgroud)