Skip to content

Instantly share code, notes, and snippets.

@kool79
Created September 2, 2018 23:17
Show Gist options
  • Save kool79/6b3cd40b473eaa3123a8f5e8be95c9e0 to your computer and use it in GitHub Desktop.
Save kool79/6b3cd40b473eaa3123a8f5e8be95c9e0 to your computer and use it in GitHub Desktop.
package qa.ok.fw.test;
import java.net.MalformedURLException;
import java.net.URL;
import java.time.Duration;
import java.time.LocalTime;
import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.BrowserType;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.Test;
public class AppuimW3cBug {
private final URL hubUrl = new URL("http://ta-mac-01:4724/wd/hub");
private static final Duration NEW_COMMAND_TIMEOUT = Duration.ofSeconds(80);
public AppuimW3cBug() throws MalformedURLException {}
@Test
public void connectionTest() throws InterruptedException {
WebDriver wd = startDriver("http://the-internet.herokuapp.com/");
try {
log("Open URL... http://the-internet.herokuapp.com/");
wd.get("http://the-internet.herokuapp.com/");
log("wait until session expired on appium side ( param newCommandTimeout)");
Thread.sleep(NEW_COMMAND_TIMEOUT.toMillis() + 5000);
String title = wd.getTitle(); //must fail with "no such session" but prints appium's stacktrace as title
log("Get title:" + title);
log("ERROR!!! : Test must be terminated on previous command");
} finally {
wd.quit();
}
}
private WebDriver startDriver(String url) {
DesiredCapabilities dc = new DesiredCapabilities();
dc.setCapability(CapabilityType.PLATFORM_NAME, Platform.IOS);
dc.setCapability(CapabilityType.BROWSER_NAME, BrowserType.SAFARI);
dc.setCapability("appium:automationName", "XCUITest");
dc.setCapability("appium:platformVersion", "11.4");
dc.setCapability("appium:deviceName", "iPhone 7");
dc.setCapability("appium:shutdownOtherSimulators", true);
dc.setCapability("appium:useNewWDA", false);
dc.setCapability("appium:fullReset", false);
dc.setCapability("appium:noReset", false);
dc.setCapability("appium:resetOnSessionStartOnly", false);
dc.setCapability("appium:newCommandTimeout", NEW_COMMAND_TIMEOUT.toSeconds());
log("Starting driver...");
return new RemoteWebDriver(hubUrl, dc);
}
private static void log(Object... args) {
StringBuilder s = new StringBuilder(LocalTime.now() + ": ");
for (Object arg : args) s.append(" ").append(arg);
System.out.println(s);
}
}
@kool79
Copy link
Author

kool79 commented Sep 2, 2018

Line 35: wait until appium expire session (due expiration of newCommandTimeout)
Line 37: try to get title of window from the session. Instead of failed test we had content of appium stacktrace as 'title'.

Execution log ( note that test is marked as passed. Stacktrace below is NOT an error. It is content of title variable):

02:22:26.710518300:   Starting driver...
02:22:44.872557100:   Open URL... http://the-internet.herokuapp.com/
02:22:46.966676900:   wait until session expired on appium side ( param newCommandTimeout)
02:23:07.079827300:   Get title:{error=invalid session id, message=A session is either terminated or not started, stacktrace=NoSuchDriverError: A session is either terminated or not started
    at asyncHandler$ (/usr/local/lib/node_modules/appium/node_modules/appium-base-driver/lib/protocol/protocol.js:223:15)
    at tryCatch (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:67:40)
    at GeneratorFunctionPrototype.invoke [as _invoke] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:315:22)
    at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:100:21)
    at invoke (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:136:37)
    at enqueueResult (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:185:17)
    at new Promise (<anonymous>)
    at new F (/usr/local/lib/node_modules/appium/node_modules/core-js/library/modules/$.export.js:30:36)
    at AsyncIterator.enqueue (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:184:12)
    at AsyncIterator.prototype.(anonymous function) [as next] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:100:21)
    at Object.runtime.async (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:209:12)
    at asyncHandler (/usr/local/lib/node_modules/appium/node_modules/appium-base-driver/build/lib/protocol/protocol.js:335:32)
    at /usr/local/lib/node_modules/appium/node_modules/appium-base-driver/lib/protocol/protocol.js:417:15
    at Layer.handle [as handle_request] (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/layer.js:95:5)
    at next (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/layer.js:95:5)
    at /usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:281:22
    at param (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:354:14)
    at param (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:365:14)
    at Function.process_params (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:410:3)
    at next (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:275:10)
    at logger (/usr/local/lib/node_modules/appium/node_modules/morgan/index.js:144:5)
    at Layer.handle [as handle_request] (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:317:13)
    at /usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:335:12)
    at next (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:275:10)
    at jsonParser (/usr/local/lib/node_modules/appium/node_modules/body-parser/lib/types/json.js:110:7)
    at Layer.handle [as handle_request] (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:317:13)
    at /usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:335:12)
    at next (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:275:10)
    at Layer.handle [as handle_request] (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/layer.js:91:12)
    at trim_prefix (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:317:13)
    at /usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:335:12)
    at next (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:275:10)
    at Layer.handle [as handle_request] (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/layer.js:91:12)
    at trim_prefix (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:317:13)
    at /usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:335:12)
    at next (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:275:10)
    at methodOverride (/usr/local/lib/node_modules/appium/node_modules/method-override/index.js:65:14)
    at Layer.handle [as handle_request] (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:317:13)
    at /usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:335:12)
    at next (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:275:10)
    at urlencodedParser (/usr/local/lib/node_modules/appium/node_modules/body-parser/lib/types/urlencoded.js:91:7)
    at Layer.handle [as handle_request] (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:317:13)
    at /usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:335:12)
    at next (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:275:10)
    at defaultToJSONContentType (/usr/local/lib/node_modules/appium/node_modules/appium-base-driver/lib/express/middleware.js:37:3)
    at Layer.handle [as handle_request] (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:317:13)
    at /usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:335:12)
    at next (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:275:10)
    at fixPythonContentType (/usr/local/lib/node_modules/appium/node_modules/appium-base-driver/lib/express/middleware.js:30:3)
    at Layer.handle [as handle_request] (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:317:13)
    at /usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:335:12)
    at next (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/index.js:275:10)
    at allowCrossDomain (/usr/local/lib/node_modules/appium/node_modules/appium-base-driver/lib/express/middleware.js:15:7)
    at Layer.handle [as handle_request] (/usr/local/lib/node_modules/appium/node_modules/express/lib/router/layer.js:95:5)}
02:23:07.081827400:   ERROR!!! : Test must be terminated on previous command

===============================================
Default Suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================


Process finished with exit code 0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment