Java tutorial
/** * Orignal work: Copyright 2015 www.seleniumtests.com * Modified work: Copyright 2016 www.infotel.com * Copyright 2017-2019 B.Hecquet * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.seleniumtests.connectors.selenium; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.json.JSONObject; import org.openqa.selenium.Capabilities; import org.openqa.selenium.remote.RemoteWebDriver; import org.openqa.selenium.remote.SessionId; import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; import com.mashape.unirest.http.exceptions.UnirestException; import com.seleniumtests.customexception.ConfigurationException; import com.seleniumtests.util.logging.SeleniumRobotLogger; public class SeleniumGridConnector { protected URL hubUrl; protected String hubHost; protected int hubPort; protected SessionId sessionId; protected String nodeUrl; public static final String CONSOLE_SERVLET = "/grid/console/"; protected static Logger logger = SeleniumRobotLogger.getLogger(SeleniumGridConnector.class); public SeleniumGridConnector(String url) { try { hubUrl = new URL(url); } catch (MalformedURLException e1) { throw new ConfigurationException(String.format("Hub url '%s' is invalid: %s", url, e1.getMessage())); } hubHost = hubUrl.getHost(); hubPort = hubUrl.getPort(); } /** * Do nothing as we are not a SeleniumRobotGrid * @param driver */ public void uploadMobileApp(Capabilities caps) { logger.warn("application upload is only available with seleniumRobot grid"); } /** * Upload a file given file path * @param filePath */ public void uploadFile(String filePath) { logger.warn("file upload is only available with seleniumRobot grid"); } /** * Kill process * @param processName */ public void killProcess(String processName) { logger.warn("kill is only available with seleniumRobot grid"); } /** * Upload a file to a browser uplpoad window * @param filePath */ public void uploadFileToBrowser(String fileName, String base64Content) { logger.warn("file upload to browser is only available with seleniumRobot grid"); } /** * Left clic on desktop at x,y * @param x x coordinate * @param y y coordinate */ public void leftClic(int x, int y) { logger.warn("left clic is only available with seleniumRobot grid"); } /** * double clic on desktop at x,y * @param x x coordinate * @param y y coordinate */ public void doubleClick(int x, int y) { logger.warn("left clic is only available with seleniumRobot grid"); } /** * right clic on desktop at x,y * @param x x coordinate * @param y y coordinate */ public void rightClic(int x, int y) { logger.warn("right clic is only available with seleniumRobot grid"); } /** * Take screenshot of the full desktop and return a base64 string of the image * @return */ public String captureDesktopToBuffer() { logger.warn("captureDesktopToBuffer is only available with seleniumRobot grid"); return null; } /** * Send keys to desktop * @param keys */ public void sendKeysWithKeyboard(List<Integer> keyCodes) { logger.warn("send keys is only available with seleniumRobot grid"); } public void startVideoCapture() { logger.warn("video capture is only available with seleniumRobot grid"); } public File stopVideoCapture(String outputFile) { logger.warn("video capture is only available with seleniumRobot grid"); return null; } public List<Integer> getProcessList(String processName) { logger.warn("process list is only available with seleniumRobot grid"); return new ArrayList<>(); } /** * * @return true if grid is active. Raises an exception if it's not there anymore */ public boolean isGridActive() { HttpResponse<String> response; try { response = Unirest.get(String.format("http://%s:%s%s", hubUrl.getHost(), hubUrl.getPort(), SeleniumGridConnector.CONSOLE_SERVLET)).asString(); if (response.getStatus() != 200) { logger.warn("Error connecting to the grid hub at " + hubUrl); return false; } else { return true; } } catch (UnirestException e) { logger.warn("Cannot connect to the grid hub at " + hubUrl); return false; } } /** * Write text to desktop using keyboard * @param text */ public void writeText(String text) { logger.warn("writeText is only available with seleniumRobot grid"); } public void runTest(RemoteWebDriver driver) { // logging node ip address: try { JSONObject object = Unirest .get(String.format("http://%s:%d/grid/api/testsession/", hubUrl.getHost(), hubUrl.getPort())) .queryString("session", driver.getSessionId().toString()).asJson().getBody().getObject(); nodeUrl = (String) object.get("proxyId"); String node = nodeUrl.split("//")[1].split(":")[0]; String browserName = driver.getCapabilities().getBrowserName(); String version = driver.getCapabilities().getVersion(); // setting sessionId ensures that this connector is the active one sessionId = driver.getSessionId(); logger.info("WebDriver is running on node " + node + ", " + browserName + " " + version + ", session " + sessionId); } catch (Exception ex) { logger.error(ex); } } public URL getHubUrl() { return hubUrl; } public SessionId getSessionId() { return sessionId; } public String getNodeUrl() { return nodeUrl; } public void setNodeUrl(String nodeUrl) { this.nodeUrl = nodeUrl; } }