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

How to return a value when using execute_script in capybara?

提问人:CafeHey 提问时间:7/25/2014 最后编辑:RimianCafeHey 更新时间:5/14/2015 访问量:16100

问:

我在测试中有一个非常简单的行,它调用执行脚本,如下所示:

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

Ruby-on-Rails rSpec Capybara 集成测试 恶作剧

评论

0赞 Justin Ko 7/25/2014
您使用的是哪个驱动程序?它似乎至少适用于 Selenium-Webdriver。

答:

45赞 Justin Ko 7/26/2014 #1

Poltergeist 驱动程序旨在返回 nil execute_script

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

Poltergeist 仅在使用以下evaluate_script时才会返回一个值:

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

Capybara 对每个都有相应的方法 - 即 Session#execute_script Session#evaluate_script。如果您切换到 use(正如 @AndreyBotalov 指出的那样,您还需要删除 ):evaluate_scriptreturn

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

评论

1赞 Andrei Botalov 7/27/2014
请注意,这个答案不适用于 Selenium,因为 Capybara 会插入自己。return
0赞 Justin Ko 7/28/2014
@AndreyBotalov,我更正了代码以删除使用 .包括 将为 Selenium 和 Poltergeist 抛出一个例外。returnevaluate_scriptreturn