Java 类org.openqa.selenium.remote.SessionId 实例源码
项目:Cognizant-Intelligent-Test-Scripter
文件:GridInfoExtractor.java
public static String[] getHostNameAndPort(String hostName, int port, SessionId session) {
String[] hostAndPort = new String[2];
String errorMsg = "Failed to acquire remote webdriver node and port info. Root cause: \n";
try {
HttpHost host = new HttpHost(hostName, port);
CloseableHttpClient client = HttpClients.createSystem();
URL sessionURL = new URL("http://" + hostName + ":" + port + "/grid/api/testsession?session=" + session);
BasicHttpEntityEnclosingRequest r = new BasicHttpEntityEnclosingRequest("POST", sessionURL.toExternalForm());
HttpResponse response = client.execute(host, r);
String url = extractUrlFromResponse(response);
if (url != null) {
URL myURL = new URL(url);
if ((myURL.getHost() != null) && (myURL.getPort() != -1)) {
hostAndPort[0] = myURL.getHost();
hostAndPort[1] = Integer.toString(myURL.getPort());
}
}
} catch (Exception e) {
Logger.getLogger(GridInfoExtractor.class.getName()).log(Level.SEVERE, null, errorMsg + e);
}
return hostAndPort;
}
项目:grid-refactor-remote-server
文件:DefaultPerSessionLogHandler.java
/**
* Fetches and stores available logs from the given session and driver.
*
* @param sessionId The id of the session.
* @param driver The driver to get the logs from.
* @throws IOException If there was a problem reading from file.
*/
@Override
public synchronized void fetchAndStoreLogsFromDriver(SessionId sessionId, WebDriver driver)
throws IOException {
if (!perSessionDriverEntries.containsKey(sessionId)) {
perSessionDriverEntries.put(sessionId, Maps.<String, LogEntries>newHashMap());
}
Map<String, LogEntries> typeToEntriesMap = perSessionDriverEntries.get(sessionId);
if (storeLogsOnSessionQuit) {
typeToEntriesMap.put(LogType.SERVER, getSessionLog(sessionId));
Set<String> logTypeSet = driver.manage().logs().getAvailableLogTypes();
for (String logType : logTypeSet) {
typeToEntriesMap.put(logType, driver.manage().logs().get(logType));
}
}
}
项目:grid-refactor-remote-server
文件:SessionLogsToFileRepository.java
/**
* This creates a mapping between session and file representation of logs if doesnt exist already.
* Writes the log records to the log file. This does *NOT* flush the logs to file. This does *NOT*
* clear the records after writing to file.
*
* @param sessionId session-id to which the log records belong
* @param records logRecords that need to be stored
* @throws IOException
*/
synchronized public void flushRecordsToLogFile(SessionId sessionId,
List<LogRecord> records) throws IOException {
LogFile logFile = sessionToLogFileMap.get(sessionId);
if (logFile == null) {
createLogFileAndAddToMap(sessionId);
logFile = sessionToLogFileMap.get(sessionId);
}
logFile.openLogWriter();
for (LogRecord record : records) {
logFile.getLogWriter().writeObject(record);
}
logFile.closeLogWriter();
}
项目:grid-refactor-remote-server
文件:SessionLogsToFileRepository.java
/**
* This returns the log records storied in the corresponding log file. This does *NOT* clear the
* log records in the file.
*
* @param sessionId session-id for which the file logs needs to be returned.
* @return A List of LogRecord objects, which can be <i>null</i>.
* @throws IOException
*/
public List<LogRecord> getLogRecords(SessionId sessionId) throws IOException {
LogFile logFile = sessionToLogFileMap.get(sessionId);
if (logFile == null) {
return new ArrayList<LogRecord>();
}
logFile.openLogReader();
ObjectInputStream logObjInStream = logFile.getLogReader();
List<LogRecord> logRecords = new ArrayList<LogRecord>();
try {
LogRecord tmpLogRecord;
while (null != (tmpLogRecord = (LogRecord) logObjInStream
.readObject())) {
logRecords.add(tmpLogRecord);
}
} catch (IOException ex) {
logFile.closeLogReader();
return logRecords;
} catch (ClassNotFoundException e) {
logFile.closeLogReader();
return logRecords;
}
logFile.closeLogReader();
return logRecords;
}
项目:grid-refactor-remote-server
文件:DefaultSession.java
private DefaultSession(final DriverFactory factory, TemporaryFilesystem tempFs,
SessionId sessionId, final Capabilities capabilities) throws Exception {
this.knownElements = new KnownElements();
this.sessionId = sessionId;
this.tempFs = tempFs;
final BrowserCreator browserCreator = new BrowserCreator(factory, capabilities);
final FutureTask<EventFiringWebDriver> webDriverFutureTask =
new FutureTask<EventFiringWebDriver>(browserCreator);
executor = new ThreadPoolExecutor(1, 1,
600L, TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>());
// Ensure that the browser is created on the single thread.
EventFiringWebDriver initialDriver = execute(webDriverFutureTask);
if (!isQuietModeEnabled(browserCreator, capabilities)) {
// Memo to self; this is not a constructor escape of "this" - probably ;)
initialDriver.register(new SnapshotScreenListener(this));
}
this.driver = initialDriver;
this.capabilities = browserCreator.getCapabilityDescription();
updateLastAccessTime();
}
项目:selenium-test-automation-framework
文件:BrowserHelper.java
/**
* getTestNodeIP
* Getter/Creator for the Test Node IP
*
* @param hostName the name of the host (root)
* @param port the port to run against (if any)
* @param session the Browser Session
* @return hostAndPort (String)
*/
public String[] getTestNodeIP(String hostName, int port, SessionId session) {
String[] hostAndPort = new String[2];
String errorMsg = "Failed to acquire remote webdriver node and port info. Root cause: ";
try {
HttpHost host = new HttpHost(hostName, port);
HttpClient client = HttpClientBuilder.create().build();
URL sessionURL = new URL("http://" + hostName + ":" + port + "/grid/api/testsession?session=" + session);
BasicHttpEntityEnclosingRequest r = new BasicHttpEntityEnclosingRequest("POST", sessionURL.toExternalForm());
HttpResponse response = client.execute(host, r);
JSONObject object = extractObject(response);
URL myURL = new URL(object.getString("proxyId"));
if ((myURL.getHost() != null) && (myURL.getPort() != -1)) {
hostAndPort[0] = myURL.getHost();
hostAndPort[1] = Integer.toString(myURL.getPort());
}
} catch (Exception e) {
LOG.fatal(errorMsg + e);
throw new RuntimeException(errorMsg, e);
}
return hostAndPort;
}
项目:selenium-grid2-api
文件:GridInfoExtractor.java
public static GridInfo getHostNameAndPort(String hubHost, int hubPort, SessionId session) {
GridInfo retVal = null;
try {
HttpHost host = new HttpHost(hubHost, hubPort);
DefaultHttpClient client = new DefaultHttpClient();
URL sessionURL = new URL("http://" + hubHost + ":" + hubPort + "/grid/api/testsession?session=" + session);
BasicHttpEntityEnclosingRequest basicHttpEntityEnclosingRequest = new BasicHttpEntityEnclosingRequest("POST", sessionURL.toExternalForm());
HttpResponse response = client.execute(host, basicHttpEntityEnclosingRequest);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
JSONObject object = extractObject(response);
retVal = new GridInfo(object);
} else {
System.out.println("Problem connecting to Grid Server");
}
} catch (JSONException | IOException e) {
throw new RuntimeException("Failed to acquire remote webdriver node and port info", e);
}
return retVal;
}
项目:marathonv5
文件:JavaDriverTest.java
public void getSessions() {
driver = new JavaDriver();
JavaDriver driver1 = new JavaDriver();
SessionId id1 = ((RemoteWebDriver) driver).getSessionId();
SessionId id2 = driver1.getSessionId();
AssertJUnit.assertFalse(id1.equals(id2));
}
项目:webdriver-supplier
文件:MockWDFactory.java
@Override
public WebDriver createDriver(final Browser browser, final XmlConfig config) {
final RemoteWebDriver driver = mock(RemoteWebDriver.class);
when(driver.getScreenshotAs(OutputType.BYTES)).thenReturn(new byte[]{1, 2, 3});
doReturn(new SessionId(randomAlphanumeric(14))).when(driver).getSessionId();
return driver;
}
项目:msa-cucumber-appium
文件:MobileApp.java
private static Boolean isSessionEmpty(){
Boolean isEmpty = false;
SessionId session = ((AndroidDriver)getDriver()).getSessionId();
if(session == null){
isEmpty = true;
}else{
isEmpty = false;
}
return isEmpty;
}
项目:grid-refactor-remote-server
文件:DefaultDriverSessions.java
public SessionId newSession(Capabilities desiredCapabilities) throws Exception {
SessionId sessionId = new SessionId(UUID.randomUUID().toString());
Session session = DefaultSession.createSession(factory, sessionId, desiredCapabilities);
sessionIdToDriver.put(sessionId, session);
return sessionId;
}
项目:grid-refactor-remote-server
文件:DefaultPerSessionLogHandler.java
/**
* New handler keeping track of log records per session.
*
* @param capacity The capacity
* @param minimumLevel Only keep track of records whose level is equal or greater than
* minimumLevel.
* @param formatter Formatter to use when retrieving log messages.
* @param captureLogsOnQuit Whether to enable log capture on quit.
*/
public DefaultPerSessionLogHandler(int capacity, Level minimumLevel, Formatter formatter,
boolean captureLogsOnQuit) {
this.capacity = capacity;
this.formatter = formatter;
this.storeLogsOnSessionQuit = captureLogsOnQuit;
this.perSessionRecords = Maps.<SessionId, List<LogRecord>>newHashMap();
this.perThreadTempRecords = Maps.<ThreadKey, List<LogRecord>>newHashMap();
this.threadToSessionMap = Maps.<ThreadKey, SessionId>newHashMap();
this.sessionToThreadMap = Maps.<SessionId, ThreadKey>newHashMap();
this.logFileRepository = new SessionLogsToFileRepository();
this.perSessionDriverEntries = Maps.<SessionId, Map<String, LogEntries>>newHashMap();
}
项目:grid-refactor-remote-server
文件:DefaultPerSessionLogHandler.java
private String formattedRecords(SessionId sessionId) throws IOException {
final StringWriter writer;
writer = new StringWriter();
for (LogRecord record : records(sessionId)) {
writer.append(formatter.format(record));
}
return writer.toString();
}
项目:grid-refactor-remote-server
文件:DefaultPerSessionLogHandler.java
@Override
public synchronized void attachToCurrentThread(SessionId sessionId) {
ThreadKey threadId = new ThreadKey();
if (threadToSessionMap.get(threadId) == null
|| threadToSessionMap.get(threadId).equals(sessionId)) {
threadToSessionMap.put(threadId, sessionId);
sessionToThreadMap.put(sessionId, threadId);
}
transferThreadTempLogsToSessionLogs(sessionId);
}
项目:grid-refactor-remote-server
文件:DefaultPerSessionLogHandler.java
@Override
public void transferThreadTempLogsToSessionLogs(SessionId sessionId) {
ThreadKey threadId = new ThreadKey();
List<LogRecord> threadRecords = perThreadTempRecords.get(threadId);
List<LogRecord> sessionRecords = perSessionRecords.get(sessionId);
if (threadRecords != null) {
if (sessionRecords == null) {
sessionRecords = new ArrayList<LogRecord>();
perSessionRecords.put(sessionId, sessionRecords);
}
sessionRecords.addAll(threadRecords);
}
clearThreadTempLogs();
}
项目:grid-refactor-remote-server
文件:DefaultPerSessionLogHandler.java
@Override
public synchronized void detachFromCurrentThread() {
ThreadKey threadId = new ThreadKey();
SessionId sessionId = threadToSessionMap.get(threadId);
if (sessionId != null) {
threadToSessionMap.remove(threadId);
sessionToThreadMap.remove(sessionId);
clearThreadTempLogs();
}
}
项目:grid-refactor-remote-server
文件:DefaultPerSessionLogHandler.java
/**
* Removes session logs for the given session id.
*
* NB! If the handler has been configured to capture logs on quit no logs will be removed.
*
* @param sessionId The session id to use.
*/
@Override
public synchronized void removeSessionLogs(SessionId sessionId) {
if (storeLogsOnSessionQuit) {
return;
}
ThreadKey threadId = sessionToThreadMap.get(sessionId);
SessionId sessionIdForThread = threadToSessionMap.get(threadId);
if (threadId != null && sessionIdForThread != null && sessionIdForThread.equals(sessionId)) {
threadToSessionMap.remove(threadId);
sessionToThreadMap.remove(sessionId);
}
perSessionRecords.remove(sessionId);
logFileRepository.removeLogFile(sessionId);
}
项目:grid-refactor-remote-server
文件:DefaultPerSessionLogHandler.java
/**
* This returns Selenium Remote Control logs associated with the sessionId.
*
* @param sessionId session-id for which the RC logs will be returned.
* @return String RC logs for the sessionId
* @throws IOException when the elves go bad
*/
@Override
public synchronized String getLog(SessionId sessionId) throws IOException {
// TODO(chandra): Provide option to clear logs after getLog()
String logs = formattedRecords(sessionId);
logs = "\n<RC_Logs RC_Session_ID=" + sessionId + ">\n" + logs
+ "\n</RC_Logs>\n";
return logs;
}
项目:grid-refactor-remote-server
文件:DefaultPerSessionLogHandler.java
/**
* Returns the server log for the given session id.
*
* @param sessionId The session id.
* @return The available server log entries for the session.
* @throws IOException If there was a problem reading from file.
*/
@Override
public synchronized LogEntries getSessionLog(SessionId sessionId) throws IOException {
List<LogEntry> entries = Lists.<LogEntry>newLinkedList();
LogRecord[] records = records(sessionId);
if (records != null) {
for (LogRecord record : records) {
if (record.getLevel().intValue() >= serverLogLevel.intValue())
entries.add(new LogEntry(record.getLevel(), record.getMillis(), record.getMessage()));
}
}
return new LogEntries(entries);
}
项目:grid-refactor-remote-server
文件:DefaultPerSessionLogHandler.java
/**
* Returns a list of session IDs for which there are logs.
*
* The type of logs that are available depends on the log types provided
* by the driver. An included session id will at least have server logs.
*
* @return The list of session IDs.
*/
@Override
public synchronized List<SessionId> getLoggedSessions() {
// TODO: Find a solution that can handle large numbers of sessions, maybe by
// reading them from disc.
ImmutableList.Builder<SessionId> builder = new ImmutableList.Builder<SessionId>();
builder.addAll(perSessionDriverEntries.keySet());
return builder.build();
}
项目:grid-refactor-remote-server
文件:DefaultPerSessionLogHandler.java
/**
* Gets all logs for a session.
*
* @param sessionId The id of the session.
* @return The logs for the session, ordered after log types in a session logs object.
*/
@Override
public synchronized SessionLogs getAllLogsForSession(SessionId sessionId) {
SessionLogs sessionLogs = new SessionLogs();
if (perSessionDriverEntries.containsKey(sessionId)) {
Map<String, LogEntries> typeToEntriesMap = perSessionDriverEntries.get(sessionId);
for (String logType : typeToEntriesMap.keySet()) {
sessionLogs.addLog(logType, typeToEntriesMap.get(logType));
}
perSessionDriverEntries.remove(sessionId);
}
return sessionLogs;
}
项目:grid-refactor-remote-server
文件:SessionLogsToFileRepository.java
/**
* This creates log file object which represents logs in file form. This opens ObjectOutputStream
* which is used to write logRecords to log file and opens a ObjectInputStream which is used to
* read logRecords from the file.
*
* @param sessionId session-id for the log file entry needs to be created.
* @throws IOException
*/
public void createLogFileAndAddToMap(SessionId sessionId) throws IOException {
File rcLogFile;
// create logFile;
rcLogFile = File.createTempFile(sessionId.toString(), ".rclog");
rcLogFile.deleteOnExit();
LogFile logFile = new LogFile(rcLogFile.getAbsolutePath());
sessionToLogFileMap.put(sessionId, logFile);
}
项目:grid-refactor-remote-server
文件:SessionLogsToFileRepository.java
public void removeLogFile(SessionId sessionId) {
LogFile logFile = sessionToLogFileMap.get(sessionId);
sessionToLogFileMap.remove(sessionId);
if (logFile == null) {
return;
}
try {
logFile.removeLogFile();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
项目:grid-refactor-remote-server
文件:GetSessionLogsHandler.java
@Override
public Map<String, SessionLogs> handle() throws Exception {
ImmutableMap.Builder<String, SessionLogs> builder =
ImmutableMap.<String, SessionLogs>builder();
for (SessionId sessionId : LoggingManager.perSessionLogHandler().getLoggedSessions()) {
builder.put(sessionId.toString(),
LoggingManager.perSessionLogHandler().getAllLogsForSession(sessionId));
}
return builder.build();
}
项目:grid-refactor-remote-server
文件:GetAllSessions.java
private Function<SessionId, SessionInfo> toSessionInfo() {
return new Function<SessionId, SessionInfo>() {
public SessionInfo apply(SessionId id) {
Map<String, ?> capabilities = allSessions.get(id).getCapabilities().asMap();
return new SessionInfo(id, capabilities);
}
};
}
项目:grid-refactor-remote-server
文件:ResultConfig.java
private void throwUpIfSessionTerminated(SessionId sessId) throws SessionNotFoundException {
if (sessId == null) return;
Session session = sessions.get(sessId);
final boolean isTerminated = session == null;
if (isTerminated){
throw new SessionNotFoundException();
}
}
项目:grid-refactor-remote-server
文件:Responses.java
/**
* Creates a response object for a successful command execution.
*
* @param sessionId ID of the session that executed the command.
* @param value the command result value.
* @return the new response object.
*/
public static Response success(SessionId sessionId, Object value) {
Response response = new Response();
response.setSessionId(sessionId != null ? sessionId.toString() : null);
response.setValue(value);
response.setStatus(ErrorCodes.SUCCESS);
response.setState(ErrorCodes.SUCCESS_STRING);
return response;
}
项目:grid-refactor-remote-server
文件:Responses.java
/**
* Creates a response object for a failed command execution.
*
* @param sessionId ID of the session that executed the command.
* @param reason the failure reason.
* @return the new response object.
*/
public static Response failure(SessionId sessionId, Throwable reason) {
Response response = new Response();
response.setSessionId(sessionId != null ? sessionId.toString() : null);
response.setValue(reason);
response.setStatus(ERROR_CODES.toStatusCode(reason));
response.setState(ERROR_CODES.toState(response.getStatus()));
return response;
}
项目:grid-refactor-remote-server
文件:Responses.java
/**
* Creates a response object for a failed command execution.
*
* @param sessionId ID of the session that executed the command.
* @param reason the failure reason.
* @param screenshot a base64 png screenshot to include with the failure.
* @return the new response object.
*/
public static Response failure(
SessionId sessionId, Throwable reason, Optional<String> screenshot) {
Response response = new Response();
response.setSessionId(sessionId != null ? sessionId.toString() : null);
response.setStatus(ERROR_CODES.toStatusCode(reason));
response.setState(ERROR_CODES.toState(response.getStatus()));
if (reason != null) {
JsonObject json = new BeanToJsonConverter().convertObject(reason).getAsJsonObject();
json.addProperty("screen", screenshot.orNull());
response.setValue(json);
}
return response;
}
项目:grid-refactor-remote-server
文件:DefaultSession.java
public static Session createSession(DriverFactory factory,
SessionId sessionId, Capabilities capabilities)
throws Exception {
File tmpDir = new File(System.getProperty("java.io.tmpdir"), sessionId.toString());
if (!tmpDir.mkdir()) {
throw new WebDriverException("Cannot create temp directory: " + tmpDir);
}
TemporaryFilesystem tempFs = TemporaryFilesystem.getTmpFsBasedOn(tmpDir);
return new DefaultSession(factory, tempFs, sessionId, capabilities);
}
项目:chrome-extension-selenium-example
文件:FirespottingITTest.java
/**
* Check the tear down.
*/
@Test
public void testTearDown() throws IOException {
// insert mock to test object
firespottingIT.popupPage = this.popupPage;
// mock rest client
firespottingIT.restClient = mock(Resty.class);
// mock some objects for session key
RemoteWebDriver remoteWebDriver = mock(RemoteWebDriver.class);
SessionId sessionId = mock(SessionId.class);
when(popupPage.getDriver()).thenReturn(remoteWebDriver);
when(remoteWebDriver.getSessionId()).thenReturn(sessionId);
when(sessionId.toString()).thenReturn("72345863");
doReturn("sauceUsername").when(firespottingIT).getSystemVariable("SAUCE_USERNAME");
doReturn("sauceKey").when(firespottingIT).getSystemVariable("SAUCE_ACCESS_KEY");
doReturn("platform").when(firespottingIT).getSystemVariable("PLATFORM");
doReturn("travisBuildNr").when(firespottingIT).getSystemVariable("TRAVIS_BUILD_NUMBER");
// run test method
firespottingIT.tearDown();
// is the method called to tear down correctly?
verify(popupPage, atLeastOnce()).tearDown();
// verify rest client actions if environment variables are set
// @TODO: add better verification! (no more anyStrings; check the values!)
verify(firespottingIT.restClient, atLeastOnce()).authenticate(anyString(), anyString(), anyString().toCharArray());
verify(firespottingIT.restClient, atLeastOnce()).withHeader("Content-Type", "application/json");
}
项目:teasy
文件:SeleniumHolder.java
public static SessionId getSessionId() {
return sessionId.get();
}
项目:teasy
文件:SeleniumHolder.java
public static void setSessionId(SessionId sessionId) {
SeleniumHolder.sessionId.set(sessionId);
}
项目:selenium-jupiter
文件:DockerDriverHandler.java
public WebDriver resolve(BrowserType browser, String version) {
try {
boolean enableVnc = getBoolean("sel.jup.vnc");
recording = getBoolean("sel.jup.recording");
DesiredCapabilities capabilities = getCapabilities(browser,
enableVnc);
String imageVersion;
if (version != null && !version.isEmpty()
&& !version.equalsIgnoreCase("latest")) {
if (version.startsWith("latest-")) {
version = selenoidConfig.getVersionFromLabel(browser,
version);
}
imageVersion = selenoidConfig.getImageVersion(browser, version);
capabilities.setCapability("version", imageVersion);
} else {
imageVersion = selenoidConfig.getDefaultBrowser(browser);
}
int selenoidPort = startDockerBrowser(browser, version, recording);
int novncPort = 0;
if (enableVnc) {
novncPort = startDockerNoVnc();
}
String dockerServerIp = dockerService.getDockerServerHost();
String selenoidHubUrl = format("http://%s:%d/wd/hub",
dockerServerIp, selenoidPort);
WebDriver webdriver = new RemoteWebDriver(new URL(selenoidHubUrl),
capabilities);
SessionId sessionId = ((RemoteWebDriver) webdriver).getSessionId();
String parameterName = parameter.getName();
name = parameterName + "_" + browser + "_" + imageVersion + "_"
+ ((RemoteWebDriver) webdriver).getSessionId();
Optional<Method> testMethod = context.getTestMethod();
if (testMethod.isPresent()) {
name = testMethod.get().getName() + "_" + name;
}
if (index != null) {
name += index;
}
if (enableVnc) {
String vncUrl = format(
"http://%s:%d/vnc.html?host=%s&port=%d&path=vnc/%s&resize=scale&autoconnect=true&password=%s",
dockerServerIp, novncPort, dockerServerIp, selenoidPort,
sessionId, getString("sel.jup.selenoid.vnc.password"));
log.debug("Session {} VNC URL: {}", sessionId, vncUrl);
if (getBoolean("sel.jup.vnc.create.redirect.html.page")) {
String outputFolder = getOutputFolder(context);
String vncHtmlPage = format(
"<html><body onload=\"window.location.href='%s'\"></html>",
vncUrl);
write(Paths.get(outputFolder, name + ".html"),
vncHtmlPage.getBytes());
}
}
if (recording) {
recordingFile = new File(hostVideoFolder, sessionId + ".mp4");
}
return webdriver;
} catch (Exception e) {
throw new SeleniumJupiterException(e);
}
}
项目:satisfy
文件:SatisfyBaseStepListener.java
private void updateSessionIdIfKnown() {
SessionId sessionId = webdriverManager.getSessionId();
if (sessionId != null) {
getCurrentTestOutcome().setSessionId(sessionId.toString());
}
}
项目:galen-api-ports
文件:DriverUtils.java
public static SessionId getSessionId(WebDriver driver) {
if (driver instanceof RemoteWebDriver) {
return ((RemoteWebDriver) driver).getSessionId();
}
throw new IllegalArgumentException();
}
项目:grid-refactor-remote-server
文件:DefaultDriverSessions.java
public Session get(SessionId sessionId) {
return sessionIdToDriver.get(sessionId);
}
项目:grid-refactor-remote-server
文件:DefaultDriverSessions.java
public void deleteSession(SessionId sessionId) {
final Session removedSession = sessionIdToDriver.remove(sessionId);
if (removedSession != null) {
removedSession.close();
}
}
项目:grid-refactor-remote-server
文件:DefaultDriverSessions.java
public Set<SessionId> getSessions() {
return Collections.unmodifiableSet(sessionIdToDriver.keySet());
}
项目:grid-refactor-remote-server
文件:SessionCleaner.java
void checkExpiry() {
for (SessionId sessionId : driverSessions.getSessions()) {
Session session = driverSessions.get(sessionId);
if (session != null) {
boolean useDeleteSession = false;
boolean killed = false;
boolean inUse = session.isInUse();
if (!inUse && session.isTimedOut(clientGoneTimeout)) {
useDeleteSession = true;
log.info("Session " + session.getSessionId() + " deleted due to client timeout");
}
if (inUse && session.isTimedOut(insideBrowserTimeout)) {
WebDriver driver = session.getDriver();
if (driver instanceof EventFiringWebDriver){
driver = ((EventFiringWebDriver)driver).getWrappedDriver();
}
if (driver instanceof Killable) {
//session.interrupt();
((Killable) driver).kill();
killed = true;
log.warning("Browser killed and session " + session.getSessionId() + " terminated due to in-browser timeout.");
} else {
useDeleteSession = true;
log.warning("Session " + session.getSessionId() + " deleted due to in-browser timeout. " +
"Terminating driver with DeleteSession since it does not support Killable, "
+ "the driver in question does not support selenium-server timeouts fully");
}
}
if (useDeleteSession) {
DeleteSession deleteSession = new DeleteSession(session);
try {
deleteSession.call();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
if (useDeleteSession || killed) {
driverSessions.deleteSession(sessionId);
final PerSessionLogHandler logHandler = LoggingManager.perSessionLogHandler();
logHandler.transferThreadTempLogsToSessionLogs(sessionId);
logHandler.removeSessionLogs(sessionId);
}
}
}
}