【问题标题】:How to return a value when using execute_script in capybara?在水豚中使用execute_script时如何返回值?
【发布时间】:2014-07-25 13:11:42
【问题描述】:

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

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 从该函数返回该值?

【问题讨论】:

  • 您使用的是哪个驱动程序?它似乎至少可以与 Selenium-Webdriver 一起使用。

标签: ruby-on-rails rspec capybara integration-testing poltergeist


【解决方案1】:

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

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

Poltergeist 只会在您使用 evaluate_script 时返回一个值:

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

Capybara 对每个都有相应的方法 - 即 Session#execute_scriptSession#evaluate_script。如果您切换到使用evaluate_script,您的代码应该可以工作(正如@AndreyBotalov 指出的那样,您还需要删除return):

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

【讨论】:

  • 请注意,此答案不适用于 Selenium,因为 Capybara 会自行插入 return
  • @AndreyBotalov,我更正了使用evaluate_script 时删除return 的代码。包含 return 将引发 Selenium 和 Poltergeist 的异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 2021-07-14
  • 2016-06-30
相关资源
最近更新 更多