Implements Phases 1-8 of the TFTSR implementation plan. Rust backend (Tauri 2.x, src-tauri/): - Multi-provider AI: OpenAI-compatible, Anthropic, Gemini, Mistral, Ollama - PII detection engine: 11 regex patterns with overlap resolution - SQLCipher AES-256 encrypted database with 10 versioned migrations - 28 Tauri IPC commands for triage, analysis, document, and system ops - Ollama: hardware probe, model recommendations, pull/delete with events - RCA and blameless post-mortem Markdown document generators - PDF export via printpdf - Audit log: SHA-256 hash of every external data send - Integration stubs for Confluence, ServiceNow, Azure DevOps (v0.2) Frontend (React 18 + TypeScript + Vite, src/): - 9 pages: full triage workflow NewIssue→LogUpload→Triage→Resolution→RCA→Postmortem→History+Settings - 7 components: ChatWindow, TriageProgress, PiiDiffViewer, DocEditor, HardwareReport, ModelSelector, UI primitives - 3 Zustand stores: session, settings (persisted), history - Type-safe tauriCommands.ts matching Rust backend types exactly - 8 IT domain system prompts (Linux, Windows, Network, K8s, DB, Virt, HW, Obs) DevOps: - .woodpecker/test.yml: rustfmt, clippy, cargo test, tsc, vitest on every push - .woodpecker/release.yml: linux/amd64 + linux/arm64 builds, Gogs release upload Verified: - cargo check: zero errors - tsc --noEmit: zero errors - vitest run: 13/13 unit tests passing Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
96 lines
5.3 KiB
TypeScript
96 lines
5.3 KiB
TypeScript
import type { TapOptions } from '../../types.js';
|
|
/**
|
|
*
|
|
* Performs a tap gesture on:
|
|
* - or the given element. It will **automatically scroll** if it can't be found.
|
|
* - or the screen on a mobile device by providing `x` and `y` coordinates
|
|
*
|
|
* Internally it uses:
|
|
* - Element tap:
|
|
* - the `click` command for Web environments (Chrome/Safari browsers, or hybrid apps)
|
|
* - the Android [`mobile: clickGesture`](https://github.com/appium/appium-uiautomator2-driver/blob/master/docs/android-mobile-gestures.md#mobile-clickgesture)
|
|
* or iOS [`mobile: tap`](https://appium.github.io/appium-xcuitest-driver/latest/reference/execute-methods/#mobile-tap) for Natives apps, including the `scrollIntoView`
|
|
* command for automatic scrolling
|
|
* - Screen tap:
|
|
* - the `action` command for Web environments (Chrome/Safari browsers, or hybrid apps)
|
|
* - the Android [`mobile: clickGesture`](https://github.com/appium/appium-uiautomator2-driver/blob/master/docs/android-mobile-gestures.md#mobile-clickgesture)
|
|
* or iOS [`mobile: tap`](https://appium.github.io/appium-xcuitest-driver/latest/reference/execute-methods/#mobile-tap) for Natives apps
|
|
*
|
|
* This difference makes the `tap` command a more reliable alternative to the `click` command for mobile apps.
|
|
*
|
|
* For Native Apps, this command differs from the `click` command as it will <strong>automatically swipe</strong> to the element using the `scrollIntoView command`,
|
|
* which is not supported for native apps with the `click` command. In hybrid apps or web environments, automatic scrolling is supported for both `click` and `tap` commands.
|
|
*
|
|
* :::info
|
|
*
|
|
* This command only works with the following up-to-date components:
|
|
* - Appium server (version 2.0.0 or higher)
|
|
* - `appium-uiautomator2-driver` (for Android)
|
|
* - `appium-xcuitest-driver` (for iOS)
|
|
*
|
|
* Make sure your local or cloud-based Appium environment is regularly updated to avoid compatibility issues.
|
|
*
|
|
* :::
|
|
*
|
|
*
|
|
* :::caution For Screen taps
|
|
*
|
|
* If you want to tap on a specific coordinate on the screen and you use a screenshot to determine the coordinates, remember that the
|
|
* the coordinates for iOS are based on the device's screen size, and not the screenshot size. The screenshot size is larger due to the device pixel ratio.
|
|
* The average device pixel ratio until the iPhone 8 and the current iPads is 2, for iPhones from the iPhone X the ratio is 3. This means that the screenshot
|
|
* size is 2 or 3 times larger than the device's screen size which means that ff you find the coordinates on the screenshot, divide them by the device pixel
|
|
* ratio to get the correct screen coordinates. For example:
|
|
*
|
|
* ```js
|
|
* const screenshotCoordinates = { x: 600, y: 900 };
|
|
* const dpr = 3; // Example for iPhone 16
|
|
* const screenCoordinates = {
|
|
* x: screenshotCoordinates.x / dpr,
|
|
* y: screenshotCoordinates.y / dpr
|
|
* };
|
|
* await browser.tap(screenCoordinates);
|
|
* ```
|
|
*
|
|
* :::
|
|
*
|
|
* <example>
|
|
:element.tap.example.js
|
|
it('should be able to tap an on element', async () => {
|
|
const elem = $('~myElement')
|
|
// It will automatically scroll to the element if it's not already in the viewport
|
|
await elem.tap()
|
|
})
|
|
* </example>
|
|
*
|
|
* <example>
|
|
:element.tap.scroll.options.example.js
|
|
it('should be able to swipe right 3 times in a custom scroll areas to an element and tap on the element', async () => {
|
|
const elem = $('~myElement')
|
|
// Swipe right 3 times in the custom scrollable element to find the element
|
|
await elem.tap({
|
|
direction: 'right',
|
|
maxScrolls: 3,
|
|
scrollableElement: $('#scrollable')
|
|
})
|
|
})
|
|
* </example>
|
|
*
|
|
* <example>
|
|
:screen.tap.example.js
|
|
it('should be able to tap on screen coordinates', async () => {
|
|
await browser.tap({ x: 200, y: 400 })
|
|
})
|
|
* </example>
|
|
*
|
|
* @param {TapOptions=} options Tap options (optional)
|
|
* @rowInfo Element tap options
|
|
* @param {number=} options.x Number (optional, mandatory if y is set) <br /><strong>Only for SCREEN tap, not for ELEMENT tap</strong>
|
|
* @param {number=} options.y Number (optional, mandatory if x is set) <br /><strong>Only for SCREEN tap, not for ELEMENT tap</strong>
|
|
* @rowInfo Screen tap options
|
|
* @param {string=} options.direction Can be one of `down`, `up`, `left` or `right`, default is `down`. <br /><strong>Only for ELEMENT tap, not for SCREEN tap</strong><br /><strong>MOBILE-NATIVE-APP-ONLY</strong>
|
|
* @param {number=} options.maxScrolls The max amount of scrolls until it will stop searching for the element, default is `10`. <br /><strong>Only for ELEMENT tap, not for SCREEN tap</strong><br /><strong>MOBILE-NATIVE-APP-ONLY</strong>
|
|
* @param {Element=} options.scrollableElement Element that is used to scroll within. If no element is provided it will use the following selector for iOS `-ios predicate string:type == "XCUIElementTypeApplication"` and the following for Android `//android.widget.ScrollView'`. If more elements match the default selector, then by default it will pick the first matching element. <br /><strong>Only for ELEMENT tap, not for SCREEN tap</strong><br /><strong>MOBILE-NATIVE-APP-ONLY</strong>
|
|
* @skipUsage
|
|
*/
|
|
export declare function tap(this: WebdriverIO.Browser | WebdriverIO.Element, options?: TapOptions): Promise<unknown>;
|
|
//# sourceMappingURL=tap.d.ts.map
|