Read more

How to open a new tab with Selenium

Arne Hartherz
December 18, 2015Software engineer at makandra GmbH

Until recently, you could open a new tab via window.open when using execute_script in Selenium tests. It no longer works in Chrome (will show a "popup blocked" notification).

Illustration web development

Do you need DevOps-experts?

Your development team has a full backlog? No time for infrastructure architecture? Our DevOps team is ready to support you!

  • We build reliable cloud solutions with Infrastructure as code
  • We are experts in security, Linux and databases
  • We support your dev team to perform
Read more Show archive.org snapshot

This is because browsers usually block window.open unless the user interacted with an element for security reasons. I am not sure why it did work via Selenium before.

Here is an approach that will insert a link into the page, and have Selenium click it:

path = "/your/path/here"
id = "helper_#{SecureRandom.hex(8)}"
execute_script <<-JAVASCRIPT
  var $helper = $('<a>').attr({ href: #{path.to_json}, id: #{id.to_json}, target: '_blank' });
  $helper.prependTo('body').text('click me').css({ zIndex: 9999, position: 'absolute' });
  setTimeout(function() { $helper.remove() }, 1000);
JAVASCRIPT
find("##{id}").click

Note that the link tag is removed after 1 second. You may or may not want to keep this.

Posted by Arne Hartherz to makandra dev (2015-12-18 15:37)