appium-flutter-driver
Version:
Appium Flutter driver
79 lines • 3.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.startAndroidSession = startAndroidSession;
exports.connectAndroidSession = connectAndroidSession;
exports.getObservatoryWsUri = getObservatoryWsUri;
const appium_uiautomator2_driver_1 = require("appium-uiautomator2-driver");
const observatory_1 = require("./observatory");
const log_monitor_1 = require("./log-monitor");
async function startAndroidSession(caps, ...args) {
this.log.info(`Starting an Android proxy session`);
const androiddriver = new appium_uiautomator2_driver_1.AndroidUiautomator2Driver({});
if (!caps.observatoryWsUri) {
androiddriver.eventEmitter.once('syslogStarted', (syslog) => {
this._logmon = new log_monitor_1.LogMonitor(syslog, async (entry) => {
if ((0, observatory_1.extractObservatoryUrl)(entry)) {
this.log.debug(`Matched the syslog line '${entry.message}'`);
return true;
}
return false;
});
this._logmon.start();
});
}
//@ts-ignore Args are ok
await androiddriver.createSession(...args);
// the session starts without any apps
if (caps.app === undefined && caps.appPackage === undefined) {
return [androiddriver, null];
}
return [androiddriver, await connectAndroidSession.bind(this)(androiddriver, caps)];
}
async function connectAndroidSession(androiddriver, caps, clearLog = false) {
const observatoryWsUri = await getObservatoryWsUri.bind(this)(androiddriver, caps, clearLog);
return await observatory_1.connectSocket.bind(this)(observatoryWsUri, caps);
}
async function getObservatoryWsUri(proxydriver, caps, clearLog = false) {
if (clearLog) {
this._logmon?.clearlastMatch();
this._logmon?.stop();
this._logmon?.start();
}
let urlObject;
if (caps.observatoryWsUri) {
urlObject = new URL(caps.observatoryWsUri);
urlObject.protocol = `ws`;
// defaults to skip the port-forwarding as backward compatibility
if (caps.skipPortForward === undefined || caps.skipPortForward) {
return urlObject.toJSON();
}
}
else {
if (!this._logmon) {
throw new Error(`The mandatory logcat service must be running in order to initialize the Flutter driver. ` +
`Have you disabled it in capabilities?`);
}
let lastMatch = null;
try {
lastMatch = await this._logmon.waitForLastMatchExist(caps.maxRetryCount, caps.retryBackoffTime);
}
catch (e) {
this.log.error(e);
}
if (!lastMatch) {
throw new Error(`No observatory URL matching to '${observatory_1.OBSERVATORY_URL_PATTERN}' was found in the device log. ` +
`Please make sure the application under test is configured properly according to ` +
`https://github.com/appium/appium-flutter-driver#usage and that it does not crash on startup.`);
}
urlObject = (0, observatory_1.extractObservatoryUrl)(lastMatch);
}
const remotePort = urlObject.port;
this.portForwardLocalPort = caps.forwardingPort ?? remotePort;
urlObject.port = this.portForwardLocalPort;
await proxydriver.adb.forwardPort(this.portForwardLocalPort, remotePort);
if (!caps.observatoryWsUri && proxydriver.adb.adbHost) {
urlObject.host = proxydriver.adb.adbHost;
}
return urlObject.toJSON();
}
//# sourceMappingURL=android.js.map