@applitools/driver 1.11.27 → 1.11.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/context.js CHANGED
@@ -30,8 +30,7 @@ const specUtils = __importStar(require("./spec-utils"));
30
30
  const snippets = require('@applitools/snippets');
31
31
  class Context {
32
32
  _isReference(reference) {
33
- return (reference instanceof Context ||
34
- utils.types.isInteger(reference) ||
33
+ return (utils.types.isInteger(reference) ||
35
34
  utils.types.isString(reference) ||
36
35
  reference instanceof element_1.Element ||
37
36
  this._spec.isElement(reference) ||
@@ -47,14 +46,12 @@ class Context {
47
46
  this._target = options.context;
48
47
  }
49
48
  else {
50
- throw new TypeError('Context constructor called with argument of unknown type of context!');
49
+ throw new TypeError('Context constructor called with target context of unknown type');
51
50
  }
52
51
  }
53
52
  if (this._isReference(options.reference)) {
54
- if (options.reference instanceof Context)
55
- return options.reference;
56
53
  if (!options.parent) {
57
- throw new TypeError('Cannot construct child context without reference to the parent');
54
+ throw new TypeError('Cannot construct child context without parent context');
58
55
  }
59
56
  this._reference = options.reference;
60
57
  this._parent = options.parent;
@@ -66,7 +63,7 @@ class Context {
66
63
  this._driver = options.driver;
67
64
  }
68
65
  else {
69
- throw new TypeError('Context constructor called with argument of unknown type!');
66
+ throw new TypeError('Context constructor called with context reference of unknown type!');
70
67
  }
71
68
  }
72
69
  get target() {
@@ -250,6 +247,8 @@ class Context {
250
247
  return new Context({ spec: this._spec, parent: this, driver: this.driver, reference, logger: this._logger });
251
248
  }
252
249
  else if (utils.types.has(reference, 'reference')) {
250
+ if (reference.reference instanceof Context)
251
+ return this;
253
252
  const parent = reference.parent ? await this.context(reference.parent) : this;
254
253
  return new Context({
255
254
  spec: this._spec,
package/dist/driver.js CHANGED
@@ -797,9 +797,7 @@ function isDriver(driver, spec) {
797
797
  }
798
798
  exports.isDriver = isDriver;
799
799
  async function makeDriver(options) {
800
- const driver = options.driver instanceof Driver
801
- ? options.driver
802
- : new Driver(options);
800
+ const driver = options.driver instanceof Driver ? options.driver : new Driver(options);
803
801
  await driver.init();
804
802
  await driver.refreshContexts();
805
803
  return driver;
package/dist/element.js CHANGED
@@ -649,9 +649,9 @@ class Element {
649
649
  this._originalOverflow = null;
650
650
  });
651
651
  }
652
- async refresh(freshElement) {
653
- if (this._spec.isElement(freshElement)) {
654
- this._target = freshElement;
652
+ async refresh(freshTarget) {
653
+ if (this._spec.isElement(freshTarget)) {
654
+ this._target = freshTarget;
655
655
  return true;
656
656
  }
657
657
  if (!this._selector)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applitools/driver",
3
- "version": "1.11.27",
3
+ "version": "1.11.29",
4
4
  "description": "Applitools universal framework wrapper",
5
5
  "keywords": [
6
6
  "applitools",
@@ -71,8 +71,8 @@
71
71
  "types"
72
72
  ],
73
73
  "scripts": {
74
- "lint": "npx eslint '**/*.ts'",
75
- "build": "npx tsc --project ./tsconfig.build.json",
74
+ "lint": "node ../../node_modules/.bin/eslint '**/*.ts'",
75
+ "build": "node ../../node_modules/.bin/tsc --project ./tsconfig.build.json",
76
76
  "test": "yarn test:unit",
77
77
  "test:sanity": "yarn test:unit",
78
78
  "test:unit": "mocha --no-timeouts -r ts-node/register ./test/unit/*.spec.ts",
@@ -82,9 +82,9 @@
82
82
  "postversion": "bongo postversion --skip-release-notification"
83
83
  },
84
84
  "dependencies": {
85
- "@applitools/logger": "1.1.44",
85
+ "@applitools/logger": "1.1.45",
86
86
  "@applitools/snippets": "2.4.15",
87
- "@applitools/utils": "1.3.29",
87
+ "@applitools/utils": "1.3.30",
88
88
  "semver": "7.3.7"
89
89
  },
90
90
  "devDependencies": {
@@ -1,27 +1,27 @@
1
1
  import type { Location, Size, Region } from '@applitools/utils';
2
2
  import type { Cookie } from './types';
3
- import { type SpecDriver, type WaitOptions } from './spec-driver';
3
+ import { type SpecType, type SpecDriver, type WaitOptions } from './spec-driver';
4
4
  import { type Driver } from './driver';
5
5
  import { type Selector } from './selector';
6
6
  import { type Logger } from '@applitools/logger';
7
- import { Element } from './element';
8
- export type ContextReference<TDriver, TContext, TElement, TSelector> = Context<TDriver, TContext, TElement, TSelector> | Element<TDriver, TContext, TElement, TSelector> | TElement | Selector<TSelector> | string | number;
9
- export type ContextPlain<TDriver, TContext, TElement, TSelector> = ContextReference<TDriver, TContext, TElement, TSelector> | {
10
- reference: ContextReference<TDriver, TContext, TElement, TSelector>;
11
- scrollingElement?: Element<TDriver, TContext, TElement, TSelector>;
12
- parent?: ContextPlain<TDriver, TContext, TElement, TSelector>;
7
+ import { Element, type ElementReference } from './element';
8
+ export type ContextReference<T extends SpecType> = Element<T> | ElementReference<T> | string | number;
9
+ export type NestedContextReference<T extends SpecType> = {
10
+ reference: ContextReference<T>;
11
+ scrollingElement?: Element<T>;
12
+ parent?: Context<T> | ContextReference<T> | NestedContextReference<T>;
13
13
  };
14
- type ContextOptions<TDriver, TContext, TElement, TSelector> = {
15
- spec: SpecDriver<TDriver, TContext, TElement, TSelector>;
16
- context?: TContext;
17
- driver?: Driver<TDriver, TContext, TElement, TSelector>;
18
- parent?: Context<TDriver, TContext, TElement, TSelector>;
19
- reference?: ContextReference<TDriver, TContext, TElement, TSelector>;
20
- element?: Element<TDriver, TContext, TElement, TSelector>;
21
- scrollingElement?: Element<TDriver, TContext, TElement, TSelector>;
14
+ type ContextOptions<T extends SpecType> = {
15
+ spec: SpecDriver<T>;
16
+ context?: T['context'];
17
+ driver?: Driver<T>;
18
+ parent?: Context<T>;
19
+ reference?: ContextReference<T>;
20
+ element?: Element<T>;
21
+ scrollingElement?: Element<T>;
22
22
  logger: Logger;
23
23
  };
24
- export declare class Context<TDriver, TContext, TElement, TSelector> {
24
+ export declare class Context<T extends SpecType> {
25
25
  private _target?;
26
26
  private _driver?;
27
27
  private _parent?;
@@ -31,13 +31,13 @@ export declare class Context<TDriver, TContext, TElement, TSelector> {
31
31
  private _state;
32
32
  private _logger;
33
33
  private _isReference;
34
- protected readonly _spec: SpecDriver<TDriver, TContext, TElement, TSelector>;
35
- constructor(options: ContextOptions<TDriver, TContext, TElement, TSelector>);
36
- get target(): TContext;
37
- get driver(): Driver<TDriver, TContext, TElement, TSelector>;
38
- get parent(): Context<TDriver, TContext, TElement, TSelector> | null;
39
- get main(): Context<TDriver, TContext, TElement, TSelector>;
40
- get path(): Context<TDriver, TContext, TElement, TSelector>[];
34
+ protected readonly _spec: SpecDriver<T>;
35
+ constructor(options: ContextOptions<T>);
36
+ get target(): T['driver'];
37
+ get driver(): Driver<T>;
38
+ get parent(): Context<T> | null;
39
+ get main(): Context<T>;
40
+ get path(): Context<T>[];
41
41
  get isMain(): boolean;
42
42
  get isCurrent(): boolean;
43
43
  get isInitialized(): boolean;
@@ -45,11 +45,11 @@ export declare class Context<TDriver, TContext, TElement, TSelector> {
45
45
  private _findElements;
46
46
  init(): Promise<this>;
47
47
  focus(): Promise<this>;
48
- equals(context: Context<TDriver, TContext, TElement, TSelector> | Element<TDriver, TContext, TElement, TSelector>): Promise<boolean>;
49
- context(reference: ContextPlain<TDriver, TContext, TElement, TSelector>): Promise<Context<TDriver, TContext, TElement, TSelector>>;
50
- element(elementOrSelector: TElement | Selector<TSelector>): Promise<Element<TDriver, TContext, TElement, TSelector> | null>;
51
- elements(selectorOrElement: Selector<TSelector> | TElement): Promise<Element<TDriver, TContext, TElement, TSelector>[]>;
52
- waitFor(selector: Selector<TSelector>, options?: WaitOptions): Promise<Element<TDriver, TContext, TElement, TSelector> | null>;
48
+ equals(context: Context<T> | Element<T>): Promise<boolean>;
49
+ context(reference: ContextReference<T> | NestedContextReference<T>): Promise<Context<T>>;
50
+ element(elementOrSelector: ElementReference<T>): Promise<Element<T> | null>;
51
+ elements(selectorOrElement: ElementReference<T>): Promise<Element<T>[]>;
52
+ waitFor(selector: Selector<T>, options?: WaitOptions): Promise<Element<T> | null>;
53
53
  execute(script: ((args: any) => any) | string, arg?: any): Promise<any>;
54
54
  executePoll(script: ((arg: any) => any) | string | {
55
55
  main: ((arg: any) => any) | string;
@@ -60,11 +60,11 @@ export declare class Context<TDriver, TContext, TElement, TSelector> {
60
60
  executionTimeout?: number;
61
61
  pollTimeout?: number;
62
62
  }): Promise<any>;
63
- getContextElement(): Promise<Element<TDriver, TContext, TElement, TSelector> | null>;
64
- getScrollingElement(): Promise<Element<TDriver, TContext, TElement, TSelector> | null>;
65
- setScrollingElement(scrollingElement: Element<TDriver, TContext, TElement, TSelector> | TElement | Selector<TSelector> | undefined | null): Promise<void>;
66
- blurElement(element?: Element<TDriver, TContext, TElement, TSelector>): Promise<TElement | null>;
67
- focusElement(element: Element<TDriver, TContext, TElement, TSelector>): Promise<any>;
63
+ getContextElement(): Promise<Element<T> | null>;
64
+ getScrollingElement(): Promise<Element<T> | null>;
65
+ setScrollingElement(scrollingElement: Element<T> | ElementReference<T> | undefined | null): Promise<void>;
66
+ blurElement(element?: Element<T>): Promise<T['element'] | null>;
67
+ focusElement(element: Element<T>): Promise<any>;
68
68
  getRegion(): Promise<Region>;
69
69
  getClientRegion(): Promise<Region>;
70
70
  getScrollingRegion(): Promise<Region>;
@@ -1,7 +1,7 @@
1
- import { type SpecDriver } from '../spec-driver';
2
- export declare function checkSpecDriver<TDriver, TContext, TElement, TSelector>(options: {
3
- spec: SpecDriver<TDriver, TContext, TElement, TSelector>;
4
- driver: TDriver;
1
+ import { SpecType, type SpecDriver } from '../spec-driver';
2
+ export declare function checkSpecDriver<T extends SpecType>(options: {
3
+ spec: SpecDriver<T>;
4
+ driver: T['driver'];
5
5
  }): Promise<({
6
6
  skipped: boolean;
7
7
  test: string;
package/types/driver.d.ts CHANGED
@@ -2,22 +2,22 @@
2
2
  import type { Size, Region } from '@applitools/utils';
3
3
  import type { ScreenOrientation, Cookie } from './types';
4
4
  import { type Selector } from './selector';
5
- import { type SpecDriver, type WaitOptions } from './spec-driver';
5
+ import { type SpecType, type SpecDriver, type WaitOptions } from './spec-driver';
6
6
  import { type Element } from './element';
7
7
  import { Context, type ContextReference } from './context';
8
8
  import { type Logger } from '@applitools/logger';
9
9
  import { HelperIOS } from './helper-ios';
10
10
  import { HelperAndroid } from './helper-android';
11
- type DriverOptions<TDriver, TContext, TElement, TSelector> = {
12
- spec: SpecDriver<TDriver, TContext, TElement, TSelector>;
13
- driver: TDriver;
11
+ type DriverOptions<T extends SpecType> = {
12
+ spec: SpecDriver<T>;
13
+ driver: T['driver'];
14
14
  logger?: Logger;
15
15
  customConfig?: {
16
16
  useCeilForViewportSize?: boolean;
17
17
  disableHelper?: boolean;
18
18
  };
19
19
  };
20
- export declare class Driver<TDriver, TContext, TElement, TSelector> {
20
+ export declare class Driver<T extends SpecType> {
21
21
  private _target;
22
22
  private _mainContext;
23
23
  private _currentContext;
@@ -26,12 +26,12 @@ export declare class Driver<TDriver, TContext, TElement, TSelector> {
26
26
  private _customConfig;
27
27
  private _helper?;
28
28
  private _previousWorld?;
29
- protected readonly _spec: SpecDriver<TDriver, TContext, TElement, TSelector>;
30
- constructor(options: DriverOptions<TDriver, TContext, TElement, TSelector>);
31
- get target(): TDriver;
32
- get currentContext(): Context<TDriver, TContext, TElement, TSelector>;
33
- get mainContext(): Context<TDriver, TContext, TElement, TSelector>;
34
- get helper(): HelperAndroid<TDriver, TContext, TElement, TSelector> | HelperIOS<TDriver, TContext, TElement, TSelector> | null | undefined;
29
+ protected readonly _spec: SpecDriver<T>;
30
+ constructor(options: DriverOptions<T>);
31
+ get target(): T['driver'];
32
+ get currentContext(): Context<T>;
33
+ get mainContext(): Context<T>;
34
+ get helper(): HelperAndroid<T> | HelperIOS<T> | null | undefined;
35
35
  get features(): {
36
36
  shadowSelector?: boolean | undefined;
37
37
  allCookies?: boolean | undefined;
@@ -64,7 +64,7 @@ export declare class Driver<TDriver, TContext, TElement, TSelector> {
64
64
  get isEC(): boolean;
65
65
  get sessionId(): string | undefined;
66
66
  get remoteHostname(): string | undefined;
67
- updateCurrentContext(context: Context<TDriver, TContext, TElement, TSelector>): void;
67
+ updateCurrentContext(context: Context<T>): void;
68
68
  init(): Promise<this>;
69
69
  switchWorld(options?: {
70
70
  id?: string;
@@ -80,16 +80,16 @@ export declare class Driver<TDriver, TContext, TElement, TSelector> {
80
80
  isWebView: boolean;
81
81
  }>;
82
82
  getSessionMetadata(): Promise<any>;
83
- refreshContexts(): Promise<Context<TDriver, TContext, TElement, TSelector>>;
84
- switchTo(context: Context<TDriver, TContext, TElement, TSelector>): Promise<Context<TDriver, TContext, TElement, TSelector>>;
85
- switchToMainContext(): Promise<Context<TDriver, TContext, TElement, TSelector>>;
86
- switchToParentContext(elevation?: number): Promise<Context<TDriver, TContext, TElement, TSelector>>;
87
- switchToChildContext(...references: ContextReference<TDriver, TContext, TElement, TSelector>[]): Promise<Context<TDriver, TContext, TElement, TSelector>>;
83
+ refreshContexts(): Promise<Context<T>>;
84
+ switchTo(context: Context<T>): Promise<Context<T>>;
85
+ switchToMainContext(): Promise<Context<T>>;
86
+ switchToParentContext(elevation?: number): Promise<Context<T>>;
87
+ switchToChildContext(...references: ContextReference<T>[]): Promise<Context<T>>;
88
88
  normalizeRegion(region: Region): Promise<Region>;
89
- getRegionInViewport(context: Context<TDriver, TContext, TElement, TSelector>, region: Region): Promise<Region>;
90
- element(selector: Selector<TSelector>): Promise<Element<TDriver, TContext, TElement, TSelector> | null>;
91
- elements(selector: Selector<TSelector>): Promise<Element<TDriver, TContext, TElement, TSelector>[]>;
92
- waitFor(selector: Selector<TSelector>, options?: WaitOptions): Promise<Element<TDriver, TContext, TElement, TSelector> | null>;
89
+ getRegionInViewport(context: Context<T>, region: Region): Promise<Region>;
90
+ element(selector: Selector<T>): Promise<Element<T> | null>;
91
+ elements(selector: Selector<T>): Promise<Element<T>[]>;
92
+ waitFor(selector: Selector<T>, options?: WaitOptions): Promise<Element<T> | null>;
93
93
  execute(script: ((arg: any) => any) | string, arg?: any): Promise<any>;
94
94
  takeScreenshot(): Promise<Buffer>;
95
95
  getViewportRegion(): Promise<Region>;
@@ -103,14 +103,14 @@ export declare class Driver<TDriver, TContext, TElement, TSelector> {
103
103
  getUrl(): Promise<string>;
104
104
  visit(url: string): Promise<void>;
105
105
  }
106
- export declare function isDriver<TDriver>(driver: any, spec?: SpecDriver<TDriver, any, any, any>): driver is Driver<TDriver, any, any, any> | TDriver;
107
- export declare function makeDriver<TDriver, TContext, TElement, TSelector>(options: {
108
- driver: TDriver | Driver<TDriver, TContext, TElement, TSelector>;
109
- spec?: SpecDriver<TDriver, TContext, TElement, TSelector>;
106
+ export declare function isDriver<T extends SpecType>(driver: any, spec?: SpecDriver<T>): driver is Driver<T> | T['driver'];
107
+ export declare function makeDriver<T extends SpecType>(options: {
108
+ driver: Driver<T> | T['driver'];
109
+ spec?: SpecDriver<T>;
110
110
  logger?: Logger;
111
111
  customConfig?: {
112
112
  useCeilForViewportSize?: boolean;
113
113
  disableHelper?: boolean;
114
114
  };
115
- }): Promise<Driver<TDriver, TContext, TElement, TSelector>>;
115
+ }): Promise<Driver<T>>;
116
116
  export {};
@@ -1,30 +1,30 @@
1
1
  import type { Location, Size, Region } from '@applitools/utils';
2
- import { type SpecDriver } from './spec-driver';
2
+ import { type SpecType, type SpecDriver } from './spec-driver';
3
3
  import { type Context } from './context';
4
4
  import { type Selector } from './selector';
5
5
  import { type Logger } from '@applitools/logger';
6
- export type ElementReference<TElement, TSelector> = TElement | Selector<TSelector>;
7
- type ElementState<TElement> = {
6
+ export type ElementReference<T extends SpecType> = T['element'] | Selector<T>;
7
+ type ElementState = {
8
8
  contentSize?: Size;
9
9
  scrollOffset?: Location;
10
10
  transforms?: any;
11
11
  attributes?: Record<string, string | Error>;
12
12
  touchPadding?: number;
13
- containedElements?: Map<TElement, boolean>;
13
+ containedElements?: Map<any, boolean>;
14
14
  };
15
- type ElementOptions<TDriver, TContext, TElement, TSelector> = {
16
- spec: SpecDriver<TDriver, TContext, TElement, TSelector>;
17
- context?: Context<TDriver, TContext, TElement, TSelector>;
15
+ type ElementOptions<T extends SpecType> = {
16
+ spec: SpecDriver<T>;
17
+ context?: Context<T>;
18
18
  logger: Logger;
19
19
  } & ({
20
- element: TElement;
21
- selector?: Selector<TSelector>;
20
+ element: T['element'];
21
+ selector?: Selector<T>;
22
22
  index?: number;
23
23
  } | {
24
- selector: Selector<TSelector>;
24
+ selector: Selector<T>;
25
25
  index?: number;
26
26
  });
27
- export declare class Element<TDriver, TContext, TElement, TSelector> {
27
+ export declare class Element<T extends SpecType> {
28
28
  private _target?;
29
29
  private _context?;
30
30
  private _selector?;
@@ -33,18 +33,18 @@ export declare class Element<TDriver, TContext, TElement, TSelector> {
33
33
  private _state;
34
34
  private _originalOverflow;
35
35
  private _logger;
36
- protected readonly _spec: SpecDriver<TDriver, TContext, TElement, TSelector>;
37
- constructor(options: ElementOptions<TDriver, TContext, TElement, TSelector>);
38
- get target(): NonNullable<TElement>;
39
- get selector(): Selector<TSelector> | undefined;
36
+ protected readonly _spec: SpecDriver<T>;
37
+ constructor(options: ElementOptions<T>);
38
+ get target(): NonNullable<T["element"]>;
39
+ get selector(): Selector<T> | undefined;
40
40
  get commonSelector(): Selector<never> | null;
41
41
  get index(): number | undefined;
42
- get context(): Context<TDriver, TContext, TElement, TSelector>;
43
- get driver(): import("./driver").Driver<TDriver, TContext, TElement, TSelector>;
42
+ get context(): Context<T>;
43
+ get driver(): import("./driver").Driver<T>;
44
44
  get isRef(): boolean;
45
- equals(element: Element<TDriver, TContext, TElement, TSelector> | TElement): Promise<boolean>;
46
- contains(innerElement: Element<TDriver, TContext, TElement, TSelector> | TElement): Promise<boolean>;
47
- init(context: Context<TDriver, TContext, TElement, TSelector>): Promise<this>;
45
+ equals(element: Element<T> | T['element']): Promise<boolean>;
46
+ contains(innerElement: Element<T> | T['element']): Promise<boolean>;
47
+ init(context: Context<T>): Promise<this>;
48
48
  getRegion(): Promise<Region>;
49
49
  getClientRegion(): Promise<Region>;
50
50
  getContentRegion(options?: {
@@ -64,7 +64,7 @@ export declare class Element<TDriver, TContext, TElement, TSelector> {
64
64
  isPager(): Promise<boolean>;
65
65
  isScrollable(): Promise<boolean>;
66
66
  isRoot(): Promise<boolean>;
67
- getShadowRoot(): Promise<TElement | null>;
67
+ getShadowRoot(): Promise<T['element'] | null>;
68
68
  getTouchPadding(): Promise<number>;
69
69
  getText(): Promise<string>;
70
70
  getAttribute(name: string): Promise<string>;
@@ -78,13 +78,13 @@ export declare class Element<TDriver, TContext, TElement, TSelector> {
78
78
  getInnerOffset(): Promise<Location>;
79
79
  click(): Promise<void>;
80
80
  type(value: string): Promise<void>;
81
- preserveState(): Promise<ElementState<TElement>>;
82
- restoreState(state?: ElementState<TElement>): Promise<void>;
81
+ preserveState(): Promise<ElementState>;
82
+ restoreState(state?: ElementState): Promise<void>;
83
83
  hideScrollbars(): Promise<void>;
84
84
  restoreScrollbars(): Promise<void>;
85
- refresh(freshElement?: TElement): Promise<boolean>;
85
+ refresh(freshTarget?: T['element']): Promise<boolean>;
86
86
  withRefresh<TResult>(operation: (...args: any[]) => TResult): Promise<TResult>;
87
- toJSON(): TElement;
87
+ toJSON(): T['element'];
88
88
  }
89
- export declare function isElementReference<TElement, TSelector>(reference: any, spec?: SpecDriver<unknown, unknown, TElement, TSelector>): reference is ElementReference<TElement, TSelector>;
89
+ export declare function isElementReference<T extends SpecType>(reference: any, spec?: SpecDriver<T>): reference is ElementReference<T>;
90
90
  export {};
@@ -1,14 +1,14 @@
1
1
  import type { Location, Region } from '@applitools/utils';
2
- import { type SpecDriver } from './spec-driver';
2
+ import { type Logger } from '@applitools/logger';
3
+ import { type SpecType, type SpecDriver } from './spec-driver';
3
4
  import { type Driver } from './driver';
4
5
  import { type Element } from './element';
5
- import { type Logger } from '@applitools/logger';
6
- export declare class HelperAndroid<TDriver, TContext, TElement, TSelector> {
7
- static make<TDriver, TContext, TElement, TSelector>(options: {
8
- spec: SpecDriver<TDriver, TContext, TElement, TSelector>;
9
- driver: Driver<TDriver, TContext, TElement, TSelector>;
6
+ export declare class HelperAndroid<T extends SpecType> {
7
+ static make<T extends SpecType>(options: {
8
+ spec: SpecDriver<T>;
9
+ driver: Driver<T>;
10
10
  logger: Logger;
11
- }): Promise<HelperAndroid<TDriver, TContext, TElement, TSelector> | null>;
11
+ }): Promise<HelperAndroid<T> | null>;
12
12
  private readonly _spec;
13
13
  private readonly _input;
14
14
  private readonly _action;
@@ -17,16 +17,16 @@ export declare class HelperAndroid<TDriver, TContext, TElement, TSelector> {
17
17
  private _logger;
18
18
  readonly name: 'android' | 'android-legacy';
19
19
  constructor(options: {
20
- spec: SpecDriver<TDriver, TContext, TElement, TSelector>;
21
- input: Element<TDriver, TContext, TElement, TSelector>;
22
- action: Element<TDriver, TContext, TElement, TSelector> | null;
20
+ spec: SpecDriver<T>;
21
+ input: Element<T>;
22
+ action: Element<T> | null;
23
23
  legacy: boolean;
24
24
  supportAsync: boolean;
25
25
  logger: Logger;
26
26
  });
27
27
  private _getElementId;
28
28
  private _command;
29
- getContentRegion(element: Element<TDriver, TContext, TElement, TSelector>, options?: {
29
+ getContentRegion(element: Element<T>, options?: {
30
30
  lazyLoad?: {
31
31
  scrollLength?: number;
32
32
  waitingTime?: number;
@@ -34,7 +34,7 @@ export declare class HelperAndroid<TDriver, TContext, TElement, TSelector> {
34
34
  };
35
35
  }): Promise<Region | null>;
36
36
  getTouchPadding(): Promise<number | undefined>;
37
- getRegion(element: Element<TDriver, TContext, TElement, TSelector>): Promise<Region | null>;
38
- scrollToTop(element: Element<TDriver, TContext, TElement, TSelector>): Promise<void>;
39
- scrollBy(element: Element<TDriver, TContext, TElement, TSelector>, offset: Location): Promise<void>;
37
+ getRegion(element: Element<T>): Promise<Region | null>;
38
+ scrollToTop(element: Element<T>): Promise<void>;
39
+ scrollBy(element: Element<T>, offset: Location): Promise<void>;
40
40
  }
@@ -1,24 +1,24 @@
1
1
  import type { Region } from '@applitools/utils';
2
- import { type SpecDriver } from './spec-driver';
2
+ import { type Logger } from '@applitools/logger';
3
+ import { type SpecType, type SpecDriver } from './spec-driver';
3
4
  import { type Driver } from './driver';
4
5
  import { type Element } from './element';
5
- import { type Logger } from '@applitools/logger';
6
- export declare class HelperIOS<TDriver, TContext, TElement, TSelector> {
7
- static make<TDriver, TContext, TElement, TSelector>(options: {
8
- spec: SpecDriver<TDriver, TContext, TElement, TSelector>;
9
- driver: Driver<TDriver, TContext, TElement, TSelector>;
6
+ export declare class HelperIOS<T extends SpecType> {
7
+ static make<T extends SpecType>(options: {
8
+ spec: SpecDriver<T>;
9
+ driver: Driver<T>;
10
10
  logger: Logger;
11
- }): Promise<HelperIOS<TDriver, TContext, TElement, TSelector> | null>;
11
+ }): Promise<HelperIOS<T> | null>;
12
12
  private readonly _driver;
13
13
  private readonly _element;
14
14
  private readonly _spec;
15
15
  private _logger;
16
16
  readonly name: 'ios';
17
17
  constructor(options: {
18
- driver: Driver<TDriver, TContext, TElement, TSelector>;
19
- element: Element<TDriver, TContext, TElement, TSelector>;
20
- spec: SpecDriver<TDriver, TContext, TElement, TSelector>;
18
+ driver: Driver<T>;
19
+ element: Element<T>;
20
+ spec: SpecDriver<T>;
21
21
  logger: Logger;
22
22
  });
23
- getContentRegion(element: Element<TDriver, TContext, TElement, TSelector>): Promise<Region | null>;
23
+ getContentRegion(element: Element<T>): Promise<Region | null>;
24
24
  }
@@ -1,9 +1,10 @@
1
- export type Selector<TSelector = never> = TSelector | string | {
2
- selector: TSelector | string;
1
+ import { type SpecType } from './spec-driver';
2
+ export type Selector<T extends SpecType = never> = T['selector'] | string | CommonSelector<T>;
3
+ export type CommonSelector<T extends SpecType = never> = {
4
+ selector: T['selector'] | string;
3
5
  type?: string;
4
- child?: Selector<TSelector>;
5
- shadow?: Selector<TSelector>;
6
- frame?: Selector<TSelector>;
7
- fallback?: Selector<TSelector>;
6
+ child?: T['selector'] | string | CommonSelector<T>;
7
+ shadow?: T['selector'] | string | CommonSelector<T>;
8
+ frame?: T['selector'] | string | CommonSelector<T>;
9
+ fallback?: T['selector'] | string | CommonSelector<T>;
8
10
  };
9
- export type CommonSelector = Selector;
@@ -2,6 +2,73 @@
2
2
  import type { Location, Size, Region } from '@applitools/utils';
3
3
  import type { ScreenOrientation, Cookie } from './types';
4
4
  import { type Selector } from './selector';
5
+ export type SpecType<TDriver = unknown, TContext = unknown, TElement = unknown, TSelector = unknown> = {
6
+ driver: TDriver;
7
+ context: TContext;
8
+ element: TElement;
9
+ selector: TSelector;
10
+ };
11
+ export interface SpecDriver<T extends SpecType> {
12
+ isDriver(driver: any): driver is T['driver'];
13
+ isContext?(context: any): context is T['context'];
14
+ isElement(element: any): element is T['element'];
15
+ isSelector(selector: any): selector is T['selector'];
16
+ transformDriver?(driver: any): T['driver'];
17
+ transformElement?(element: any): T['element'];
18
+ transformSelector?(selector: Selector<T>): T['selector'];
19
+ untransformSelector?(selector: T['selector'] | Selector<T>): Selector | null;
20
+ extractContext?(element: T['driver'] | T['context']): T['context'];
21
+ extractSelector?(element: T['element']): T['selector'];
22
+ isStaleElementError(error: any, selector?: T['selector']): boolean;
23
+ isEqualElements?(context: T['context'], element1: T['element'], element2: T['element']): Promise<boolean>;
24
+ extractHostName?(driver: T['driver']): string | null;
25
+ mainContext(context: T['context']): Promise<T['context']>;
26
+ parentContext?(context: T['context']): Promise<T['context']>;
27
+ childContext(context: T['context'], element: T['element']): Promise<T['context']>;
28
+ executeScript(context: T['context'], script: ((arg?: any) => any) | string, arg?: any): Promise<any>;
29
+ findElement(context: T['context'], selector: T['selector'], parent?: T['element']): Promise<T['element'] | null>;
30
+ findElements(context: T['context'], selector: T['selector'], parent?: T['element']): Promise<T['element'][]>;
31
+ waitForSelector?(context: T['context'], selector: T['selector'], parent?: T['element'], options?: WaitOptions): Promise<T['element'] | null>;
32
+ setElementText?(context: T['context'], element: T['element'], text: string): Promise<void>;
33
+ getElementText?(context: T['context'], element: T['element']): Promise<string>;
34
+ setWindowSize?(driver: T['driver'], size: Size): Promise<void>;
35
+ getWindowSize?(driver: T['driver']): Promise<Size>;
36
+ setViewportSize?(driver: T['driver'], size: Size): Promise<void>;
37
+ getViewportSize?(driver: T['driver']): Promise<Size>;
38
+ getCookies?(driver: T['driver'] | T['context'], context?: boolean): Promise<Cookie[]>;
39
+ getDriverInfo?(driver: T['driver']): Promise<DriverInfo>;
40
+ getCapabilities?(driver: T['driver']): Promise<Record<string, any>>;
41
+ getTitle(driver: T['driver']): Promise<string>;
42
+ getUrl(driver: T['driver']): Promise<string>;
43
+ takeScreenshot(driver: T['driver']): Promise<Buffer | string>;
44
+ click?(context: T['context'], element: T['element'] | T['selector']): Promise<void>;
45
+ visit?(driver: T['driver'], url: string): Promise<void>;
46
+ getOrientation?(driver: T['driver']): Promise<ScreenOrientation>;
47
+ setOrientation?(driver: T['driver'], orientation: ScreenOrientation): Promise<void>;
48
+ getSystemBars?(driver: T['driver']): Promise<{
49
+ statusBar: {
50
+ visible: boolean;
51
+ x: number;
52
+ y: number;
53
+ height: number;
54
+ width: number;
55
+ };
56
+ navigationBar: {
57
+ visible: boolean;
58
+ x: number;
59
+ y: number;
60
+ height: number;
61
+ width: number;
62
+ };
63
+ }>;
64
+ getElementRegion?(driver: T['driver'], element: T['element']): Promise<Region>;
65
+ getElementAttribute?(driver: T['driver'], element: T['element'], attr: string): Promise<string>;
66
+ performAction?(driver: T['driver'], steps: any[]): Promise<void>;
67
+ getCurrentWorld?(driver: T['driver']): Promise<string>;
68
+ getWorlds?(driver: T['driver']): Promise<string[]>;
69
+ switchWorld?(driver: T['driver'], id: string): Promise<void>;
70
+ getSessionMetadata?(driver: T['driver']): Promise<any>;
71
+ }
5
72
  export type DriverInfo = {
6
73
  sessionId?: string;
7
74
  remoteHostname?: string;
@@ -43,64 +110,3 @@ export type WaitOptions = {
43
110
  interval?: number;
44
111
  timeout?: number;
45
112
  };
46
- export interface SpecDriver<TDriver, TContext, TElement, TSelector> {
47
- isDriver(driver: any): driver is TDriver;
48
- isContext?(context: any): context is TContext;
49
- isElement(element: any): element is TElement;
50
- isSelector(selector: any): selector is TSelector;
51
- transformDriver?(driver: any): TDriver;
52
- transformElement?(element: any): TElement;
53
- transformSelector?(selector: Selector<TSelector>): TSelector;
54
- untransformSelector?(selector: TSelector | Selector<TSelector>): Selector | null;
55
- extractContext?(element: TDriver | TContext): TContext;
56
- extractSelector?(element: TElement): TSelector;
57
- isStaleElementError(error: any, selector?: TSelector): boolean;
58
- isEqualElements?(context: TContext, element1: TElement, element2: TElement): Promise<boolean>;
59
- extractHostName?(driver: TDriver): string | null;
60
- mainContext(context: TContext): Promise<TContext>;
61
- parentContext?(context: TContext): Promise<TContext>;
62
- childContext(context: TContext, element: TElement): Promise<TContext>;
63
- executeScript(context: TContext, script: ((arg?: any) => any) | string, arg?: any): Promise<any>;
64
- findElement(context: TContext, selector: TSelector, parent?: TElement): Promise<TElement | null>;
65
- findElements(context: TContext, selector: TSelector, parent?: TElement): Promise<TElement[]>;
66
- waitForSelector?(context: TContext, selector: TSelector, parent?: TElement, options?: WaitOptions): Promise<TElement | null>;
67
- setElementText?(context: TContext, element: TElement, text: string): Promise<void>;
68
- getElementText?(context: TContext, element: TElement): Promise<string>;
69
- setWindowSize?(driver: TDriver, size: Size): Promise<void>;
70
- getWindowSize?(driver: TDriver): Promise<Size>;
71
- setViewportSize?(driver: TDriver, size: Size): Promise<void>;
72
- getViewportSize?(driver: TDriver): Promise<Size>;
73
- getCookies?(driver: TDriver | TContext, context?: boolean): Promise<Cookie[]>;
74
- getDriverInfo?(driver: TDriver): Promise<DriverInfo>;
75
- getCapabilities?(driver: TDriver): Promise<Record<string, any>>;
76
- getTitle(driver: TDriver): Promise<string>;
77
- getUrl(driver: TDriver): Promise<string>;
78
- takeScreenshot(driver: TDriver): Promise<Buffer | string>;
79
- click?(context: TContext, element: TElement | TSelector): Promise<void>;
80
- visit?(driver: TDriver, url: string): Promise<void>;
81
- getOrientation?(driver: TDriver): Promise<ScreenOrientation>;
82
- setOrientation?(driver: TDriver, orientation: ScreenOrientation): Promise<void>;
83
- getSystemBars?(driver: TDriver): Promise<{
84
- statusBar: {
85
- visible: boolean;
86
- x: number;
87
- y: number;
88
- height: number;
89
- width: number;
90
- };
91
- navigationBar: {
92
- visible: boolean;
93
- x: number;
94
- y: number;
95
- height: number;
96
- width: number;
97
- };
98
- }>;
99
- getElementRegion?(driver: TDriver, element: TElement): Promise<Region>;
100
- getElementAttribute?(driver: TDriver, element: TElement, attr: string): Promise<string>;
101
- performAction?(driver: TDriver, steps: any[]): Promise<void>;
102
- getCurrentWorld?(driver: TDriver): Promise<string>;
103
- getWorlds?(driver: TDriver): Promise<string[]>;
104
- switchWorld?(driver: TDriver, id: string): Promise<void>;
105
- getSessionMetadata?(driver: TDriver): Promise<any>;
106
- }
@@ -1,18 +1,16 @@
1
- import { type SpecDriver } from './spec-driver';
2
- import { type Selector } from './selector';
3
- type CommonSelector<TSelector = never> = Exclude<Selector<TSelector>, TSelector | string>;
1
+ import { type SpecType, type SpecDriver } from './spec-driver';
2
+ import { type Selector, type CommonSelector } from './selector';
4
3
  export declare function isSimpleCommonSelector(selector: any): selector is CommonSelector;
5
- export declare function isCommonSelector<TSelector>(spec: Pick<SpecDriver<unknown, unknown, unknown, TSelector>, 'isSelector'>, selector: any): selector is CommonSelector<TSelector>;
6
- export declare function isSelector<TSelector>(spec: Pick<SpecDriver<unknown, unknown, unknown, TSelector>, 'isSelector'>, selector: any): selector is Selector<TSelector>;
7
- export declare function transformSelector<TSelector>(spec: Pick<SpecDriver<unknown, unknown, unknown, TSelector>, 'isSelector' | 'transformSelector'>, selector: Selector<TSelector>, environment?: {
4
+ export declare function isCommonSelector<T extends SpecType>(spec: Pick<SpecDriver<T>, 'isSelector'>, selector: any): selector is CommonSelector<T>;
5
+ export declare function isSelector<T extends SpecType>(spec: Pick<SpecDriver<T>, 'isSelector'>, selector: any): selector is Selector<T>;
6
+ export declare function transformSelector<T extends SpecType>(spec: Pick<SpecDriver<T>, 'isSelector' | 'transformSelector'>, selector: Selector<T>, environment?: {
8
7
  isWeb?: boolean;
9
8
  isNative?: boolean;
10
9
  isIOS?: boolean;
11
10
  isAndroid?: boolean;
12
- }): TSelector;
13
- export declare function splitSelector<TSelector>(spec: Pick<SpecDriver<unknown, unknown, unknown, TSelector>, 'isSelector'>, selector: Selector<TSelector>): {
14
- contextSelectors: Selector<TSelector>[];
15
- elementSelector: Selector<TSelector>;
11
+ }): T['selector'];
12
+ export declare function splitSelector<T extends SpecType>(spec: Pick<SpecDriver<T>, 'isSelector'>, selector: Selector<T>): {
13
+ contextSelectors: Selector<T>[];
14
+ elementSelector: Selector<T>;
16
15
  };
17
- export declare function withFastCache<TSpecDriver extends SpecDriver<unknown, unknown, unknown, unknown>>(spec: TSpecDriver): TSpecDriver;
18
- export {};
16
+ export declare function withFastCache<TSpecDriver extends SpecDriver<SpecType>>(spec: TSpecDriver): TSpecDriver;