2015-01-21 2 views
1

Я использую огурец с огурцом. Но, к сожалению, мне нужно получить некоторые данные с сервера с помощью JavaScript.Сохранить переменную 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 
+1

В качестве варианта установите 'res' в скрытое поле, а затем получите его значение обычным способом. –

+0

@YevgeniyAnfilofyev извините, но 'res' является' Backbone.Collection'. Я не могу нажать его для ввода атрибута –

+0

Вы можете создать строку 'res'. Что-то вроде 'JSON.stringify (res)'. –

ответ

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. И тогда я нахожу, что это ценность на странице.