casper.get_list_items = function () { return this.evaluate(function () { return $.makeArray($('.item_link').map(function () { return { link: $(this).attr('href'), label: $(this).find('.item_name').text() }; })); }); }; casper.test_items = function (baseUrl, visited) { visited = visited || {}; casper.then(function () { var items = casper.get_list_items(); casper.each(items, function (self, item) { if (item.link.match(/^\/tree\//)) { var followed_url = baseUrl+item.link; if (!visited[followed_url]) { visited[followed_url] = true; casper.thenOpen(followed_url, function () { this.waitFor(this.page_loaded); casper.wait_for_dashboard(); // getCurrentUrl is with host, and url-decoded, // but item.link is without host, and url-encoded var expected = baseUrl + decodeURIComponent(item.link); this.test.assertEquals(this.getCurrentUrl(), expected, 'Testing dashboard link: ' + expected); casper.test_items(baseUrl, visited); this.back(); }); } } }); }); }; casper.dashboard_test(function () { baseUrl = this.get_notebook_server(); casper.test_items(baseUrl); });