Skip to content

Commit

Permalink
JENKINS-15261 Retrieve webdriver/seleniumrc-specific browsers
Browse files Browse the repository at this point in the history
  • Loading branch information
rossrowe committed Sep 27, 2012
1 parent 590e694 commit ee1ebed
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 45 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -146,7 +146,7 @@
<dependency>
<groupId>com.saucelabs</groupId>
<artifactId>ci-sauce</artifactId>
<version>1.15</version>
<version>1.16-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
Expand Down
Expand Up @@ -66,7 +66,7 @@ public String getDisplayName() {

public List<com.saucelabs.ci.Browser> getBrowsers() {
try {
return BrowserFactory.getInstance().values();
return BrowserFactory.getInstance().getWebDriverBrowsers();
} catch (IOException e) {
logger.log(Level.WARNING, "Error retrieving browsers from Saucelabs", e);
} catch (JSONException e) {
Expand Down
Expand Up @@ -88,7 +88,8 @@ public class SauceOnDemandBuildWrapper extends BuildWrapper implements Serializa
private String seleniumPort;
private Credentials credentials;
private SeleniumInformation seleniumInformation;
private List<String> browsers;
private List<String> seleniumBrowsers;
private List<String> webDriverBrowsers;
/**
*
*/
Expand All @@ -107,14 +108,16 @@ public SauceOnDemandBuildWrapper(Credentials
String seleniumHost,
String seleniumPort,
boolean enableSauceConnect,
List<String> browsers,
List<String> seleniumBrowsers,
List<String> webDriverBrowsers,
boolean launchSauceConnectOnSlave) {
this.credentials = credentials;
this.seleniumInformation = seleniumInformation;
this.enableSauceConnect = enableSauceConnect;
this.seleniumHost = seleniumHost;
this.seleniumPort = seleniumPort;
this.browsers = browsers;
this.seleniumBrowsers = seleniumBrowsers;
this.webDriverBrowsers = webDriverBrowsers;
this.launchSauceConnectOnSlave = launchSauceConnectOnSlave;
}

Expand Down Expand Up @@ -143,17 +146,30 @@ public Environment setUp(AbstractBuild build, Launcher launcher, BuildListener l
@Override
public void buildEnvVars(Map<String, String> env) {

if (browsers != null && !browsers.isEmpty()) {
if (browsers.size() == 1) {
Browser browserInstance = BrowserFactory.getInstance().forKey(browsers.get(0));
outputSeleniumVariables(env);
outputWebDriverVariables(env);
env.put(SAUCE_USERNAME, getUserName());
env.put(SAUCE_API_KEY, getApiKey());
env.put(SELENIUM_HOST, getHostName());
DecimalFormat myFormatter = new DecimalFormat("####");
env.put(SELENIUM_PORT, myFormatter.format(getPort()));
if (getStartingURL() != null) {
env.put(SELENIUM_STARTING_URL, getStartingURL());
}
}

private void outputSeleniumVariables(Map<String, String> env) {
if (seleniumBrowsers != null && !seleniumBrowsers.isEmpty()) {
if (seleniumBrowsers.size() == 1) {
Browser browserInstance = BrowserFactory.getInstance().forKey(seleniumBrowsers.get(0));
env.put(SELENIUM_PLATFORM, browserInstance.getPlatform().toString());
env.put(SELENIUM_BROWSER, browserInstance.getBrowserName());
env.put(SELENIUM_VERSION, browserInstance.getVersion());
env.put(SELENIUM_DRIVER, browserInstance.getUri());
}

JSONArray browsersJSON = new JSONArray();
for (String browser : browsers) {
for (String browser : seleniumBrowsers) {
Browser browserInstance = BrowserFactory.getInstance().forKey(browser);
JSONObject config = new JSONObject();
try {
Expand All @@ -170,13 +186,35 @@ public void buildEnvVars(Map<String, String> env) {

env.put(SAUCE_ONDEMAND_BROWSERS, StringEscapeUtils.escapeJava(browsersJSON.toString()));
}
env.put(SAUCE_USERNAME, getUserName());
env.put(SAUCE_API_KEY, getApiKey());
env.put(SELENIUM_HOST, getHostName());
DecimalFormat myFormatter = new DecimalFormat("####");
env.put(SELENIUM_PORT, myFormatter.format(getPort()));
if (getStartingURL() != null) {
env.put(SELENIUM_STARTING_URL, getStartingURL());
}

private void outputWebDriverVariables(Map<String, String> env) {
if (webDriverBrowsers != null && !webDriverBrowsers.isEmpty()) {
if (webDriverBrowsers.size() == 1) {
Browser browserInstance = BrowserFactory.getInstance().forKey(webDriverBrowsers.get(0));
env.put(SELENIUM_PLATFORM, browserInstance.getPlatform().toString());
env.put(SELENIUM_BROWSER, browserInstance.getBrowserName());
env.put(SELENIUM_VERSION, browserInstance.getVersion());
env.put(SELENIUM_DRIVER, browserInstance.getUri());
}

JSONArray browsersJSON = new JSONArray();
for (String browser : webDriverBrowsers) {
Browser browserInstance = BrowserFactory.getInstance().forKey(browser);
JSONObject config = new JSONObject();
try {
config.put("os", browserInstance.getPlatform().toString());
config.put("browser", browserInstance.getBrowserName());
config.put("browser-version", browserInstance.getVersion());
config.put("url", browserInstance.getUri());
} catch (JSONException e) {
logger.log(Level.SEVERE, "Unable to create JSON Object", e);
}
browsersJSON.put(config);

}

env.put(SAUCE_ONDEMAND_BROWSERS, StringEscapeUtils.escapeJava(browsersJSON.toString()));
}
}

Expand Down Expand Up @@ -382,12 +420,20 @@ public void setEnableSauceConnect(boolean enableSauceConnect) {
this.enableSauceConnect = enableSauceConnect;
}

public List<String> getBrowsers() {
return browsers;
public List<String> getSeleniumBrowsers() {
return seleniumBrowsers;
}

public void setBrowsers(List<String> browsers) {
this.browsers = browsers;
public void setSeleniumBrowsers(List<String> seleniumBrowsers) {
this.seleniumBrowsers = seleniumBrowsers;
}

public List<String> getWebDriverBrowsers() {
return webDriverBrowsers;
}

public void setWebDriverBrowsers(List<String> webDriverBrowsers) {
this.webDriverBrowsers = webDriverBrowsers;
}

private interface ITunnelHolder {
Expand Down Expand Up @@ -486,9 +532,20 @@ public String getDisplayName() {
return "Sauce OnDemand Support";
}

public List<Browser> getBrowsers() {
public List<Browser> getSeleniumBrowsers() {
try {
return BrowserFactory.getInstance().getSeleniumBrowsers();
} catch (IOException e) {
logger.log(Level.SEVERE, "Error retrieving browsers from Saucelabs", e);
} catch (JSONException e) {
logger.log(Level.SEVERE, "Error parsing JSON response", e);
}
return Collections.emptyList();
}

public List<Browser> getWebDriverBrowsers() {
try {
return BrowserFactory.getInstance().values();
return BrowserFactory.getInstance().getWebDriverBrowsers();
} catch (IOException e) {
logger.log(Level.SEVERE, "Error retrieving browsers from Saucelabs", e);
} catch (JSONException e) {
Expand Down
Expand Up @@ -2,35 +2,52 @@
xmlns:t="/lib/hudson" xmlns:f="/lib/form">

<f:block>
<f:section title="Sauce Connect Options">
<f:section title="Sauce OnDemand Options">
<f:entry field="enableSauceConnect">
<f:checkbox title="${%Enable Sauce Connect?}" default="checked"/>
</f:entry>
<f:entry title="${%Operating System/Browser/Version}">
<select name="browsers" multiple="multiple">
<j:forEach var="b" items="${descriptor.browsers}">
<j:choose>
<j:when test="${instance.browsers.contains(b.key)}">
<option value="${b.key}" selected="selected">${b.name}</option>
</j:when>
<j:otherwise>
<option value="${b.key}">${b.name}</option>
</j:otherwise>
</j:choose>

</j:forEach>
</select>
</f:entry>

<f:optionalBlock field="seleniumInformation" checked="${instance.seleniumInformation != null}"
title="${%Will Selenium 1 tests be run?}">
<j:set var="seleniumInformation" value="${instance.seleniumInformation}"/>
<f:radioBlock name="seleniumInformation" value="webdriver" title="${%WebDriver}"
checked="${instance.seleniumInformation == null}">
<f:nested>
<select name="webDriverBrowsers" multiple="multiple">
<j:forEach var="b" items="${descriptor.webDriverBrowsers}">
<j:choose>
<j:when test="${instance.webDriverBrowsers.contains(b.key)}">
<option value="${b.key}" selected="selected">${b.name}</option>
</j:when>
<j:otherwise>
<option value="${b.key}">${b.name}</option>
</j:otherwise>
</j:choose>

<f:entry title="${%Starting URL}" field="startingURL">
<f:textbox value="${seleniumInformation.startingURL}"/>
</f:entry>
</j:forEach>
</select>
</f:nested>
</f:radioBlock>
<f:radioBlock name="seleniumInformation" value="selenium" title="${%Selenium RC}"
checked="${instance.seleniumInformation != null}">

</f:optionalBlock>
<f:nested>
<select name="seleniumBrowsers" multiple="multiple">
<j:forEach var="b" items="${descriptor.seleniumBrowsers}">
<j:choose>
<j:when test="${instance.seleniumBrowsers.contains(b.key)}">
<option value="${b.key}" selected="selected">${b.name}</option>
</j:when>
<j:otherwise>
<option value="${b.key}">${b.name}</option>
</j:otherwise>
</j:choose>

</j:forEach>
</select>
<j:set var="seleniumInformation" value="${instance.seleniumInformation}"/>
<f:entry title="${%Starting URL}" field="startingURL">
<f:textbox value="${seleniumInformation.startingURL}"/>
</f:entry>
</f:nested>
</f:radioBlock>

<f:optionalBlock field="credentials" checked="${instance.credentials != null}"
title="${%Override default authentication?}">
Expand Down

0 comments on commit ee1ebed

Please sign in to comment.