How to open a new tab with Selenium

Posted . Visible to the public.

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).

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.

Arne Hartherz
Last edit
Arne Hartherz
License
Source code in this card is licensed under the MIT License.
Posted by Arne Hartherz to makandra dev (2015-12-18 14:37)