将javascript变量保存到cucumber变量

将javascript变量保存到cucumber变量,javascript,ruby,cucumber,gherkin,Javascript,Ruby,Cucumber,Gherkin,我用黄瓜配小黄瓜。但不幸的是,我需要使用JavaScript从服务器获取一些数据 问题:如何将JavaScript请求结果保存到cucumber变量,以便在后续步骤中重用结果 代码: Then(/^I load all stuff$/) do script = "(function run(){ var url = 'localhost:8o8o/getStuff'; $.ajax({url: url}).then(function(res) { //PROBL

我用黄瓜配小黄瓜。但不幸的是,我需要使用JavaScript从服务器获取一些数据

问题:如何将JavaScript请求结果保存到cucumber变量,以便在后续步骤中重用结果

代码:

Then(/^I load all stuff$/) do
  script = "(function  run(){
    var url = 'localhost:8o8o/getStuff';
    $.ajax({url: url}).then(function(res) {
      //PROBLEM: how to save 'res' variable to Ruby variable?
    });
  })()".gsub(/[\t\r\n]/, '');
  @browser.execute_script(script)
end
我是这样做的:

script = "$.ajax({url: '...'}).then(function(res){
    $('<input>').attr({
        type: 'hidden',
        id: 'foo',
        name: 'bar',
        value: JSON.stringify(res)
    }).appendTo('form');
});"
page.evaluate_script(script)
wait_for_ajax
res = page.find('#foo', visible: false).value
script=“$.ajax({url:'…')).then(函数(res){
$('').attr({
键入:“隐藏”,
id:‘foo’,
名称:'酒吧',
值:JSON.stringify(res)
}).附录(“形式”);
});"
第页。评估_脚本(脚本)
等等
res=page.find('#foo',可见:false)。值

可见,它将隐藏的输入元素添加到字符串化值为
res
的元素中。然后我等待ajax执行。然后我在第页找到了它的价值。

您可以使用LocalStorage,至少在Chromedriver中:

page.execute_script 'localStorage.setItem("foo", JSON.stringify(res));'
wait_for_ajax
res = page.driver.browser.local_storage['foo']

作为一种变体,将
res
设置到隐藏字段中,然后以通常的方式获取其值。@YevgeniyAnfilofyev抱歉,但是
res
主干。集合
。我无法将其推到输入框,但您可以将
res
字符串化。类似于JSON.stringify(res)