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