mirror of
https://github.com/appium/appium.git
synced 2026-11-11 12:54:55 +08:00
Compare commits
13
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
319f7289e7 | ||
|
|
42c83f8044 | ||
|
|
0f32dad275 | ||
|
|
04d2b385d2 | ||
|
|
d0f29bda28 | ||
|
|
46b7df3f77 | ||
|
|
ad3b4b2c96 | ||
|
|
5d2156a06b | ||
|
|
67c2c3b18f | ||
|
|
20daee6a24 | ||
|
|
ff3b290c77 | ||
|
|
ed89b590e1 | ||
|
|
f8a51443e4 |
+4
-3
@@ -30,9 +30,9 @@
|
||||
"build:types": "tsc -b",
|
||||
"clean": "run-s clean:*",
|
||||
"clean:distfiles": "npx rimraf \"packages/*/build\"",
|
||||
"clean:monorepo": "npx rimraf node_modules package-lock.json",
|
||||
"clean:packages": "lerna clean -y && npx rimraf \"packages/*/package-lock.json\"",
|
||||
"clean:types": "tsc -b --clean",
|
||||
"clean:monorepo": "npx rimraf node_modules package-lock.json",
|
||||
"dev": "lerna run --parallel --prefix --concurrency=8 dev",
|
||||
"dev:types": "tsc -b --watch",
|
||||
"doctor": "node ./packages/doctor",
|
||||
@@ -44,7 +44,8 @@
|
||||
"lint:fix": "npm run lint -- --fix",
|
||||
"precommit-lint": "lint-staged",
|
||||
"precommit-msg": "echo 'Pre-commit checks...'",
|
||||
"prepublishOnly": "npm run build",
|
||||
"prepublishOnly": "tsc -b --clean && npm run build",
|
||||
"preversion": "tsc -b --clean && npm run build",
|
||||
"reinstall": "npm run clean && npm install",
|
||||
"start": "appium",
|
||||
"sync-pkgs": "run-p sync-pkgs:*",
|
||||
@@ -173,7 +174,7 @@
|
||||
"type-fest": "2.12.2",
|
||||
"typescript": "4.6.3",
|
||||
"validate.js": "0.13.1",
|
||||
"webdriverio": "7.19.3",
|
||||
"webdriverio": "7.19.4",
|
||||
"yaml-js": "0.3.1"
|
||||
},
|
||||
"engines": {
|
||||
|
||||
@@ -3,6 +3,25 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
# [2.0.0-beta.30](https://github.com/appium/appium/compare/appium@2.0.0-beta.29...appium@2.0.0-beta.30) (2022-04-12)
|
||||
|
||||
**Note:** Version bump only for package appium
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# [2.0.0-beta.29](https://github.com/appium/appium/compare/appium@2.0.0-beta.28...appium@2.0.0-beta.29) (2022-04-12)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **appium:** Properly detect if a command is a session command ([#16737](https://github.com/appium/appium/issues/16737)) ([f8a5144](https://github.com/appium/appium/commit/f8a51443e490d9a373778499bfc440e8464ca2ed))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# [2.0.0-beta.28](https://github.com/appium/appium/compare/appium@2.0.0-beta.27...appium@2.0.0-beta.28) (2022-04-07)
|
||||
|
||||
|
||||
|
||||
@@ -115,7 +115,6 @@ class AppiumDriver extends DriverCore {
|
||||
return this._log;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Cancel commands queueing for the umbrella Appium driver
|
||||
*/
|
||||
@@ -138,9 +137,8 @@ class AppiumDriver extends DriverCore {
|
||||
};
|
||||
}
|
||||
|
||||
async getSessions () {
|
||||
const sessions = await sessionsListGuard.acquire(AppiumDriver.name, () => this.sessions);
|
||||
return _.toPairs(sessions)
|
||||
async getSessions () { // eslint-disable-line require-await
|
||||
return _.toPairs(this.sessions)
|
||||
.map(([id, driver]) => ({id, capabilities: driver.caps}));
|
||||
}
|
||||
|
||||
@@ -300,9 +298,7 @@ class AppiumDriver extends DriverCore {
|
||||
[...runningDriversData, ...otherPendingDriversData]
|
||||
);
|
||||
protocol = driverInstance.protocol;
|
||||
await sessionsListGuard.acquire(AppiumDriver.name, () => {
|
||||
this.sessions[innerSessionId] = driverInstance;
|
||||
});
|
||||
this.sessions[innerSessionId] = driverInstance;
|
||||
} finally {
|
||||
await pendingDriversGuard.acquire(AppiumDriver.name, () => {
|
||||
_.pull(this.pendingDrivers[InnerDriver.name], driverInstance);
|
||||
@@ -377,16 +373,14 @@ class AppiumDriver extends DriverCore {
|
||||
* @param {import('../types/extension').DriverClass} InnerDriver
|
||||
* @returns {Promise<DriverData[]>}}
|
||||
*/
|
||||
async curSessionDataForDriver (InnerDriver) {
|
||||
const sessions = await sessionsListGuard.acquire(AppiumDriver.name, () => this.sessions);
|
||||
const data = _.compact(_.values(sessions)
|
||||
.filter((s) => s.constructor.name === InnerDriver.name)
|
||||
.map((s) => s.driverData));
|
||||
for (let datum of data) {
|
||||
async curSessionDataForDriver (InnerDriver) { // eslint-disable-line require-await
|
||||
const data = _.compact(_.values(this.sessions)
|
||||
.filter((s) => s.constructor.name === InnerDriver.name)
|
||||
.map((s) => s.driverData));
|
||||
for (const datum of data) {
|
||||
if (!datum) {
|
||||
throw new Error(`Problem getting session data for driver type ` +
|
||||
`${InnerDriver.name}; does it implement 'get ` +
|
||||
`driverData'?`);
|
||||
`${InnerDriver.name}; does it implement 'get driverData'?`);
|
||||
}
|
||||
}
|
||||
return data;
|
||||
@@ -522,9 +516,8 @@ class AppiumDriver extends DriverCore {
|
||||
// cases with plugin handling.
|
||||
|
||||
const isGetStatus = cmd === GET_STATUS_COMMAND;
|
||||
const isDeleteSession = cmd === DELETE_SESSION_COMMAND;
|
||||
const isUmbrellaCmd = !isGetStatus && isAppiumDriverCommand(cmd);
|
||||
const isSessionCmd = !isUmbrellaCmd || isDeleteSession;
|
||||
const isUmbrellaCmd = isAppiumDriverCommand(cmd);
|
||||
const isSessionCmd = isSessionCommand(cmd);
|
||||
|
||||
// if a plugin override proxying for this command and that is why we are here instead of just
|
||||
// letting the protocol proxy the command entirely, determine that, get the request object for
|
||||
@@ -544,7 +537,7 @@ class AppiumDriver extends DriverCore {
|
||||
let driver = this;
|
||||
if (isSessionCmd) {
|
||||
sessionId = _.last(args);
|
||||
dstSession = await sessionsListGuard.acquire(AppiumDriver.name, () => this.sessions[sessionId]);
|
||||
dstSession = this.sessions[sessionId];
|
||||
if (!dstSession) {
|
||||
throw new Error(`The session with id '${sessionId}' does not exist`);
|
||||
}
|
||||
@@ -717,7 +710,7 @@ class AppiumDriver extends DriverCore {
|
||||
// help decide which commands should be proxied to sub-drivers and which
|
||||
// should be handled by this, our umbrella driver
|
||||
function isAppiumDriverCommand (cmd) {
|
||||
return !isSessionCommand(cmd) || cmd === 'deleteSession';
|
||||
return !isSessionCommand(cmd) || cmd === DELETE_SESSION_COMMAND;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "appium",
|
||||
"version": "2.0.0-beta.28",
|
||||
"version": "2.0.0-beta.30",
|
||||
"description": "Automation for Apps.",
|
||||
"keywords": [
|
||||
"automation",
|
||||
|
||||
@@ -3,6 +3,26 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [8.4.2](https://github.com/appium/appium/compare/@appium/base-driver@8.4.1...@appium/base-driver@8.4.2) (2022-04-12)
|
||||
|
||||
**Note:** Version bump only for package @appium/base-driver
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [8.4.1](https://github.com/appium/appium/compare/@appium/base-driver@8.4.0...@appium/base-driver@8.4.1) (2022-04-12)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **base-driver:** isErrorType import ([ad3b4b2](https://github.com/appium/appium/commit/ad3b4b2c9676623a5eeb92e0beb510ec181fbcf8))
|
||||
* **base-driver:** Make sure proxyReqRes helper never throws any exceptions ([#16742](https://github.com/appium/appium/issues/16742)) ([5d2156a](https://github.com/appium/appium/commit/5d2156a06bcf621116db0adbedce431d7c18fca7))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# [8.4.0](https://github.com/appium/appium/compare/@appium/base-driver@8.3.1...@appium/base-driver@8.4.0) (2022-04-07)
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import _ from 'lodash';
|
||||
import url from 'url';
|
||||
import { URL } from 'url';
|
||||
import B from 'bluebird';
|
||||
|
||||
const DEFAULT_WS_PATHNAME_PREFIX = '/ws';
|
||||
|
||||
@@ -18,29 +19,28 @@ const DEFAULT_WS_PATHNAME_PREFIX = '/ws';
|
||||
* on how to configure the handler properly.
|
||||
*/
|
||||
async function addWebSocketHandler (handlerPathname, handlerServer) { // eslint-disable-line require-await
|
||||
let isUpgradeListenerAssigned = true;
|
||||
if (_.isUndefined(this.webSocketsMapping)) {
|
||||
this.webSocketsMapping = {};
|
||||
isUpgradeListenerAssigned = false;
|
||||
// https://github.com/websockets/ws/pull/885
|
||||
this.on('upgrade', (request, socket, head) => {
|
||||
let currentPathname;
|
||||
try {
|
||||
currentPathname = (new URL(request.url)).pathname;
|
||||
} catch (ign) {
|
||||
currentPathname = request.url;
|
||||
}
|
||||
for (const [pathname, wsServer] of _.toPairs(this.webSocketsMapping)) {
|
||||
if (currentPathname === pathname) {
|
||||
wsServer.handleUpgrade(request, socket, head, (ws) => {
|
||||
wsServer.emit('connection', ws, request);
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
socket.destroy();
|
||||
});
|
||||
}
|
||||
this.webSocketsMapping[handlerPathname] = handlerServer;
|
||||
if (isUpgradeListenerAssigned) {
|
||||
return;
|
||||
}
|
||||
|
||||
// https://github.com/websockets/ws/pull/885
|
||||
this.on('upgrade', (request, socket, head) => {
|
||||
const currentPathname = url.parse(request.url).pathname;
|
||||
for (const [pathname, wsServer] of _.toPairs(this.webSocketsMapping)) {
|
||||
if (currentPathname === pathname) {
|
||||
wsServer.handleUpgrade(request, socket, head, (ws) => {
|
||||
wsServer.emit('connection', ws, request);
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
socket.destroy();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -59,13 +59,12 @@ async function getWebSocketHandlers (keysFilter = null) { // eslint-disable-line
|
||||
return {};
|
||||
}
|
||||
|
||||
let result = {};
|
||||
for (const [pathname, wsServer] of _.toPairs(this.webSocketsMapping)) {
|
||||
return _.toPairs(this.webSocketsMapping).reduce((acc, [pathname, wsServer]) => {
|
||||
if (!_.isString(keysFilter) || pathname.includes(keysFilter)) {
|
||||
result[pathname] = wsServer;
|
||||
acc[pathname] = wsServer;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
return acc;
|
||||
}, {});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -79,12 +78,16 @@ async function getWebSocketHandlers (keysFilter = null) { // eslint-disable-line
|
||||
* @returns {boolean} true if the handlerPathname was found and deleted
|
||||
*/
|
||||
async function removeWebSocketHandler (handlerPathname) { // eslint-disable-line require-await
|
||||
if (!this.webSocketsMapping || !this.webSocketsMapping[handlerPathname]) {
|
||||
const wsServer = this.webSocketsMapping?.[handlerPathname];
|
||||
if (!wsServer) {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
this.webSocketsMapping[handlerPathname].close();
|
||||
wsServer.close();
|
||||
for (const client of (wsServer.clients || [])) {
|
||||
client.terminate();
|
||||
}
|
||||
return true;
|
||||
} catch (ign) {
|
||||
// ignore
|
||||
@@ -106,11 +109,11 @@ async function removeAllWebSocketHandlers () {
|
||||
return false;
|
||||
}
|
||||
|
||||
let result = false;
|
||||
for (const pathname of _.keys(this.webSocketsMapping)) {
|
||||
result = result || await this.removeWebSocketHandler(pathname);
|
||||
}
|
||||
return result;
|
||||
return _.some(
|
||||
await B.all(
|
||||
_.keys(this.webSocketsMapping).map((pathname) => this.removeWebSocketHandler(pathname))
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
export {
|
||||
|
||||
@@ -3,7 +3,8 @@ import { logger, util } from '@appium/support';
|
||||
import axios from 'axios';
|
||||
import { getSummaryByCode } from '../jsonwp-status/status';
|
||||
import {
|
||||
errors, isErrorType, errorFromMJSONWPStatusCode, errorFromW3CJsonCode
|
||||
errors, isErrorType, errorFromMJSONWPStatusCode, errorFromW3CJsonCode,
|
||||
getResponseForW3CError,
|
||||
} from '../protocol/errors';
|
||||
import { routeToCommandName } from '../protocol';
|
||||
import { MAX_LOG_BODY_LENGTH, DEFAULT_BASE_PATH, PROTOCOLS } from '../constants';
|
||||
@@ -312,15 +313,34 @@ class JWProxy {
|
||||
}
|
||||
|
||||
async proxyReqRes (req, res) {
|
||||
const [response, resBodyObj] = await this.proxyCommand(req.originalUrl, req.method, req.body);
|
||||
// ! this method must not throw any exceptions
|
||||
// ! make sure to call res.send before return
|
||||
let statusCode;
|
||||
let resBodyObj;
|
||||
try {
|
||||
let response;
|
||||
[response, resBodyObj] = await this.proxyCommand(req.originalUrl, req.method, req.body);
|
||||
res.headers = response.headers;
|
||||
statusCode = response.statusCode;
|
||||
} catch (err) {
|
||||
[statusCode, resBodyObj] = getResponseForW3CError(
|
||||
isErrorType(err, errors.ProxyRequestError) ? err.getActualError() : err
|
||||
);
|
||||
}
|
||||
res.set('content-type', 'application/json; charset=utf-8');
|
||||
if (!_.isPlainObject(resBodyObj)) {
|
||||
const error = new errors.UnknownError(
|
||||
`The downstream server response with the status code ${statusCode} is not a valid JSON object: ` +
|
||||
_.truncate(`${resBodyObj}`, {length: 300})
|
||||
);
|
||||
[statusCode, resBodyObj] = getResponseForW3CError(error);
|
||||
}
|
||||
|
||||
res.headers = response.headers;
|
||||
res.set('content-type', response.headers['content-type']);
|
||||
// if the proxied response contains a sessionId that the downstream
|
||||
// driver has generated, we don't want to return that to the client.
|
||||
// Instead, return the id from the request or from current session
|
||||
const reqSessionId = this.getSessionIdFromUrl(req.originalUrl);
|
||||
if (_.has(resBodyObj, 'sessionId')) {
|
||||
const reqSessionId = this.getSessionIdFromUrl(req.originalUrl);
|
||||
if (reqSessionId) {
|
||||
this.log.info(`Replacing sessionId ${resBodyObj.sessionId} with ${reqSessionId}`);
|
||||
resBodyObj.sessionId = reqSessionId;
|
||||
@@ -330,7 +350,7 @@ class JWProxy {
|
||||
}
|
||||
}
|
||||
resBodyObj.value = formatResponseValue(resBodyObj.value);
|
||||
res.status(response.statusCode).send(JSON.stringify(formatStatus(resBodyObj)));
|
||||
res.status(statusCode).send(JSON.stringify(formatStatus(resBodyObj)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/base-driver",
|
||||
"version": "8.4.0",
|
||||
"version": "8.4.2",
|
||||
"description": "Base driver class for Appium drivers",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -60,13 +60,15 @@
|
||||
"express": "4.17.3",
|
||||
"http-status-codes": "2.2.0",
|
||||
"lodash": "4.17.21",
|
||||
"lru-cache": "7.7.3",
|
||||
"lru-cache": "7.8.1",
|
||||
"method-override": "3.0.0",
|
||||
"morgan": "1.10.0",
|
||||
"serve-favicon": "2.5.0",
|
||||
"source-map-support": "0.5.21",
|
||||
"validate.js": "0.13.1",
|
||||
"ws": "7.5.7"
|
||||
"validate.js": "0.13.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"ws": "8.5.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import _ from 'lodash';
|
||||
import { server, routeConfiguringFunction,
|
||||
DEFAULT_WS_PATHNAME_PREFIX } from '../../../lib';
|
||||
import {
|
||||
server, routeConfiguringFunction, DEFAULT_WS_PATHNAME_PREFIX
|
||||
} from '../../../lib';
|
||||
import { FakeDriver } from '../protocol/fake-driver';
|
||||
import WebSocket from 'ws';
|
||||
import B from 'bluebird';
|
||||
@@ -45,17 +46,22 @@ describe('Websockets (e2e)', function () {
|
||||
_.keys(await baseServer.getWebSocketHandlers()).length.should.eql(1);
|
||||
await new B((resolve, reject) => {
|
||||
const client = new WebSocket(`ws://${TEST_HOST}:${port}${endpoint}`);
|
||||
client.on('connection', (ws, req) => {
|
||||
ws.should.not.be.empty;
|
||||
req.connection.remoteAddress.should.not.be.empty;
|
||||
client.once('connection', (ws, req) => {
|
||||
try {
|
||||
ws.should.not.be.empty;
|
||||
req.connection.remoteAddress.should.not.be.empty;
|
||||
} catch (e) {
|
||||
reject(e);
|
||||
}
|
||||
});
|
||||
client.on('message', (data) => {
|
||||
data.should.eql(WS_DATA);
|
||||
client.once('message', (data) => {
|
||||
const dataStr = _.isString(data) ? data : data.toString();
|
||||
dataStr.should.eql(WS_DATA);
|
||||
resolve();
|
||||
});
|
||||
client.on('error', reject);
|
||||
client.once('error', reject);
|
||||
setTimeout(() => reject(new Error('No websocket messages have been received after the timeout')),
|
||||
timeout);
|
||||
timeout);
|
||||
});
|
||||
|
||||
(await baseServer.removeWebSocketHandler(endpoint)).should.be.true;
|
||||
@@ -64,7 +70,7 @@ describe('Websockets (e2e)', function () {
|
||||
const client = new WebSocket(`ws://${TEST_HOST}:${port}${endpoint}`);
|
||||
client.on('message', (data) =>
|
||||
reject(new Error(`No websocket messages are expected after the handler ` +
|
||||
`has been removed. '${data}' is received instead. `))
|
||||
`has been removed. '${data}' is received instead. `))
|
||||
);
|
||||
client.on('error', resolve);
|
||||
setTimeout(resolve, timeout);
|
||||
|
||||
@@ -3,6 +3,22 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.16.14](https://github.com/appium/appium/compare/@appium/doctor@1.16.13...@appium/doctor@1.16.14) (2022-04-12)
|
||||
|
||||
**Note:** Version bump only for package @appium/doctor
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [1.16.13](https://github.com/appium/appium/compare/@appium/doctor@1.16.12...@appium/doctor@1.16.13) (2022-04-12)
|
||||
|
||||
**Note:** Version bump only for package @appium/doctor
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [1.16.12](https://github.com/appium/appium/compare/@appium/doctor@1.16.11...@appium/doctor@1.16.12) (2022-04-07)
|
||||
|
||||
**Note:** Version bump only for package @appium/doctor
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/doctor",
|
||||
"version": "1.16.12",
|
||||
"version": "1.16.14",
|
||||
"description": "Test environment for fitness to run Appium",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -54,7 +54,7 @@
|
||||
"lodash": "4.17.21",
|
||||
"source-map-support": "0.5.21",
|
||||
"teen_process": "1.16.0",
|
||||
"yargs": "17.4.0"
|
||||
"yargs": "17.4.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12",
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [5.0.4](https://github.com/appium/appium/compare/@appium/eslint-config-appium@5.0.3...@appium/eslint-config-appium@5.0.4) (2022-04-12)
|
||||
|
||||
**Note:** Version bump only for package @appium/eslint-config-appium
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [5.0.3](https://github.com/appium/appium/compare/@appium/eslint-config-appium@5.0.2...@appium/eslint-config-appium@5.0.3) (2022-04-07)
|
||||
|
||||
**Note:** Version bump only for package @appium/eslint-config-appium
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/eslint-config-appium",
|
||||
"version": "5.0.3",
|
||||
"version": "5.0.4",
|
||||
"description": "Shared config for Appium's eslint style",
|
||||
"keywords": [
|
||||
"eslint",
|
||||
|
||||
@@ -3,6 +3,22 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.2.9](https://github.com/appium/appium/compare/@appium/fake-driver@3.2.8...@appium/fake-driver@3.2.9) (2022-04-12)
|
||||
|
||||
**Note:** Version bump only for package @appium/fake-driver
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [3.2.8](https://github.com/appium/appium/compare/@appium/fake-driver@3.2.7...@appium/fake-driver@3.2.8) (2022-04-12)
|
||||
|
||||
**Note:** Version bump only for package @appium/fake-driver
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [3.2.7](https://github.com/appium/appium/compare/@appium/fake-driver@3.2.6...@appium/fake-driver@3.2.7) (2022-04-07)
|
||||
|
||||
**Note:** Version bump only for package @appium/fake-driver
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/fake-driver",
|
||||
"version": "3.2.7",
|
||||
"version": "3.2.9",
|
||||
"description": "Mock driver used internally by Appium for testing. Ignore",
|
||||
"keywords": [
|
||||
"automation",
|
||||
|
||||
@@ -3,6 +3,22 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [6.0.5](https://github.com/appium/appium/compare/@appium/gulp-plugins@6.0.4...@appium/gulp-plugins@6.0.5) (2022-04-12)
|
||||
|
||||
**Note:** Version bump only for package @appium/gulp-plugins
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [6.0.4](https://github.com/appium/appium/compare/@appium/gulp-plugins@6.0.3...@appium/gulp-plugins@6.0.4) (2022-04-12)
|
||||
|
||||
**Note:** Version bump only for package @appium/gulp-plugins
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [6.0.3](https://github.com/appium/appium/compare/@appium/gulp-plugins@6.0.2...@appium/gulp-plugins@6.0.3) (2022-04-07)
|
||||
|
||||
**Note:** Version bump only for package @appium/gulp-plugins
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/gulp-plugins",
|
||||
"version": "6.0.3",
|
||||
"version": "6.0.5",
|
||||
"description": "Custom gulp plugins to be used across all appium modules",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -89,7 +89,7 @@
|
||||
"source-map-support": "0.5.21",
|
||||
"through2": "4.0.2",
|
||||
"vinyl-paths": "3.0.1",
|
||||
"yargs": "17.4.0"
|
||||
"yargs": "17.4.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"gulp": "^4.0.2"
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.0.4](https://github.com/appium/appium/compare/@appium/opencv@1.0.3...@appium/opencv@1.0.4) (2022-04-12)
|
||||
|
||||
**Note:** Version bump only for package @appium/opencv
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [1.0.3](https://github.com/appium/appium/compare/@appium/opencv@1.0.2...@appium/opencv@1.0.3) (2022-04-07)
|
||||
|
||||
**Note:** Version bump only for package @appium/opencv
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/opencv",
|
||||
"version": "1.0.3",
|
||||
"version": "1.0.4",
|
||||
"description": "OpenCV-related helper library",
|
||||
"keywords": [
|
||||
"automation",
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [0.0.2](https://github.com/appium/appium/compare/@appium/schema@0.0.1...@appium/schema@0.0.2) (2022-04-12)
|
||||
|
||||
**Note:** Version bump only for package @appium/schema
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 0.0.1 (2022-04-07)
|
||||
|
||||
**Note:** Version bump only for package @appium/schema
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/schema",
|
||||
"version": "0.0.1",
|
||||
"version": "0.0.2",
|
||||
"description": "Appium Configuration Schema",
|
||||
"keywords": [
|
||||
"automation",
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [2.57.1](https://github.com/appium/appium/compare/@appium/support@2.57.0...@appium/support@2.57.1) (2022-04-12)
|
||||
|
||||
**Note:** Version bump only for package @appium/support
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# [2.57.0](https://github.com/appium/appium/compare/@appium/support@2.56.1...@appium/support@2.57.0) (2022-04-07)
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/support",
|
||||
"version": "2.57.0",
|
||||
"version": "2.57.1",
|
||||
"description": "Support libs used across appium packages",
|
||||
"keywords": [
|
||||
"automation",
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.3.15](https://github.com/appium/appium/compare/@appium/test-support@1.3.14...@appium/test-support@1.3.15) (2022-04-12)
|
||||
|
||||
**Note:** Version bump only for package @appium/test-support
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [1.3.14](https://github.com/appium/appium/compare/@appium/test-support@1.3.13...@appium/test-support@1.3.14) (2022-04-07)
|
||||
|
||||
**Note:** Version bump only for package @appium/test-support
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/test-support",
|
||||
"version": "1.3.14",
|
||||
"version": "1.3.15",
|
||||
"description": "A collection of test utilities used across Appium packages",
|
||||
"keywords": [
|
||||
"automation",
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [0.1.1](https://github.com/appium/appium/compare/@appium/types@0.1.0...@appium/types@0.1.1) (2022-04-12)
|
||||
|
||||
**Note:** Version bump only for package @appium/types
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 0.1.0 (2022-04-07)
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/types",
|
||||
"version": "0.1.0",
|
||||
"version": "0.1.1",
|
||||
"description": "Various type declarations used across Appium",
|
||||
"keywords": [
|
||||
"appium",
|
||||
|
||||
Reference in New Issue
Block a user