@o3r/testing 14.0.0-next.4 → 14.0.0-next.7

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.
@@ -51,7 +51,7 @@ export declare class O3rComponentFixture<V extends O3rElement = O3rElement> impl
51
51
  * @param options.elementConstructor Constructor that will be used to create the Element, defaults to O3rElement
52
52
  * @param options.index index Select the element associated to the index
53
53
  * @param options.shouldThrowIfNotPresent If set to true the function will throw if the element is not present
54
- * @param options.timeout Duration to wait for the element to be present before it throws
54
+ * @param options.timeout Duration to wait for the element
55
55
  */
56
56
  protected getText<T extends O3rElement>(selector: string, options?: {
57
57
  elementConstructor?: O3rElementConstructor<T>;
@@ -66,7 +66,7 @@ export declare class O3rComponentFixture<V extends O3rElement = O3rElement> impl
66
66
  * @param options.elementConstructor Constructor that will be used to create the Element, defaults to O3rElement
67
67
  * @param options.index index Select the element associated to the index
68
68
  * @param options.shouldThrowIfNotPresent If set to true the function will throw if the element is not present
69
- * @param options.timeout Duration to wait for the element to be present before it throws
69
+ * @param options.timeout Duration to wait for the element
70
70
  */
71
71
  protected isVisible<T extends O3rElement>(selector: string, options?: {
72
72
  elementConstructor?: O3rElementConstructor<T> | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"component-fixture.d.ts","sourceRoot":"","sources":["../../../src/core/playwright/component-fixture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component-fixture.d.ts","sourceRoot":"","sources":["../../../src/core/playwright/component-fixture.ts"],"names":[],"mappings":"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"}
@@ -65,13 +65,10 @@ class O3rComponentFixture {
65
65
  * @param options.elementConstructor Constructor that will be used to create the Element, defaults to O3rElement
66
66
  * @param options.index index Select the element associated to the index
67
67
  * @param options.shouldThrowIfNotPresent If set to true the function will throw if the element is not present
68
- * @param options.timeout Duration to wait for the element to be present before it throws
68
+ * @param options.timeout Duration to wait for the element
69
69
  */
70
70
  async getText(selector, options = {}) {
71
71
  const element = await this.queryWithOptions(selector, options.elementConstructor, options);
72
- if (!await element.isVisible()) {
73
- return;
74
- }
75
72
  return await element.getText();
76
73
  }
77
74
  /**
@@ -81,11 +78,23 @@ class O3rComponentFixture {
81
78
  * @param options.elementConstructor Constructor that will be used to create the Element, defaults to O3rElement
82
79
  * @param options.index index Select the element associated to the index
83
80
  * @param options.shouldThrowIfNotPresent If set to true the function will throw if the element is not present
84
- * @param options.timeout Duration to wait for the element to be present before it throws
81
+ * @param options.timeout Duration to wait for the element
85
82
  */
86
83
  async isVisible(selector, options = {}) {
87
84
  const element = await this.queryWithOptions(selector, options.elementConstructor, options);
88
- return await element.isVisible();
85
+ if (options.timeout) {
86
+ try {
87
+ await element.sourceElement.element.waitFor({
88
+ state: 'visible',
89
+ timeout: options.timeout
90
+ });
91
+ return true;
92
+ }
93
+ catch {
94
+ return false;
95
+ }
96
+ }
97
+ return element.isVisible();
89
98
  }
90
99
  /**
91
100
  * Click on the element associated to the given selector if it exists and is visible
@@ -98,20 +107,24 @@ class O3rComponentFixture {
98
107
  */
99
108
  async click(selector, options = {}) {
100
109
  const element = await this.queryWithOptions(selector, options.elementConstructor, options);
101
- if (await element.isVisible()) {
102
- await element.click();
103
- }
110
+ await element.click();
104
111
  }
105
112
  query(selector, returnType) {
106
113
  const elements = this.rootElement.sourceElement.element.locator(selector);
107
114
  const element = elements.first();
108
- const selectedElement = { element: element, page: this.rootElement.sourceElement.page };
115
+ const selectedElement = {
116
+ element: element,
117
+ page: this.rootElement.sourceElement.page
118
+ };
109
119
  return Promise.resolve(new (returnType || element_1.O3rElement)(selectedElement));
110
120
  }
111
121
  queryNth(selector, index, returnType) {
112
122
  const elements = this.rootElement.sourceElement.element.locator(selector);
113
123
  const element = elements.nth(index);
114
- const selectedElement = { element: element, page: this.rootElement.sourceElement.page };
124
+ const selectedElement = {
125
+ element: element,
126
+ page: this.rootElement.sourceElement.page
127
+ };
115
128
  return Promise.resolve(new (returnType || element_1.O3rElement)(selectedElement));
116
129
  }
117
130
  async queryAll(selector, returnType, groupType, timeout = 5000) {
@@ -123,7 +136,10 @@ class O3rComponentFixture {
123
136
  const pElementsCount = await pElements.count();
124
137
  const elements = [];
125
138
  for (let i = 0; i < pElementsCount; i++) {
126
- const selectedElement = { element: pElements.nth(i), page: this.rootElement.sourceElement.page };
139
+ const selectedElement = {
140
+ element: pElements.nth(i),
141
+ page: this.rootElement.sourceElement.page
142
+ };
127
143
  elements.push(returnType ? new returnType(selectedElement) : new element_1.O3rElement(selectedElement));
128
144
  }
129
145
  if (groupType) {
@@ -1 +1 @@
1
- {"version":3,"file":"component-fixture.js","sourceRoot":"","sources":["../../../src/core/playwright/component-fixture.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n FixtureUsageError,\n} from '../../errors/index';\nimport type {\n ComponentFixtureProfile,\n} from '../component-fixture';\nimport {\n withTimeout,\n} from '../helpers';\nimport {\n O3rElement,\n O3rElementConstructor,\n PlaywrightSourceElement,\n} from './element';\nimport {\n O3rGroup,\n O3rGroupConstructor,\n} from './group';\n\nexport type { ComponentFixtureProfile, Constructable, FixtureWithCustom } from '../component-fixture';\n\n/**\n * Implementation of the fixture dedicated to Playwright, hence using the webdriver to interact with the dom.\n */\nexport class O3rComponentFixture<V extends O3rElement = O3rElement> implements ComponentFixtureProfile<V> {\n /**\n * DOM element linked to the fixture.\n */\n protected rootElement: V;\n\n /**\n * Root element of this fixture.\n * All further queries will be applied to the element tree if any, otherwise they will be applied to the whole DOM.\n * @param rootElement\n */\n constructor(rootElement: V) {\n this.rootElement = rootElement;\n }\n\n /**\n * Throws an exception if the element is undefined.\n * Otherwise returns the element.\n * @param element ElementProfile to test\n * @param timeout specific timeout that will throw when reach\n */\n protected async throwOnUndefinedElement<T extends O3rElement>(element?: T, timeout?: number): Promise<T> {\n if (!element) {\n throw new Error('Element not found in ' + this.constructor.name);\n }\n await element.sourceElement.element.first().waitFor({ state: 'attached', timeout });\n return element;\n }\n\n /**\n * Throws an exception if the element is undefined.\n * Otherwise returns the element.\n * @param element ElementProfile to test\n * @param timeout specific timeout that will throw when reach\n */\n protected throwOnUndefined<T extends O3rElement>(element: Promise<T>, timeout?: number): Promise<T> {\n return withTimeout(\n (async () => {\n const el = await element;\n await el.sourceElement.element.first().waitFor({ state: 'attached' });\n return el;\n })(),\n timeout);\n }\n\n /**\n * Get the element associated to the selector if present\n * @param selector Selector to access the element\n * @param elementConstructor Constructor that will be used to create the Element, defaults to O3rElement\n * @param options Options supported\n * @param options.index index Select the element associated to the index\n * @param options.shouldThrowIfNotPresent If set to true the function will throw if the element is not present\n * @param options.timeout Duration to wait for the element to be present before it throws\n */\n protected async queryWithOptions(\n selector: string,\n elementConstructor?: O3rElementConstructor<O3rElement>,\n options: {\n index?: number;\n shouldThrowIfNotPresent?: boolean;\n timeout?: number;\n } = {}\n ): Promise<O3rElement> {\n const element: O3rElement = await (options.index === undefined ? this.query(selector, elementConstructor as any) : this.queryNth(selector, options.index, elementConstructor as any));\n if (options.shouldThrowIfNotPresent) {\n return this.throwOnUndefinedElement<O3rElement>(element, options.timeout);\n }\n return element;\n }\n\n /**\n * Get text from the element associated to the given selector, or undefined if the element is not found or not visible\n * @param selector Selector to access the element\n * @param options Options supported\n * @param options.elementConstructor Constructor that will be used to create the Element, defaults to O3rElement\n * @param options.index index Select the element associated to the index\n * @param options.shouldThrowIfNotPresent If set to true the function will throw if the element is not present\n * @param options.timeout Duration to wait for the element to be present before it throws\n */\n protected async getText<T extends O3rElement>(selector: string, options: {\n elementConstructor?: O3rElementConstructor<T>;\n index?: number;\n shouldThrowIfNotPresent?: boolean;\n timeout?: number;\n } = {}): Promise<string | undefined> {\n const element = await this.queryWithOptions(selector, options.elementConstructor, options);\n if (!await element.isVisible()) {\n return;\n }\n return await element.getText();\n }\n\n /**\n * Check if the element associated to the given selector is visible\n * @param selector Selector to access the element\n * @param options Options supported\n * @param options.elementConstructor Constructor that will be used to create the Element, defaults to O3rElement\n * @param options.index index Select the element associated to the index\n * @param options.shouldThrowIfNotPresent If set to true the function will throw if the element is not present\n * @param options.timeout Duration to wait for the element to be present before it throws\n */\n protected async isVisible<T extends O3rElement>(selector: string, options: {\n elementConstructor?: O3rElementConstructor<T> | undefined;\n index?: number;\n shouldThrowIfNotPresent?: boolean;\n timeout?: number;\n } = {}): Promise<boolean> {\n const element = await this.queryWithOptions(selector, options.elementConstructor, options);\n return await element.isVisible();\n }\n\n /**\n * Click on the element associated to the given selector if it exists and is visible\n * @param selector Selector to access the element\n * @param options Options supported\n * @param options.elementConstructor Constructor that will be used to create the Element, defaults to O3rElement\n * @param options.index index Select the element associated to the index\n * @param options.shouldThrowIfNotPresent If set to true the function will throw if the element is not present\n * @param options.timeout Duration to wait for the element to be present before it throws\n */\n protected async click<T extends O3rElement>(selector: string, options: {\n elementConstructor?: O3rElementConstructor<T> | undefined;\n index?: number;\n shouldThrowIfNotPresent?: boolean;\n timeout?: number;\n } = {}): Promise<void> {\n const element = await this.queryWithOptions(selector, options.elementConstructor, options);\n if (await element.isVisible()) {\n await element.click();\n }\n }\n\n /** @inheritdoc */\n public query(selector: string, returnType?: undefined): Promise<O3rElement>;\n public query<T extends O3rElement>(selector: string, returnType: O3rElementConstructor<T>): Promise<T>;\n public query<T extends O3rElement>(selector: string, returnType: O3rElementConstructor<T> | undefined): Promise<T | O3rElement> {\n const elements = this.rootElement.sourceElement.element.locator(selector);\n const element = elements.first();\n const selectedElement = { element: element, page: this.rootElement.sourceElement.page } as const satisfies PlaywrightSourceElement;\n return Promise.resolve(new (returnType || O3rElement)(selectedElement));\n }\n\n /** @inheritdoc */\n public queryNth(selector: string, index: number, returnType?: undefined): Promise<O3rElement>;\n public queryNth<T extends O3rElement>(selector: string, index: number, returnType: O3rElementConstructor<T>): Promise<T>;\n public queryNth<T extends O3rElement>(selector: string, index: number, returnType: O3rElementConstructor<T> | undefined): Promise<T | O3rElement> {\n const elements = this.rootElement.sourceElement.element.locator(selector);\n const element = elements.nth(index);\n const selectedElement = { element: element, page: this.rootElement.sourceElement.page } as const satisfies PlaywrightSourceElement;\n return Promise.resolve(new (returnType || O3rElement)(selectedElement));\n }\n\n /** @inheritdoc */\n public async queryAll(_selector: string, _returnType?: undefined, groupType?: undefined, timeout?: number): Promise<O3rElement[]>;\n public async queryAll<T extends O3rElement>(selector: string, returnType: O3rElementConstructor<T>, groupType?: undefined, timeout?: number): Promise<T[]>;\n public async queryAll<T extends O3rElement, K extends O3rGroup<T>>(selector: string, returnType: O3rElementConstructor<T>, groupType: O3rGroupConstructor<K, T>, timeout?: number): Promise<K>;\n public async queryAll<T extends O3rElement, K extends O3rGroup<T>>(\n selector: string,\n returnType: O3rElementConstructor<T> | undefined,\n groupType: O3rGroupConstructor<K, T> | undefined,\n timeout = 5000\n ): Promise<(T | O3rElement)[] | K> {\n try {\n const sourceElement = this.rootElement.sourceElement.element;\n const pElements = sourceElement.locator(selector);\n // Mandatory because count is not reliable if we don't wait for the list to be attached\n await pElements.first().waitFor({ state: 'attached', timeout });\n const pElementsCount = await pElements.count();\n const elements = [];\n for (let i = 0; i < pElementsCount; i++) {\n const selectedElement: PlaywrightSourceElement = { element: pElements.nth(i), page: this.rootElement.sourceElement.page };\n elements.push(returnType ? new returnType(selectedElement) : new O3rElement(selectedElement));\n }\n if (groupType) {\n const group = new groupType(elements as T[]);\n const isValid = await group.isValidGroup();\n\n if (!isValid) {\n throw new FixtureUsageError('invalid group of items');\n }\n return group;\n }\n\n return elements;\n } catch (err) {\n // eslint-disable-next-line no-console -- no other logger available\n console.warn(`Failed to query all ${selector}`, err);\n return Promise.resolve([]);\n }\n }\n\n /** @inheritdoc */\n public getElement() {\n return this.rootElement;\n }\n\n /** @inheritdoc */\n public getSubComponents(): Promise<{ [componentName: string]: ComponentFixtureProfile[] }> {\n return Promise.resolve({ block: [this] });\n }\n\n /** @inheritDoc */\n public queryNotPresent(selector: string): Promise<boolean> {\n const element = this.rootElement.sourceElement.element.locator(selector).first();\n return element.isHidden();\n }\n}\n"]}
1
+ {"version":3,"file":"component-fixture.js","sourceRoot":"","sources":["../../../src/core/playwright/component-fixture.ts"],"names":[],"mappings":";;;AAAA,8CAE4B;AAI5B,wCAEoB;AACpB,uCAImB;AAQnB;;GAEG;AACH,MAAa,mBAAmB;IAM9B;;;;OAIG;IACH,YAAY,WAAc;QACxB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,uBAAuB,CAAuB,OAAW,EAAE,OAAgB;QACzF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QACpF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACO,gBAAgB,CAAuB,OAAmB,EAAE,OAAgB;QACpF,OAAO,IAAA,qBAAW,EAChB,CAAC,KAAK,IAAI,EAAE;YACV,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC;YACzB,MAAM,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;YACtE,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,EAAE,EACJ,OAAO,CAAC,CAAC;IACb,CAAC;IAED;;;;;;;;OAQG;IACO,KAAK,CAAC,gBAAgB,CAC9B,QAAgB,EAChB,kBAAsD,EACtD,UAII,EAAE;QAEN,MAAM,OAAO,GAAe,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,kBAAyB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,kBAAyB,CAAC,CAAC,CAAC;QACtL,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,uBAAuB,CAAa,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;;OAQG;IACO,KAAK,CAAC,OAAO,CAAuB,QAAgB,EAAE,UAK5D,EAAE;QACJ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAC3F,OAAO,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAED;;;;;;;;OAQG;IACO,KAAK,CAAC,SAAS,CAAuB,QAAgB,EAAE,UAK9D,EAAE;QACJ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAC3F,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC;oBAC1C,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE,OAAO,CAAC,OAAO;iBACzB,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC;IAC7B,CAAC;IAED;;;;;;;;OAQG;IACO,KAAK,CAAC,KAAK,CAAuB,QAAgB,EAAE,UAK1D,EAAE;QACJ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAC3F,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAKM,KAAK,CAAuB,QAAgB,EAAE,UAAgD;QACnG,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,eAAe,GAAG;YACtB,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI;SACC,CAAC;QAC7C,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,oBAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;IAC1E,CAAC;IAKM,QAAQ,CAAuB,QAAgB,EAAE,KAAa,EAAE,UAAgD;QACrH,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,eAAe,GAAG;YACtB,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI;SACC,CAAC;QAC7C,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,oBAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;IAC1E,CAAC;IAMM,KAAK,CAAC,QAAQ,CACnB,QAAgB,EAChB,UAAgD,EAChD,SAAgD,EAChD,OAAO,GAAG,IAAI;QAEd,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC;YAC7D,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAClD,uFAAuF;YACvF,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YAChE,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,EAAE,CAAC;YACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,MAAM,eAAe,GAA4B;oBAC/C,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;oBACzB,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI;iBAC1C,CAAC;gBACF,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,oBAAU,CAAC,eAAe,CAAC,CAAC,CAAC;YAChG,CAAC;YACD,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,QAAe,CAAC,CAAC;gBAC7C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;gBAE3C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,yBAAiB,CAAC,wBAAwB,CAAC,CAAC;gBACxD,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mEAAmE;YACnE,OAAO,CAAC,IAAI,CAAC,uBAAuB,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;YACrD,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,kBAAkB;IACX,UAAU;QACf,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,kBAAkB;IACX,gBAAgB;QACrB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,kBAAkB;IACX,eAAe,CAAC,QAAgB;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;QACjF,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;CACF;AA7ND,kDA6NC","sourcesContent":["import {\n FixtureUsageError,\n} from '../../errors/index';\nimport type {\n ComponentFixtureProfile,\n} from '../component-fixture';\nimport {\n withTimeout,\n} from '../helpers';\nimport {\n O3rElement,\n O3rElementConstructor,\n PlaywrightSourceElement,\n} from './element';\nimport {\n O3rGroup,\n O3rGroupConstructor,\n} from './group';\n\nexport type { ComponentFixtureProfile, Constructable, FixtureWithCustom } from '../component-fixture';\n\n/**\n * Implementation of the fixture dedicated to Playwright, hence using the webdriver to interact with the dom.\n */\nexport class O3rComponentFixture<V extends O3rElement = O3rElement> implements ComponentFixtureProfile<V> {\n /**\n * DOM element linked to the fixture.\n */\n protected rootElement: V;\n\n /**\n * Root element of this fixture.\n * All further queries will be applied to the element tree if any, otherwise they will be applied to the whole DOM.\n * @param rootElement\n */\n constructor(rootElement: V) {\n this.rootElement = rootElement;\n }\n\n /**\n * Throws an exception if the element is undefined.\n * Otherwise returns the element.\n * @param element ElementProfile to test\n * @param timeout specific timeout that will throw when reach\n */\n protected async throwOnUndefinedElement<T extends O3rElement>(element?: T, timeout?: number): Promise<T> {\n if (!element) {\n throw new Error('Element not found in ' + this.constructor.name);\n }\n await element.sourceElement.element.first().waitFor({ state: 'attached', timeout });\n return element;\n }\n\n /**\n * Throws an exception if the element is undefined.\n * Otherwise returns the element.\n * @param element ElementProfile to test\n * @param timeout specific timeout that will throw when reach\n */\n protected throwOnUndefined<T extends O3rElement>(element: Promise<T>, timeout?: number): Promise<T> {\n return withTimeout(\n (async () => {\n const el = await element;\n await el.sourceElement.element.first().waitFor({ state: 'attached' });\n return el;\n })(),\n timeout);\n }\n\n /**\n * Get the element associated to the selector if present\n * @param selector Selector to access the element\n * @param elementConstructor Constructor that will be used to create the Element, defaults to O3rElement\n * @param options Options supported\n * @param options.index index Select the element associated to the index\n * @param options.shouldThrowIfNotPresent If set to true the function will throw if the element is not present\n * @param options.timeout Duration to wait for the element to be present before it throws\n */\n protected async queryWithOptions(\n selector: string,\n elementConstructor?: O3rElementConstructor<O3rElement>,\n options: {\n index?: number;\n shouldThrowIfNotPresent?: boolean;\n timeout?: number;\n } = {}\n ): Promise<O3rElement> {\n const element: O3rElement = await (options.index === undefined ? this.query(selector, elementConstructor as any) : this.queryNth(selector, options.index, elementConstructor as any));\n if (options.shouldThrowIfNotPresent) {\n return this.throwOnUndefinedElement<O3rElement>(element, options.timeout);\n }\n return element;\n }\n\n /**\n * Get text from the element associated to the given selector, or undefined if the element is not found or not visible\n * @param selector Selector to access the element\n * @param options Options supported\n * @param options.elementConstructor Constructor that will be used to create the Element, defaults to O3rElement\n * @param options.index index Select the element associated to the index\n * @param options.shouldThrowIfNotPresent If set to true the function will throw if the element is not present\n * @param options.timeout Duration to wait for the element\n */\n protected async getText<T extends O3rElement>(selector: string, options: {\n elementConstructor?: O3rElementConstructor<T>;\n index?: number;\n shouldThrowIfNotPresent?: boolean;\n timeout?: number;\n } = {}): Promise<string | undefined> {\n const element = await this.queryWithOptions(selector, options.elementConstructor, options);\n return await element.getText();\n }\n\n /**\n * Check if the element associated to the given selector is visible\n * @param selector Selector to access the element\n * @param options Options supported\n * @param options.elementConstructor Constructor that will be used to create the Element, defaults to O3rElement\n * @param options.index index Select the element associated to the index\n * @param options.shouldThrowIfNotPresent If set to true the function will throw if the element is not present\n * @param options.timeout Duration to wait for the element\n */\n protected async isVisible<T extends O3rElement>(selector: string, options: {\n elementConstructor?: O3rElementConstructor<T> | undefined;\n index?: number;\n shouldThrowIfNotPresent?: boolean;\n timeout?: number;\n } = {}): Promise<boolean> {\n const element = await this.queryWithOptions(selector, options.elementConstructor, options);\n if (options.timeout) {\n try {\n await element.sourceElement.element.waitFor({\n state: 'visible',\n timeout: options.timeout\n });\n return true;\n } catch {\n return false;\n }\n }\n return element.isVisible();\n }\n\n /**\n * Click on the element associated to the given selector if it exists and is visible\n * @param selector Selector to access the element\n * @param options Options supported\n * @param options.elementConstructor Constructor that will be used to create the Element, defaults to O3rElement\n * @param options.index index Select the element associated to the index\n * @param options.shouldThrowIfNotPresent If set to true the function will throw if the element is not present\n * @param options.timeout Duration to wait for the element to be present before it throws\n */\n protected async click<T extends O3rElement>(selector: string, options: {\n elementConstructor?: O3rElementConstructor<T> | undefined;\n index?: number;\n shouldThrowIfNotPresent?: boolean;\n timeout?: number;\n } = {}): Promise<void> {\n const element = await this.queryWithOptions(selector, options.elementConstructor, options);\n await element.click();\n }\n\n /** @inheritdoc */\n public query(selector: string, returnType?: undefined): Promise<O3rElement>;\n public query<T extends O3rElement>(selector: string, returnType: O3rElementConstructor<T>): Promise<T>;\n public query<T extends O3rElement>(selector: string, returnType: O3rElementConstructor<T> | undefined): Promise<T | O3rElement> {\n const elements = this.rootElement.sourceElement.element.locator(selector);\n const element = elements.first();\n const selectedElement = {\n element: element,\n page: this.rootElement.sourceElement.page\n } as const satisfies PlaywrightSourceElement;\n return Promise.resolve(new (returnType || O3rElement)(selectedElement));\n }\n\n /** @inheritdoc */\n public queryNth(selector: string, index: number, returnType?: undefined): Promise<O3rElement>;\n public queryNth<T extends O3rElement>(selector: string, index: number, returnType: O3rElementConstructor<T>): Promise<T>;\n public queryNth<T extends O3rElement>(selector: string, index: number, returnType: O3rElementConstructor<T> | undefined): Promise<T | O3rElement> {\n const elements = this.rootElement.sourceElement.element.locator(selector);\n const element = elements.nth(index);\n const selectedElement = {\n element: element,\n page: this.rootElement.sourceElement.page\n } as const satisfies PlaywrightSourceElement;\n return Promise.resolve(new (returnType || O3rElement)(selectedElement));\n }\n\n /** @inheritdoc */\n public async queryAll(_selector: string, _returnType?: undefined, groupType?: undefined, timeout?: number): Promise<O3rElement[]>;\n public async queryAll<T extends O3rElement>(selector: string, returnType: O3rElementConstructor<T>, groupType?: undefined, timeout?: number): Promise<T[]>;\n public async queryAll<T extends O3rElement, K extends O3rGroup<T>>(selector: string, returnType: O3rElementConstructor<T>, groupType: O3rGroupConstructor<K, T>, timeout?: number): Promise<K>;\n public async queryAll<T extends O3rElement, K extends O3rGroup<T>>(\n selector: string,\n returnType: O3rElementConstructor<T> | undefined,\n groupType: O3rGroupConstructor<K, T> | undefined,\n timeout = 5000\n ): Promise<(T | O3rElement)[] | K> {\n try {\n const sourceElement = this.rootElement.sourceElement.element;\n const pElements = sourceElement.locator(selector);\n // Mandatory because count is not reliable if we don't wait for the list to be attached\n await pElements.first().waitFor({ state: 'attached', timeout });\n const pElementsCount = await pElements.count();\n const elements = [];\n for (let i = 0; i < pElementsCount; i++) {\n const selectedElement: PlaywrightSourceElement = {\n element: pElements.nth(i),\n page: this.rootElement.sourceElement.page\n };\n elements.push(returnType ? new returnType(selectedElement) : new O3rElement(selectedElement));\n }\n if (groupType) {\n const group = new groupType(elements as T[]);\n const isValid = await group.isValidGroup();\n\n if (!isValid) {\n throw new FixtureUsageError('invalid group of items');\n }\n return group;\n }\n\n return elements;\n } catch (err) {\n // eslint-disable-next-line no-console -- no other logger available\n console.warn(`Failed to query all ${selector}`, err);\n return Promise.resolve([]);\n }\n }\n\n /** @inheritdoc */\n public getElement() {\n return this.rootElement;\n }\n\n /** @inheritdoc */\n public getSubComponents(): Promise<{ [componentName: string]: ComponentFixtureProfile[] }> {\n return Promise.resolve({ block: [this] });\n }\n\n /** @inheritDoc */\n public queryNotPresent(selector: string): Promise<boolean> {\n const element = this.rootElement.sourceElement.element.locator(selector).first();\n return element.isHidden();\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@o3r/testing",
3
- "version": "14.0.0-next.4",
3
+ "version": "14.0.0-next.7",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -99,10 +99,10 @@
99
99
  "@material/slider": "^14.0.0",
100
100
  "@ngrx/store": "^20.0.0",
101
101
  "@ngx-translate/core": "^15.0.0 || ~16.0.4",
102
- "@o3r/core": "~14.0.0-next.4",
103
- "@o3r/eslint-config": "~14.0.0-next.4",
104
- "@o3r/localization": "~14.0.0-next.4",
105
- "@o3r/schematics": "~14.0.0-next.4",
102
+ "@o3r/core": "~14.0.0-next.7",
103
+ "@o3r/eslint-config": "~14.0.0-next.7",
104
+ "@o3r/localization": "~14.0.0-next.7",
105
+ "@o3r/schematics": "~14.0.0-next.7",
106
106
  "@playwright/test": "^1.49.0",
107
107
  "@schematics/angular": "^20.0.0",
108
108
  "eslint": "~9.39.0",
@@ -170,24 +170,24 @@
170
170
  }
171
171
  },
172
172
  "dependencies": {
173
- "@o3r/schematics": "~14.0.0-next.4",
173
+ "@o3r/schematics": "~14.0.0-next.7",
174
174
  "esbuild": "~0.25.1",
175
175
  "module-from-string": "^3.2.0",
176
176
  "tslib": "^2.6.2"
177
177
  },
178
178
  "devDependencies": {
179
179
  "@amadeus-it-group/kassette": "^1.7.0",
180
- "@angular-devkit/build-angular": "~20.3.11",
181
- "@angular-devkit/core": "~20.3.11",
182
- "@angular-devkit/schematics": "~20.3.11",
183
- "@angular/cli": "~20.3.11",
184
- "@angular/common": "~20.3.13",
185
- "@angular/compiler": "~20.3.13",
186
- "@angular/compiler-cli": "~20.3.13",
187
- "@angular/core": "~20.3.13",
188
- "@angular/forms": "~20.3.13",
189
- "@angular/platform-browser": "~20.3.13",
190
- "@angular/platform-browser-dynamic": "~20.3.13",
180
+ "@angular-devkit/build-angular": "~20.3.13",
181
+ "@angular-devkit/core": "~20.3.13",
182
+ "@angular-devkit/schematics": "~20.3.13",
183
+ "@angular/cli": "~20.3.13",
184
+ "@angular/common": "~20.3.15",
185
+ "@angular/compiler": "~20.3.15",
186
+ "@angular/compiler-cli": "~20.3.15",
187
+ "@angular/core": "~20.3.15",
188
+ "@angular/forms": "~20.3.15",
189
+ "@angular/platform-browser": "~20.3.15",
190
+ "@angular/platform-browser-dynamic": "~20.3.15",
191
191
  "@babel/core": "~7.28.0",
192
192
  "@babel/preset-typescript": "~7.28.0",
193
193
  "@compodoc/compodoc": "^1.1.32",
@@ -197,17 +197,17 @@
197
197
  "@ngx-translate/core": "~16.0.4",
198
198
  "@nx/eslint-plugin": "~21.6.0",
199
199
  "@nx/jest": "~21.6.0",
200
- "@o3r/build-helpers": "~14.0.0-next.4",
201
- "@o3r/core": "~14.0.0-next.4",
202
- "@o3r/eslint-plugin": "~14.0.0-next.4",
203
- "@o3r/localization": "~14.0.0-next.4",
204
- "@o3r/test-helpers": "~14.0.0-next.4",
200
+ "@o3r/build-helpers": "~14.0.0-next.7",
201
+ "@o3r/core": "~14.0.0-next.7",
202
+ "@o3r/eslint-plugin": "~14.0.0-next.7",
203
+ "@o3r/localization": "~14.0.0-next.7",
204
+ "@o3r/test-helpers": "~14.0.0-next.7",
205
205
  "@playwright/test": "~1.57.0",
206
- "@schematics/angular": "~20.3.11",
206
+ "@schematics/angular": "~20.3.13",
207
207
  "@stylistic/eslint-plugin": "~5.6.0",
208
208
  "@swc/helpers": "~0.5.17",
209
209
  "@types/jest": "~30.0.0",
210
- "@types/node": "~22.18.0",
210
+ "@types/node": "~24.10.0",
211
211
  "@types/pixelmatch": "^5.2.3",
212
212
  "@types/pngjs": "^6.0.0",
213
213
  "@typescript-eslint/parser": "~8.47.0",
@@ -1,7 +1,7 @@
1
1
  import { Rule } from '@angular-devkit/schematics';
2
2
  /**
3
3
  * Add fixture configuration
4
- * @param options @see RuleFactory.options
4
+ * @param options {@link RuleFactory.options}
5
5
  * @param options.projectName
6
6
  * @param options.testingFramework
7
7
  */
@@ -6,7 +6,7 @@ const schematics_2 = require("@o3r/schematics");
6
6
  const ts = require("typescript");
7
7
  /**
8
8
  * Add fixture configuration
9
- * @param options @see RuleFactory.options
9
+ * @param options {@link RuleFactory.options}
10
10
  * @param options.projectName
11
11
  * @param options.testingFramework
12
12
  */
@@ -6,7 +6,7 @@ import { NgAddPackageOptions } from '@o3r/schematics';
6
6
  export declare const playwrightDependencies: string[];
7
7
  /**
8
8
  * Add Playwright to Otter application
9
- * @param options @see RuleFactory.options
9
+ * @param options {@link RuleFactory.options}
10
10
  */
11
11
  export declare function updatePlaywright(options: NgAddPackageOptions): Rule;
12
12
  //# sourceMappingURL=index.d.ts.map
@@ -16,7 +16,7 @@ exports.playwrightDependencies = [
16
16
  ];
17
17
  /**
18
18
  * Add Playwright to Otter application
19
- * @param options @see RuleFactory.options
19
+ * @param options {@link RuleFactory.options}
20
20
  */
21
21
  function updatePlaywright(options) {
22
22
  return (tree, context) => {