Java 类org.openqa.selenium.remote.CommandCodec 实例源码

项目:talk2grid    文件:RemoteWebDriverEnricher.java   
/**
 * A helper method that enriches a {@link RemoteWebDriver} instance with the ability to route all browser
 * interaction requests directly to the node on which the session was created and route only the session termination
 * request to the hub.
 *
 * @param driver - A {@link RemoteWebDriver} instance.
 * @param hub    - A {@link Host} object that represents the Hub information.
 * @return - A {@link RemoteWebDriver} instance that is enriched with the ability to route all browser interactions
 * directly to the node.
 */
public static RemoteWebDriver enrichRemoteWebDriverToInteractDirectlyWithNode(RemoteWebDriver driver, Host hub) {
    if (hub == null) {
        return driver;
    }
    try {
        CommandExecutor grid = driver.getCommandExecutor();
        String sessionId = driver.getSessionId().toString();
        GridApiAssistant assistant = new GridApiAssistant(hub);

        Host nodeHost = assistant.getNodeDetailsForSession(sessionId);
        URL url = new URL(String.format("http://%s:%d/wd/hub", nodeHost.getIpAddress(), nodeHost.getPort()));
        CommandExecutor node = new HttpCommandExecutor(url);
        CommandCodec commandCodec = getCodec(grid, "commandCodec");
        ResponseCodec responseCodec = getCodec(grid, "responseCodec");
        setCodec(node, commandCodec, "commandCodec");
        setCodec(node, responseCodec, "responseCodec");
        appendListenerToWebDriver(driver, grid, node);
        LOG.info("Traffic will now be routed directly to the node.");
        LOG.warning(constructWarningMessage(hub));
    } catch (Exception e) {
        //Gobble exceptions
        LOG.warning("Unable to enrich the RemoteWebDriver instance. Root cause :" + e.getMessage()
            + ". Returning back the original instance that was passed, as is.");
    }
    return driver;
}