How kogiQA Works
kogiQA does not use CSS selectors. Playwright and Cypress locate elements via selectors, which means that any change to the DOM, such as a renamed class, a reordered layout or updated copy, breaks the test. kogiQA resolves elements at runtime instead. The algorithm inspects the rendered page and matches what it finds against the intent that was passed to the function. You can change the layout, restyle a button or reword a label. As long as the element still has the same meaning, the test will keep passing.
The resolution pipeline
The algorithm runs in three stages:
- Extraction: The full page is analysed and information relevant to resolution is extracted. Anything the algorithm doesn't need is discarded at this stage.
- Ranking: The extracted data is anonymised and sent to our servers where it is processed and ranked according to its semantic meaning in relation to your input.
- Action: The result is returned to the client and the test acts on the resolved element.
Supported workflows
There are three ways to use kogiQA:
- Recorder: A desktop application where you record a test case and export it as code.
- Code Only: Write tests by hand, never open the recorder.
- No-code: Record and replay entirely inside the recorder.
All of it integrates with the common JavaScript test frameworks ( Jest and the rest), so you keep your existing runner and CI setup.
CSS selector fallback
If your codebase is built on CSS selectors, kogiQA is backwards compatible. Simply pass a selector and it will be used as is. If the selector later stops matching, the test fails ( there is no silent auto-healing) but the algorithm suggests a replacement selector that it deems to be correct. You can then review this and decide whether to apply it.
Known limitation: duplicate elements
Because the resolution works semantically, the algorithm cannot choose between multiple elements with the same meaning. For example, if a page has three buttons labelled 'Save', it has no way of knowing which one you meant. There are two options:
- Pass a directional hint as a parameter (e.g. 'top right' or 'bottom left').
- Pass a relative position; the algorithm will pick the element closest to it.
Note that this is the one case where a kogiQA test can still break, so bear this in mind if a page contains several functionally identical elements.