Zombie.js
Fast, full-stack, headless browser testing using node.js
...As you visit the first page, Zombie will open a tab for it. All operations against the browser object operate on the currently active tab (window) and most of the time you only need to interact with that one tab. You can access it directly via browser.window. You can access all open tabs from browser.tabs. This property is an associative array, you can access each tab by its index number.