将javascript变量保存到黄瓜变量

时间:2015-01-21 13:25:27

标签: javascript ruby cucumber gherkin

我用Gherkin和Cucumber。但不幸的是,我需要使用JavaScript从服务器获取一些数据。

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

代码:

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

2 个答案:

答案 0 :(得分:1)

我是这样做的:

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

所以你看,它附加隐藏的输入元素来形成具有字符串化值res的元素。然后我等待ajax执行。然后我发现它在页面上的价值。

答案 1 :(得分:0)

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

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