wursta,
position().top - возвращает позицию начиная с
видимой части блока.
scrollTop() - позиция прокрутки в блоке (расчитывается исходя из размеров всего блока, не только видимой его части).
Поэтому два варианта:
1) костыль - перед тем как взять
top, делаем
scrollTop(0)
$('.button').click(function(){
test_index = 7;//пускай для примера он будет статичный
$('.hidden_div').scrollTop(0); //теперь top будет равен высоте всех элементов до него
$('.hidden_div').scrollTop(parseInt($('.hidden_div .elements').eq(test_index).position().top));
});
2) правильный - считать высоту всех элементов до необходимого
$('.button').click(function(){
test_index = 7;//пускай для примера он будет статичный
var el = $('.hidden_div .elements').eq(test_index);
var scrollTop = el.height();
$.each(el.prevAll(), function (index, elem) { scrollTop += $(elem).height(); });
$('.hidden_div').scrollTop(scrollTop);
});