@sridharkikkeri/playwright-common 1.0.22 → 1.0.24
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/api-docs/assets/hierarchy.js +1 -0
- package/api-docs/assets/highlight.css +71 -0
- package/api-docs/assets/icons.js +18 -0
- package/api-docs/assets/icons.svg +1 -0
- package/api-docs/assets/main.js +60 -0
- package/api-docs/assets/navigation.js +1 -0
- package/api-docs/assets/search.js +1 -0
- package/api-docs/assets/style.css +1633 -0
- package/api-docs/classes/ActionOrchestrator.html +9 -0
- package/api-docs/classes/AllureUtil.html +12 -0
- package/api-docs/classes/ApiClient.html +28 -0
- package/api-docs/classes/BasePage.html +14 -0
- package/api-docs/classes/ConfigManager.html +6 -0
- package/api-docs/classes/CookieAuth.html +6 -0
- package/api-docs/classes/ElementProfileStore.html +11 -0
- package/api-docs/classes/ElementWrapper.html +35 -0
- package/api-docs/classes/ErrorUtils.html +7 -0
- package/api-docs/classes/Localization.html +8 -0
- package/api-docs/classes/LocatorHealing.html +14 -0
- package/api-docs/classes/Logger.html +7 -0
- package/api-docs/classes/LoginPage.html +19 -0
- package/api-docs/classes/OAuth2Auth.html +5 -0
- package/api-docs/hierarchy.html +1 -0
- package/api-docs/index.html +85 -0
- package/api-docs/interfaces/ApiRequestOptions.html +14 -0
- package/api-docs/interfaces/ApiResponse.html +13 -0
- package/api-docs/interfaces/AuthStrategy.html +4 -0
- package/api-docs/interfaces/ElementProfile.html +7 -0
- package/api-docs/interfaces/FileAttachment.html +8 -0
- package/api-docs/interfaces/FrameworkConfig.html +4 -0
- package/api-docs/modules.html +1 -0
- package/api-docs/types/FrameworkFixtures.html +12 -0
- package/api-docs/types/HttpMethod.html +2 -0
- package/api-docs/variables/test.html +2 -0
- package/create-healthedge-tests.js +46 -24
- package/package.json +7 -2
- package/HEALING_CACHE_STRATEGY.md +0 -222
- package/VISUAL_TESTING.md +0 -319
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>FileAttachment | HealthEdge Playwright Framework API</title><meta name="description" content="Documentation for HealthEdge Playwright Framework API"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">HealthEdge Playwright Framework API</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">FileAttachment</a></li></ul><h1>Interface FileAttachment</h1></div><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><p>Represents a file attachment for multipart requests.</p>
|
|
2
|
+
</div></section><div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">FileAttachment</span> <span class="tsd-signature-symbol">{</span><br/> <a class="tsd-kind-property" href="#contenttype">contentType</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#fieldname">fieldName</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#filepath">filePath</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div><aside class="tsd-sources"><ul><li>Defined in core/api/ApiClient.ts:20</li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Properties</h3><div class="tsd-index-list"><a href="#contenttype" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>content<wbr/>Type?</span></a>
|
|
3
|
+
<a href="#fieldname" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>field<wbr/>Name</span></a>
|
|
4
|
+
<a href="#filepath" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>file<wbr/>Path</span></a>
|
|
5
|
+
</div></section></div></details></section></section><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h2>Properties</h2></summary><section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="contenttype"><code class="tsd-tag">Optional</code><span>content<wbr/>Type</span><a href="#contenttype" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">contentType</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span></div><div class="tsd-comment tsd-typography"><p>Optional MIME type of the file.</p>
|
|
6
|
+
</div><aside class="tsd-sources"><ul><li>Defined in core/api/ApiClient.ts:26</li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="fieldname"><span>field<wbr/>Name</span><a href="#fieldname" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">fieldName</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><div class="tsd-comment tsd-typography"><p>The name of the form field.</p>
|
|
7
|
+
</div><aside class="tsd-sources"><ul><li>Defined in core/api/ApiClient.ts:22</li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="filepath"><span>file<wbr/>Path</span><a href="#filepath" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">filePath</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><div class="tsd-comment tsd-typography"><p>The absolute or relative path to the file.</p>
|
|
8
|
+
</div><aside class="tsd-sources"><ul><li>Defined in core/api/ApiClient.ts:24</li></ul></aside></section></section></details></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Properties</summary><div><a href="#contenttype"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>content<wbr/>Type</span></a><a href="#fieldname"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>field<wbr/>Name</span></a><a href="#filepath"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>file<wbr/>Path</span></a></div></details></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">HealthEdge Playwright Framework API</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>FrameworkConfig | HealthEdge Playwright Framework API</title><meta name="description" content="Documentation for HealthEdge Playwright Framework API"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">HealthEdge Playwright Framework API</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">FrameworkConfig</a></li></ul><h1>Interface FrameworkConfig</h1></div><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><p>Interface representing the framework configuration structure.</p>
|
|
2
|
+
</div></section><div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">FrameworkConfig</span> <span class="tsd-signature-symbol">{</span><br/> <a class="tsd-kind-property" href="#healingenabled">healingEnabled</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div><aside class="tsd-sources"><ul><li>Defined in core/config/ConfigManager.ts:7</li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Properties</h3><div class="tsd-index-list"><a href="#healingenabled" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>healing<wbr/>Enabled</span></a>
|
|
3
|
+
</div></section></div></details></section></section><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h2>Properties</h2></summary><section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="healingenabled"><span>healing<wbr/>Enabled</span><a href="#healingenabled" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">healingEnabled</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span></div><div class="tsd-comment tsd-typography"><p>Global default for AI self-healing.</p>
|
|
4
|
+
</div><aside class="tsd-sources"><ul><li>Defined in core/config/ConfigManager.ts:9</li></ul></aside></section></section></details></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Properties</summary><div><a href="#healingenabled"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>healing<wbr/>Enabled</span></a></div></details></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">HealthEdge Playwright Framework API</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!DOCTYPE html><html class="default" lang="en" data-base="./"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>HealthEdge Playwright Framework API</title><meta name="description" content="Documentation for HealthEdge Playwright Framework API"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script defer src="assets/main.js"></script><script async src="assets/icons.js" id="tsd-icons-script"></script><script async src="assets/search.js" id="tsd-search-script"></script><script async src="assets/navigation.js" id="tsd-nav-script"></script><script async src="assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="index.html" class="title">HealthEdge Playwright Framework API</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"></ul><h1>HealthEdge Playwright Framework API</h1></div><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Classes"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg><h2>Classes</h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="actionorchestrator"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><a href="classes/ActionOrchestrator.html">ActionOrchestrator</a><a href="#actionorchestrator" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="allureutil"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><a href="classes/AllureUtil.html">AllureUtil</a><a href="#allureutil" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="apiclient"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><a href="classes/ApiClient.html">ApiClient</a><a href="#apiclient" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="basepage"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><a href="classes/BasePage.html">BasePage</a><a href="#basepage" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="configmanager"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><a href="classes/ConfigManager.html">ConfigManager</a><a href="#configmanager" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="cookieauth"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><a href="classes/CookieAuth.html">CookieAuth</a><a href="#cookieauth" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="elementprofilestore"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><a href="classes/ElementProfileStore.html">ElementProfileStore</a><a href="#elementprofilestore" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="elementwrapper"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><a href="classes/ElementWrapper.html">ElementWrapper</a><a href="#elementwrapper" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="errorutils"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><a href="classes/ErrorUtils.html">ErrorUtils</a><a href="#errorutils" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="localization"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><a href="classes/Localization.html">Localization</a><a href="#localization" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="locatorhealing"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><a href="classes/LocatorHealing.html">LocatorHealing</a><a href="#locatorhealing" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="logger"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><a href="classes/Logger.html">Logger</a><a href="#logger" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="loginpage"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><a href="classes/LoginPage.html">LoginPage</a><a href="#loginpage" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="oauth2auth"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><a href="classes/OAuth2Auth.html">OAuth2Auth</a><a href="#oauth2auth" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd></dl></details><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Interfaces"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg><h2>Interfaces</h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="apirequestoptions"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg><a href="interfaces/ApiRequestOptions.html">ApiRequestOptions</a><a href="#apirequestoptions" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="apiresponse"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg><a href="interfaces/ApiResponse.html">ApiResponse</a><a href="#apiresponse" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="authstrategy"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg><a href="interfaces/AuthStrategy.html">AuthStrategy</a><a href="#authstrategy" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="elementprofile"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg><a href="interfaces/ElementProfile.html">ElementProfile</a><a href="#elementprofile" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="fileattachment"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg><a href="interfaces/FileAttachment.html">FileAttachment</a><a href="#fileattachment" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="frameworkconfig"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg><a href="interfaces/FrameworkConfig.html">FrameworkConfig</a><a href="#frameworkconfig" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd></dl></details><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Type Aliases"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg><h2>Type Aliases</h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="frameworkfixtures"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="assets/icons.svg#icon-2097152"></use></svg><a href="types/FrameworkFixtures.html">FrameworkFixtures</a><a href="#frameworkfixtures" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="httpmethod"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="assets/icons.svg#icon-2097152"></use></svg><a href="types/HttpMethod.html">HttpMethod</a><a href="#httpmethod" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd></dl></details><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Variables"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg><h2>Variables</h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="test"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Variable"><use href="assets/icons.svg#icon-32"></use></svg><a href="variables/test.html">test</a><a href="#test" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd></dl></details></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Classes"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg>Classes</summary><div><a href="#actionorchestrator"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><span>Action<wbr/>Orchestrator</span></a><a href="#allureutil"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><span>Allure<wbr/>Util</span></a><a href="#apiclient"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><span>Api<wbr/>Client</span></a><a href="#basepage"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><span>Base<wbr/>Page</span></a><a href="#configmanager"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><span>Config<wbr/>Manager</span></a><a href="#cookieauth"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><span>Cookie<wbr/>Auth</span></a><a href="#elementprofilestore"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><span>Element<wbr/>Profile<wbr/>Store</span></a><a href="#elementwrapper"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><span>Element<wbr/>Wrapper</span></a><a href="#errorutils"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><span>Error<wbr/>Utils</span></a><a href="#localization"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><span>Localization</span></a><a href="#locatorhealing"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><span>Locator<wbr/>Healing</span></a><a href="#logger"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><span>Logger</span></a><a href="#loginpage"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><span>Login<wbr/>Page</span></a><a href="#oauth2auth"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg><span>O<wbr/>Auth2<wbr/>Auth</span></a></div></details><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Interfaces"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg>Interfaces</summary><div><a href="#apirequestoptions"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg><span>Api<wbr/>Request<wbr/>Options</span></a><a href="#apiresponse"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg><span>Api<wbr/>Response</span></a><a href="#authstrategy"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg><span>Auth<wbr/>Strategy</span></a><a href="#elementprofile"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg><span>Element<wbr/>Profile</span></a><a href="#fileattachment"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg><span>File<wbr/>Attachment</span></a><a href="#frameworkconfig"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg><span>Framework<wbr/>Config</span></a></div></details><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Type Aliases"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg>Type Aliases</summary><div><a href="#frameworkfixtures"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="assets/icons.svg#icon-2097152"></use></svg><span>Framework<wbr/>Fixtures</span></a><a href="#httpmethod"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="assets/icons.svg#icon-2097152"></use></svg><span>Http<wbr/>Method</span></a></div></details><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Variables"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg>Variables</summary><div><a href="#test"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Variable"><use href="assets/icons.svg#icon-32"></use></svg><span>test</span></a></div></details></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="modules.html" class="current">HealthEdge Playwright Framework API</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>FrameworkFixtures | HealthEdge Playwright Framework API</title><meta name="description" content="Documentation for HealthEdge Playwright Framework API"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">HealthEdge Playwright Framework API</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">FrameworkFixtures</a></li></ul><h1>Type Alias FrameworkFixtures</h1></div><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><p>Defines the custom fixtures available in the framework.</p>
|
|
2
|
+
</div></section><div class="tsd-signature"><span class="tsd-signature-keyword">type</span> <span class="tsd-kind-type-alias">FrameworkFixtures</span> <span class="tsd-signature-symbol">=</span> <span class="tsd-signature-symbol">{</span><br/> <a class="tsd-kind-property" href="#apiclient">apiClient</a><span class="tsd-signature-symbol">:</span> <a href="../classes/ApiClient.html" class="tsd-signature-type tsd-kind-class">ApiClient</a><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#locale">locale</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#loginpage">loginPage</a><span class="tsd-signature-symbol">:</span> <a href="../classes/LoginPage.html" class="tsd-signature-type tsd-kind-class">LoginPage</a><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#orchestrator">orchestrator</a><span class="tsd-signature-symbol">:</span> <a href="../classes/ActionOrchestrator.html" class="tsd-signature-type tsd-kind-class">ActionOrchestrator</a><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#retryinfo">retryInfo</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">current</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">max</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div><aside class="tsd-sources"><ul><li>Defined in fixtures/fixtures.ts:10</li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Properties</h3><div class="tsd-index-list"><a href="#apiclient" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>api<wbr/>Client</span></a>
|
|
3
|
+
<a href="#locale" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>locale</span></a>
|
|
4
|
+
<a href="#loginpage" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>login<wbr/>Page</span></a>
|
|
5
|
+
<a href="#orchestrator" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>orchestrator</span></a>
|
|
6
|
+
<a href="#retryinfo" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>retry<wbr/>Info</span></a>
|
|
7
|
+
</div></section></div></details></section></section><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h2>Properties</h2></summary><section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="apiclient"><span>api<wbr/>Client</span><a href="#apiclient" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">apiClient</span><span class="tsd-signature-symbol">:</span> <a href="../classes/ApiClient.html" class="tsd-signature-type tsd-kind-class">ApiClient</a></div><div class="tsd-comment tsd-typography"><p>Robust API client with reporting and auth support</p>
|
|
8
|
+
</div><aside class="tsd-sources"><ul><li>Defined in fixtures/fixtures.ts:14</li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="locale"><span>locale</span><a href="#locale" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">locale</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><div class="tsd-comment tsd-typography"><p>The current test locale</p>
|
|
9
|
+
</div><aside class="tsd-sources"><ul><li>Defined in fixtures/fixtures.ts:18</li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="loginpage"><span>login<wbr/>Page</span><a href="#loginpage" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">loginPage</span><span class="tsd-signature-symbol">:</span> <a href="../classes/LoginPage.html" class="tsd-signature-type tsd-kind-class">LoginPage</a></div><div class="tsd-comment tsd-typography"><p>Pre-instantiated LoginPage</p>
|
|
10
|
+
</div><aside class="tsd-sources"><ul><li>Defined in fixtures/fixtures.ts:16</li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="orchestrator"><span>orchestrator</span><a href="#orchestrator" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">orchestrator</span><span class="tsd-signature-symbol">:</span> <a href="../classes/ActionOrchestrator.html" class="tsd-signature-type tsd-kind-class">ActionOrchestrator</a></div><div class="tsd-comment tsd-typography"><p>High-fidelity UI action orchestrator with AI healing</p>
|
|
11
|
+
</div><aside class="tsd-sources"><ul><li>Defined in fixtures/fixtures.ts:12</li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="retryinfo"><span>retry<wbr/>Info</span><a href="#retryinfo" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">retryInfo</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">current</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">max</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span> <span class="tsd-signature-symbol">}</span></div><div class="tsd-comment tsd-typography"><p>Information about the current test retry state</p>
|
|
12
|
+
</div><aside class="tsd-sources"><ul><li>Defined in fixtures/fixtures.ts:20</li></ul></aside></section></section></details></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Properties</summary><div><a href="#apiclient"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>api<wbr/>Client</span></a><a href="#locale"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>locale</span></a><a href="#loginpage"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>login<wbr/>Page</span></a><a href="#orchestrator"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>orchestrator</span></a><a href="#retryinfo"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>retry<wbr/>Info</span></a></div></details></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">HealthEdge Playwright Framework API</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>HttpMethod | HealthEdge Playwright Framework API</title><meta name="description" content="Documentation for HealthEdge Playwright Framework API"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">HealthEdge Playwright Framework API</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">HttpMethod</a></li></ul><h1>Type Alias HttpMethod</h1></div><div class="tsd-signature"><span class="tsd-kind-type-alias">HttpMethod</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">"GET"</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"POST"</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"PUT"</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"PATCH"</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"DELETE"</span></div><div class="tsd-comment tsd-typography"><p>HTTP methods supported by the ApiClient.</p>
|
|
2
|
+
</div><aside class="tsd-sources"><ul><li>Defined in core/api/ApiClient.ts:15</li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">HealthEdge Playwright Framework API</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>test | HealthEdge Playwright Framework API</title><meta name="description" content="Documentation for HealthEdge Playwright Framework API"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">HealthEdge Playwright Framework API</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">test</a></li></ul><h1>Variable test<code class="tsd-tag">Const</code></h1></div><div class="tsd-signature"><span class="tsd-kind-variable">test</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">TestType</span><span class="tsd-signature-symbol"><</span><br/> <span class="tsd-signature-type">PlaywrightTestArgs</span> <span class="tsd-signature-symbol">&</span> <span class="tsd-signature-type">PlaywrightTestOptions</span> <span class="tsd-signature-symbol">&</span> <a href="../types/FrameworkFixtures.html" class="tsd-signature-type tsd-kind-type-alias">FrameworkFixtures</a><span class="tsd-signature-symbol">,</span><br/> <span class="tsd-signature-type">PlaywrightWorkerArgs</span> <span class="tsd-signature-symbol">&</span> <span class="tsd-signature-type">PlaywrightWorkerOptions</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> = ...</span></div><div class="tsd-comment tsd-typography"><p>Extended Playwright test object with enterprise fixtures.</p>
|
|
2
|
+
</div><aside class="tsd-sources"><ul><li>Defined in fixtures/fixtures.ts:26</li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">HealthEdge Playwright Framework API</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|
|
@@ -26,7 +26,7 @@ function copyRecursiveSync(src, dest) {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
// 1. Create Directories
|
|
29
|
+
// 1. Create Base Directories
|
|
30
30
|
const baseDirs = [
|
|
31
31
|
'src/core',
|
|
32
32
|
'src/pages',
|
|
@@ -39,39 +39,54 @@ const baseDirs = [
|
|
|
39
39
|
'api-docs'
|
|
40
40
|
];
|
|
41
41
|
|
|
42
|
-
baseDirs.forEach(d =>
|
|
42
|
+
baseDirs.forEach(d => {
|
|
43
|
+
if (!fs.existsSync(path.join(projectPath, d))) {
|
|
44
|
+
fs.mkdirSync(path.join(projectPath, d), { recursive: true });
|
|
45
|
+
}
|
|
46
|
+
});
|
|
43
47
|
|
|
44
|
-
// 2.
|
|
45
|
-
const
|
|
48
|
+
// 2. Comprehensive File Transfer ("As It Is")
|
|
49
|
+
const frameworkRootDir = __dirname;
|
|
50
|
+
const frameworkSrc = path.join(frameworkRootDir, 'src');
|
|
51
|
+
const frameworkApiDocs = path.join(frameworkRootDir, 'api-docs');
|
|
46
52
|
|
|
53
|
+
// Copy Framework Source
|
|
47
54
|
if (fs.existsSync(frameworkSrc)) {
|
|
48
55
|
console.log('📄 Copying framework source files...');
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (fs.existsSync(path.join(frameworkSrc, 'core'))) {
|
|
52
|
-
copyRecursiveSync(path.join(frameworkSrc, 'core'), path.join(projectPath, 'src/core'));
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Copy Fixture templates
|
|
56
|
-
if (fs.existsSync(path.join(frameworkSrc, 'fixtures'))) {
|
|
57
|
-
copyRecursiveSync(path.join(frameworkSrc, 'fixtures'), path.join(projectPath, 'src/fixtures'));
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Copy Quality Pages to user Pages
|
|
56
|
+
copyRecursiveSync(path.join(frameworkSrc, 'core'), path.join(projectPath, 'src/core'));
|
|
57
|
+
copyRecursiveSync(path.join(frameworkSrc, 'fixtures'), path.join(projectPath, 'src/fixtures'));
|
|
61
58
|
if (fs.existsSync(path.join(frameworkSrc, 'quality/pages'))) {
|
|
62
59
|
copyRecursiveSync(path.join(frameworkSrc, 'quality/pages'), path.join(projectPath, 'src/pages'));
|
|
63
60
|
}
|
|
64
|
-
|
|
65
|
-
// Copy Sample Tests
|
|
66
61
|
if (fs.existsSync(path.join(frameworkSrc, 'tests'))) {
|
|
67
62
|
copyRecursiveSync(path.join(frameworkSrc, 'tests'), path.join(projectPath, 'src/tests'));
|
|
68
63
|
}
|
|
69
|
-
} else {
|
|
70
|
-
console.log('⚠️ Framework source not found in package. Using fallback templates.');
|
|
71
|
-
// Fallback (minimal)
|
|
72
|
-
fs.writeFileSync(path.join(projectPath, 'src/core/placeholder.ts'), '// Framework source missing in package');
|
|
73
64
|
}
|
|
74
65
|
|
|
66
|
+
// Copy Documentation
|
|
67
|
+
if (fs.existsSync(frameworkApiDocs)) {
|
|
68
|
+
console.log('📚 Copying enterprise API documentation...');
|
|
69
|
+
copyRecursiveSync(frameworkApiDocs, path.join(projectPath, 'api-docs'));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Copy "Attached Files" (Strategies & Guides)
|
|
73
|
+
const attachedFiles = [
|
|
74
|
+
'HEALING_CACHE_STRATEGY.md',
|
|
75
|
+
'VISUAL_TESTING.md',
|
|
76
|
+
'CLEAN_IMPORTS.md',
|
|
77
|
+
'NPM_PUBLISHING.md',
|
|
78
|
+
'PUBLISHED.md',
|
|
79
|
+
'QUICK_FIX.md'
|
|
80
|
+
];
|
|
81
|
+
|
|
82
|
+
attachedFiles.forEach(file => {
|
|
83
|
+
const srcFile = path.join(frameworkRootDir, file);
|
|
84
|
+
if (fs.existsSync(srcFile)) {
|
|
85
|
+
console.log(`📎 Copying ${file}...`);
|
|
86
|
+
fs.copyFileSync(srcFile, path.join(projectPath, file));
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
|
|
75
90
|
// 3. package.json for the target project
|
|
76
91
|
const packageJson = {
|
|
77
92
|
name: projectName,
|
|
@@ -84,7 +99,7 @@ const packageJson = {
|
|
|
84
99
|
'lint': 'eslint . --ext .ts'
|
|
85
100
|
},
|
|
86
101
|
dependencies: {
|
|
87
|
-
'@sridharkikkeri/playwright-common': '^1.0.
|
|
102
|
+
'@sridharkikkeri/playwright-common': '^1.0.23',
|
|
88
103
|
'@playwright/test': '^1.42.0',
|
|
89
104
|
'allure-playwright': '^3.4.5'
|
|
90
105
|
},
|
|
@@ -101,6 +116,13 @@ fs.writeFileSync(path.join(projectPath, 'package.json'), JSON.stringify(packageJ
|
|
|
101
116
|
const baseConfig = { healingEnabled: true, environment: 'dev', baseUrl: 'https://example.com', apiUrl: 'https://api.example.com', timeout: 30000 };
|
|
102
117
|
fs.writeFileSync(path.join(projectPath, 'framework.config.json'), JSON.stringify(baseConfig, null, 2));
|
|
103
118
|
|
|
119
|
+
// Create environment-specific configs
|
|
120
|
+
const environments = ['dev', 'qa', 'auto', 'staging', 'prod'];
|
|
121
|
+
environments.forEach(env => {
|
|
122
|
+
const config = { ...baseConfig, environment: env, baseUrl: `https://${env}.example.com`, apiUrl: `https://api-${env}.example.com` };
|
|
123
|
+
fs.writeFileSync(path.join(projectPath, `framework.config.${env}.json`), JSON.stringify(config, null, 2));
|
|
124
|
+
});
|
|
125
|
+
|
|
104
126
|
const playwrightConfig = `import { defineConfig } from '@playwright/test';
|
|
105
127
|
export default defineConfig({
|
|
106
128
|
testDir: './src/tests',
|
|
@@ -122,7 +144,7 @@ fs.writeFileSync(path.join(projectPath, 'tsconfig.json'), JSON.stringify(tsConfi
|
|
|
122
144
|
const gitignore = `node_modules/\nallure-results/\nallure-report/\n.env\n*.log\n`;
|
|
123
145
|
fs.writeFileSync(path.join(projectPath, '.gitignore'), gitignore);
|
|
124
146
|
|
|
125
|
-
console.log('\n✅ Project
|
|
147
|
+
console.log('\n✅ Full Enterprise Project Structure Created (Source + Docs + Strategies)');
|
|
126
148
|
console.log('📦 Installing dependencies...\n');
|
|
127
149
|
|
|
128
150
|
try {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sridharkikkeri/playwright-common",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.24",
|
|
4
4
|
"description": "Production-grade Playwright framework with AI-powered self-healing, visual regression, and enterprise features",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -13,10 +13,15 @@
|
|
|
13
13
|
"files": [
|
|
14
14
|
"dist",
|
|
15
15
|
"src",
|
|
16
|
+
"api-docs",
|
|
16
17
|
"create-healthedge-tests.js",
|
|
17
18
|
"README.md",
|
|
18
19
|
"HEALING_CACHE_STRATEGY.md",
|
|
19
|
-
"VISUAL_TESTING.md"
|
|
20
|
+
"VISUAL_TESTING.md",
|
|
21
|
+
"CLEAN_IMPORTS.md",
|
|
22
|
+
"NPM_PUBLISHING.md",
|
|
23
|
+
"PUBLISHED.md",
|
|
24
|
+
"QUICK_FIX.md"
|
|
20
25
|
],
|
|
21
26
|
"bin": {
|
|
22
27
|
"create-healthedge-tests": "./create-healthedge-tests.js"
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
# Self-Healing Cache Strategy
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
The framework's self-healing mechanism uses an in-memory cache to store element profiles and healed selectors, enabling intelligent locator recovery without repeated AI calls.
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Architecture
|
|
9
|
-
|
|
10
|
-
### 1. Element Profile Store
|
|
11
|
-
**Location**: `ElementProfileStore.ts`
|
|
12
|
-
|
|
13
|
-
**Purpose**: Maintains a runtime cache of element "fingerprints" captured during successful interactions.
|
|
14
|
-
|
|
15
|
-
```typescript
|
|
16
|
-
interface ElementProfile {
|
|
17
|
-
selector: string; // Original selector
|
|
18
|
-
intent: string; // Human-readable action intent
|
|
19
|
-
attributes: Record<string, string>; // DOM attributes snapshot
|
|
20
|
-
lastHealedSelector?: string; // Last successful healed selector
|
|
21
|
-
healingFailed?: boolean; // Flag if healing exhausted
|
|
22
|
-
failureType?: string; // Reason for healing failure
|
|
23
|
-
}
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
**Key**: `{pageName}:{intent}` (e.g., `LoginPage:Click Login Button`)
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## Caching Flow
|
|
31
|
-
|
|
32
|
-
### Phase 1: Profile Capture (Success Path)
|
|
33
|
-
```
|
|
34
|
-
User Action → Element Found → Capture Attributes → Store Profile
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
**When**: After every successful element interaction
|
|
38
|
-
**What's Stored**:
|
|
39
|
-
- Original selector
|
|
40
|
-
- Element tag, text, id, class, data-* attributes
|
|
41
|
-
- Action intent for context
|
|
42
|
-
|
|
43
|
-
### Phase 2: Healing Attempt (Failure Path)
|
|
44
|
-
```
|
|
45
|
-
Selector Fails → Check Cache → Use lastHealedSelector → If Fails → AI Healing → Update Cache
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
**Decision Tree**:
|
|
49
|
-
1. **Cache Hit + Valid Healed Selector**: Use cached healed selector (fast path)
|
|
50
|
-
2. **Cache Hit + Failed Flag**: Skip healing, fail fast
|
|
51
|
-
3. **Cache Miss or Stale**: Trigger AI healing via LLM
|
|
52
|
-
|
|
53
|
-
### Phase 3: AI Healing (Expensive Path)
|
|
54
|
-
```
|
|
55
|
-
Extract Profile → LLM Analysis → Generate New Selector → Validate → Cache Result
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
**LLM Input**:
|
|
59
|
-
- Element attributes from profile
|
|
60
|
-
- Page context (pageName)
|
|
61
|
-
- Action intent
|
|
62
|
-
- DOM snapshot (optional)
|
|
63
|
-
|
|
64
|
-
**LLM Output**: Alternative selector candidates
|
|
65
|
-
|
|
66
|
-
**Validation**: Test each candidate; first success is cached
|
|
67
|
-
|
|
68
|
-
---
|
|
69
|
-
|
|
70
|
-
## Cache Lifecycle
|
|
71
|
-
|
|
72
|
-
### Scope
|
|
73
|
-
- **Per Test Run**: Cache is in-memory, resets between test executions
|
|
74
|
-
- **Per Worker**: Isolated cache per Playwright worker (no cross-worker sharing)
|
|
75
|
-
|
|
76
|
-
### Persistence
|
|
77
|
-
**Current**: No persistence (ephemeral)
|
|
78
|
-
|
|
79
|
-
**Future Enhancement**: Serialize to `.healing-cache.json` for cross-run reuse
|
|
80
|
-
```json
|
|
81
|
-
{
|
|
82
|
-
"LoginPage:Click Login Button": {
|
|
83
|
-
"lastHealedSelector": "button[data-testid='login-submit']",
|
|
84
|
-
"timestamp": 1704067200000,
|
|
85
|
-
"successRate": 0.95
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## Performance Optimization
|
|
93
|
-
|
|
94
|
-
### 1. Fast Path (Cache Hit)
|
|
95
|
-
- **Latency**: ~5ms (in-memory lookup)
|
|
96
|
-
- **Cost**: $0
|
|
97
|
-
- **Success Rate**: 85-90% for stable apps
|
|
98
|
-
|
|
99
|
-
### 2. Slow Path (AI Healing)
|
|
100
|
-
- **Latency**: 2-5 seconds (LLM API call)
|
|
101
|
-
- **Cost**: ~$0.001-0.01 per healing
|
|
102
|
-
- **Success Rate**: 70-80% for moderate DOM changes
|
|
103
|
-
|
|
104
|
-
### 3. Fail Fast
|
|
105
|
-
- **Latency**: ~10ms
|
|
106
|
-
- **Triggered**: When `healingFailed=true` in cache
|
|
107
|
-
- **Prevents**: Repeated expensive AI calls for permanently broken elements
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
## Configuration
|
|
112
|
-
|
|
113
|
-
### Global Toggle
|
|
114
|
-
```json
|
|
115
|
-
// framework.config.json
|
|
116
|
-
{
|
|
117
|
-
"healingEnabled": true // Master switch
|
|
118
|
-
}
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
### Per-Action Override
|
|
122
|
-
```typescript
|
|
123
|
-
// Disable healing for a specific action
|
|
124
|
-
await this.loginBtn.withHealing(false).click();
|
|
125
|
-
|
|
126
|
-
// Force healing even if globally disabled
|
|
127
|
-
await this.dynamicElement.withHealing(true).click();
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
---
|
|
131
|
-
|
|
132
|
-
## Cache Invalidation
|
|
133
|
-
|
|
134
|
-
### Automatic Invalidation
|
|
135
|
-
- Test run completion (cache cleared)
|
|
136
|
-
- Worker restart
|
|
137
|
-
|
|
138
|
-
### Manual Invalidation
|
|
139
|
-
```typescript
|
|
140
|
-
// Clear specific profile
|
|
141
|
-
ElementProfileStore.clearProfile('LoginPage', 'Click Login Button');
|
|
142
|
-
|
|
143
|
-
// Clear all profiles for a page
|
|
144
|
-
ElementProfileStore.clearPage('LoginPage');
|
|
145
|
-
|
|
146
|
-
// Nuclear option: clear entire cache
|
|
147
|
-
ElementProfileStore.clearAll();
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
---
|
|
151
|
-
|
|
152
|
-
## Monitoring & Debugging
|
|
153
|
-
|
|
154
|
-
### Healing Metrics
|
|
155
|
-
```typescript
|
|
156
|
-
const stats = ElementProfileStore.getStats();
|
|
157
|
-
console.log(stats);
|
|
158
|
-
// {
|
|
159
|
-
// totalProfiles: 45,
|
|
160
|
-
// healedCount: 12,
|
|
161
|
-
// failedCount: 2,
|
|
162
|
-
// cacheHitRate: 0.73
|
|
163
|
-
// }
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
### Allure Reporting
|
|
167
|
-
Healing events are automatically logged:
|
|
168
|
-
- ✅ **Cache Hit**: "Used cached healed selector"
|
|
169
|
-
- 🔄 **AI Healing**: "Triggered AI healing (took 3.2s)"
|
|
170
|
-
- ❌ **Healing Failed**: "Exhausted healing attempts"
|
|
171
|
-
|
|
172
|
-
---
|
|
173
|
-
|
|
174
|
-
## Best Practices
|
|
175
|
-
|
|
176
|
-
### 1. Meaningful Intents
|
|
177
|
-
```typescript
|
|
178
|
-
// ❌ Bad: Generic intent
|
|
179
|
-
await this.btn.click('click');
|
|
180
|
-
|
|
181
|
-
// ✅ Good: Descriptive intent
|
|
182
|
-
await this.btn.click('Submit Login Form');
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
### 2. Stable Attributes
|
|
186
|
-
Prefer selectors with stable attributes:
|
|
187
|
-
- `data-testid`
|
|
188
|
-
- `aria-label`
|
|
189
|
-
- `id` (if not auto-generated)
|
|
190
|
-
|
|
191
|
-
### 3. Healing Budget
|
|
192
|
-
Set a healing attempt limit to prevent infinite loops:
|
|
193
|
-
```typescript
|
|
194
|
-
// In ActionOrchestrator
|
|
195
|
-
const MAX_HEALING_ATTEMPTS = 3;
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
---
|
|
199
|
-
|
|
200
|
-
## Troubleshooting
|
|
201
|
-
|
|
202
|
-
### Issue: High AI Healing Costs
|
|
203
|
-
**Solution**: Increase cache persistence, improve selector stability
|
|
204
|
-
|
|
205
|
-
### Issue: Low Healing Success Rate
|
|
206
|
-
**Solution**: Enrich element profiles with more attributes, improve LLM prompt
|
|
207
|
-
|
|
208
|
-
### Issue: Stale Cached Selectors
|
|
209
|
-
**Solution**: Add TTL (time-to-live) to cached entries
|
|
210
|
-
```typescript
|
|
211
|
-
profile.expiresAt = Date.now() + 24 * 60 * 60 * 1000; // 24h
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
---
|
|
215
|
-
|
|
216
|
-
## Future Enhancements
|
|
217
|
-
|
|
218
|
-
1. **Persistent Cache**: Save to disk for cross-run reuse
|
|
219
|
-
2. **Distributed Cache**: Redis/Memcached for multi-worker sharing
|
|
220
|
-
3. **ML-Based Healing**: Train a model on historical healing data
|
|
221
|
-
4. **Visual Healing**: Use screenshot comparison for element identification
|
|
222
|
-
5. **Healing Analytics Dashboard**: Visualize healing patterns and costs
|