title: Casperjs: Open a new window/tab
body: <p>I am trying to create a test script that will go through my site, click on a link and open a new tab to another website, fill out a form submit it and then go back to original website, however every example I have looked at and tried does not work for me.  The page runs until there it opens the new window and then the new window sits there for about 5 seconds and everything closes.  Here is what I got:</p>
  
  <pre><code>var x = require('casper').selectXPath;
  casper.options.viewportSize = {width: 1920, height: 1075};
  casper.on('page.error', function(msg, trace) {
     this.echo('Error: ' + msg, 'ERROR');
     for(var i=0; i&lt;trace.length; i++) {
         var step = trace[i];
         this.echo('   ' + step.file + ' (line ' + step.line + ')', 'ERROR');
     }
  });
  
  casper.test.begin('Resurrectio test', function(test) {
     casper.start('https://mywebsite1/abc/default.asp');
     casper.waitForSelector("form[name=FormSize] input[name='a']",
         function success() {
             test.assertExists("form[name=FormSize] input[name='Nickname']");
             this.click("form[name=FormSize] input[name='Account']");
         },
         function fail() {
             test.assertExists("form[name=FormSize] input[name='Nickname']");
     });
     casper.waitForSelector("input[name='Nickname']",
         function success() {
             this.sendKeys("input[name='Nickname']", "abcco40");
         },
         function fail() {
             test.assertExists("input[name='Nickname']");
     });
     casper.waitForSelector("form[name=FormSize] input[name='Username']",
         function success() {
             test.assertExists("form[name=FormSize] input[name='Username']");
             this.click("form[name=FormSize] input[name='Username']");
         },
         function fail() {
             test.assertExists("form[name=FormSize] input[name='Username']");
     });
     casper.waitForSelector("input[name='Username']",
         function success() {
             this.sendKeys("input[name='Username']", "k_csr");
         },
         function fail() {
             test.assertExists("input[name='Username']");
     });
     casper.waitForSelector("form[name=FormSize] input[name='Password']",
         function success() {
             test.assertExists("form[name=FormSize] input[name='Password']");
             this.click("form[name=FormSize] input[name='Password']");
         },
         function fail() {
             test.assertExists("form[name=FormSize] input[name='Password']");
     });
     casper.waitForSelector("input[name='Password']",
         function success() {
             this.sendKeys("input[name='Password']", "kcsr");
         },
         function fail() {
             test.assertExists("input[name='Password']");
     });
     casper.waitForSelector("form[name=FormSize] input[type=submit][value='Logon']",
         function success() {
             test.assertExists("form[name=FormSize] input[type=submit][value='Logon']");
             this.click("form[name=FormSize] input[type=submit][value='Logon']");
         },
         function fail() {
             test.assertExists("form[name=FormSize] input[type=submit][value='Logon']");
     });
     /* submit form */
     casper.waitForSelector(x("//a[normalize-space(text())='One Time Payment']"),
         function success() {
             test.assertExists(x("//a[normalize-space(text())='One Time Payment']"));
             this.click(x("//a[normalize-space(text())='One Time Payment']"));
         },
         function fail() {
             test.assertExists(x("//a[normalize-space(text())='One Time Payment']"));
     });
     casper.waitForPopup(/https:\/\/secondwebsite\/home\/three\.aspx/).withPopup(/https:\/\/secondwebsite\/home\/three\.aspx/, function(){
          popup.close();
     });
  
     casper.then(function() {
      });
  
     /* submit form */
     casper.waitForSelector("form#aspnetForm input[type=button][value='Back']",
         function success() {
             test.assertExists("form#aspnetForm input[type=button][value='Back']");
             this.click("form#aspnetForm input[type=button][value='Back']");
         },
         function fail() {
             test.assertExists("form#aspnetForm input[type=button][value='Back']");
     });
     casper.waitForSelector(x("//a[normalize-space(text())='Document Manager']"),
         function success() {
             test.assertExists(x("//a[normalize-space(text())='Document Manager']"));
             this.click(x("//a[normalize-space(text())='Document Manager']"));
         },
         function fail() {
             test.assertExists(x("//a[normalize-space(text())='Document Manager']"));
     });
  
     casper.run(function() {test.done();});
  });
  </code></pre>