midscene/packages/core/tests/ai/llm-inspect.test.ts
yuyutaotao b261ed7f2a
feat(web): use xpath and yaml as cache (#711)
* feat(web-integration): use xpath for cache instead of id

* feat(web-integration): enhance TaskCache to support xpaths for cache matching and add new test cases

* feat(web-integration): add debug log for unknown page types in TaskCache

* feat(web-integration): update caching logic and cache hit conditions for Plan and Locate tasks

* chore(core): update debug log

* feat(web-integration): update rspress.config and enhance TaskCache structure with new properties

* feat(web-integration): recalculate id when hit cache

* fix(web-integration): update mock implementation in task-cache test to use evaluate method

* feat(web-integration): enhance element caching by adding XPath support and improving cache hit logic

* chore(core): lint

* feat(web-integration): improve XPath handling in web-extractor

* test(web-integration): fix tests

* feat(core, web-integration): add attributes to LocateResultElement and enhance element handling

* fix(core): lint

* feat(web-integration): add midsceneVersion to TaskCache and update cache validation logic

* fix(core): test

* fix(web-integration): update cache validation logic to prevent reading outdated midscene cache files

* feat(web-integration): enhance TaskCache to track used cache items and improve cache retrieval logic

* fix(core): xpath logic (#710)

* feat(core): resue context for locate

* feat(core): build yamlFlow from aiAction

* feat(core): refine task-cache

* feat(core): update cache

* feat(core): refine task-cache

* feat(core): refine task-cache

* feat(core): remove unused checkElementExistsByXPath

* feat(core): use yaml file as cache

* chore(core): fix lint

* chore(core): print warning for previous cache

* refactor(core): remove quickAnswer references and improve element matching logic

* fix(core): update import path for buildYamlFlowFromPlans

* chore(web-integration): update output image and skip task error test

* fix(web-integration): update test snapshots to handle beta versions

* fix(web-integration): adjust test snapshots for version consistency

* fix(web-integration): track original cache length and adjust matching logic in tests

* fix(web-integration): update test URLs to reflect new target site and enable previously skipped test

* chore(core): update cache docs

* fix(core): test

* feat(core): try to match element from plan

* fix(web-integration): cache id stable when retry in palywright

* fix(web-integration): typo

* style(web-integration): lint

* fix(web-integration): stable cacheid in tests

* fix(web-integration): cache id

---------

Co-authored-by: quanruzhuoxiu <quanruzhuoxiu@gmail.com>
2025-05-16 17:16:56 +08:00

52 lines
1.3 KiB
TypeScript

import { AiLocateElement, AiLocateSection } from '@/ai-model';
import { getContextFromFixture } from 'tests/evaluation';
import { expect, test, vi } from 'vitest';
vi.setConfig({
testTimeout: 60 * 1000,
});
test(
'basic inspect',
async () => {
const { context } = await getContextFromFixture('todo');
const startTime = Date.now();
const { parseResult } = await AiLocateElement({
context,
targetElementDescription: 'input 输入框',
});
console.log('parseResult', JSON.stringify(parseResult, null, 2));
const endTime = Date.now();
const cost = endTime - startTime;
expect(parseResult.elements.length).toBe(1);
},
{
timeout: 1000000,
},
);
test('locate section', async () => {
const { context } = await getContextFromFixture('todo');
const { rect } = await AiLocateSection({
context,
sectionDescription: '搜索框',
});
expect(rect).toBeDefined();
});
test('use quick answer', async () => {
const { context } = await getContextFromFixture('todo');
const startTime = Date.now();
const { parseResult } = await AiLocateElement({
context,
targetElementDescription: 'never mind',
});
console.log('parseResult', parseResult);
const endTime = Date.now();
const cost = endTime - startTime;
expect(parseResult.elements.length).toBe(1);
expect(cost).toBeLessThan(100);
});