This example shows how to start a Selenium Server and run a Selenium client in Java. The example opens up a popup window by clicking on the link in index.html. It then selects the popup window by first using the “name=popupWindowName” option for selectWindow. It then grabs the original window (using “name=null”). And, finally, it grabs the popup again by using the global javascript variable option in selectWindow (“var=popupWindowVar”).
In order to run this test, you will need the following three jar files on your classpath.
- junit-4.8.2.jar
- selenium-java-2.17.0.jar
- selenium-server-standalone-2.17.0.jar
Unit Test
package org.example; import static org.junit.Assert.assertEquals; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.openqa.selenium.server.RemoteControlConfiguration; import org.openqa.selenium.server.SeleniumServer; import com.thoughtworks.selenium.DefaultSelenium; public class SeleniumIntegrationTest { private static SeleniumServer server = null; private DefaultSelenium selenium = null; @BeforeClass public static void oneTimeSetUp() throws Exception { // Create a configuration to override defaults. RemoteControlConfiguration rcc = new RemoteControlConfiguration(); rcc.setTimeoutInSeconds(60); rcc.setPort(4444); rcc.setSingleWindow(true); // Support Popups rcc.setTrustAllSSLCertificates(true); // Trust SSL // Start the Selenium Server. server = new SeleniumServer(false, rcc); server.start(); } @AfterClass public static void oneTimeTearDown() throws Exception { server.stop(); } @Before public void setUp() throws Exception { // // Create a Selenium thread. // // Open in Chrome // selenium = new DefaultSelenium("localhost", 4444, // "*googlechrome", // "http://localhost:8080/GrailsDefault/"); // // Open in Safari // selenium = new DefaultSelenium("localhost", 4444, // "*safari C:\\Program Files (x86)\\Safari\\Safari.exe", // "http://localhost:8080/GrailsDefault/"); // // Open in IE // selenium = new DefaultSelenium("localhost", 4444, // "*iexplore", // "http://localhost:8080/GrailsDefault/"); // Open in Firefox selenium = new DefaultSelenium("localhost", 4444, "*firefox3", "http://localhost:8080/GrailsDefault/"); // Start the server selenium.start(); } @After public void tearDown() { // Stop the Selenium thread. selenium.stop(); } @Test public void popupWindowExample() { // Open the base window. selenium.open("index.html"); assertEquals(selenium.getTitle(), "Popup Window Example"); // Click button to popup new window. selenium.click("id=popupButton"); // Select the popup window. // popupWindowID is the ID given in the window.open javascript. selenium.waitForPopUp("popupWindowID", "30000"); selenium.selectWindow("name=popupWindowID"); assertEquals(selenium.getTitle(), "Popped Up Window"); // Click a link to google on the popup. selenium.click("link=This link goes to google"); selenium.waitForPageToLoad("30000"); assertEquals(selenium.getTitle(), "Google"); // Select the original window. selenium.selectWindow("null"); assertEquals(selenium.getTitle(), "Popup Window Example"); // Select the window by a javascript variable. selenium.selectWindow("var=popupWindowVar"); assertEquals(selenium.getTitle(), "Google"); } }
index.html
<html> <head> <title>Popup Window Example</title> <script> function popupNewWindow() { window.popupWindowVar = window.open("popup.html", "popupWindowID"); } function popupNewWindow2() { window.popupWindowVar2 = window.open("popup.html", "popupWindowID2"); } </script> </head> <body> <div id="header"> <button id="popupButton" onclick="popupNewWindow()">Popup Window</button> <button id="popupButton2" onclick="popupNewWindow2()">Popup Window 2</button> </div> </body> </html>
popup.html
<html> <head> <title>Popped Up Window</title> </head> <body> <div id="header"> This is a popup window. </div> <div id="links"> <a href="http://www.google.com">This link goes to google</a>. </div> </body> </html>
I found a bug in the variation of selectWindow that tries to grab the window from a JavaScript variable (i.e “var=foo”). It works in Chrome and IE. However, I could not get it working with Firefox 9.0.1 with Windows 7. The error is below. I’ve opened up a defect. The bug is listed here: http://code.google.com/p/selenium/issues/detail?id=3270.
com.thoughtworks.selenium.SeleniumException: ERROR: Window does not exist. If this looks like a Selenium bug, make sure to read http://seleniumhq.org/docs/04_selenese_commands.html#alerts-popups-and-multiple-windows for potential workarounds. at com.thoughtworks.selenium.HttpCommandProcessor.throwAssertionFailureExceptionOrError(HttpCommandProcessor.java:112) at com.thoughtworks.selenium.HttpCommandProcessor.doCommand(HttpCommandProcessor.java:106) at com.thoughtworks.selenium.DefaultSelenium.selectWindow(DefaultSelenium.java:370) at org.example.SeleniumIntegrationTest.popupWindowExample(SeleniumIntegrationTest.java:99) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Pingback: JUnit Tutorial « Zeeshan Akhter
I’ve tried to use this in Selenium IDE:
// Select the original window.
selenium.selectWindow(“null”);
assertEquals(selenium.getTitle(), “Popup Window Example”);
The result was:
I’ve tried in these ways:
| selectWindow | name=null | |
| selectWindow | name=”” | |
| selectWindow | name=” l | |
I can’t use ‘title’ or ‘id’ instead of ‘name’ because this doesn’t return any difference between my Pop-up and my main page.
So, I could’n do this working… Do you have some idea?
Thanks!
Hi,
You should use | selectWindow | null | for move the focus on current window.
Thanks
Ashish