91 lines
3.4 KiB
JavaScript
91 lines
3.4 KiB
JavaScript
const { chromium } = require('playwright');
|
|
(async () => {
|
|
const browser = await chromium.launch({ headless: true });
|
|
const page = await browser.newPage();
|
|
await page.goto('http://localhost:5111/build-calculator', { timeout: 30000, waitUntil: 'networkidle' });
|
|
await page.waitForTimeout(10000);
|
|
|
|
const selects = page.locator('select');
|
|
await selects.nth(0).selectOption("Q'Rath");
|
|
await page.waitForTimeout(500);
|
|
await selects.nth(1).selectOption('Orzum');
|
|
await page.waitForTimeout(2000);
|
|
|
|
const gridItems = page.locator('.calculatorGrid > div');
|
|
const gCount = await gridItems.count();
|
|
|
|
// Find the timeline section (has "Shows economy" text)
|
|
let timelineIdx = -1;
|
|
for (let i = 0; i < gCount; i++) {
|
|
const txt = (await gridItems.nth(i).textContent() || '');
|
|
if (txt.includes('economy')) {
|
|
timelineIdx = i;
|
|
break;
|
|
}
|
|
}
|
|
console.log('Timeline grid item index:', timelineIdx);
|
|
|
|
// Get full timeline text before adding
|
|
if (timelineIdx >= 0) {
|
|
const text = (await gridItems.nth(timelineIdx).textContent() || '').trim();
|
|
console.log('Timeline text before add (first 500 chars):');
|
|
console.log(text.substring(0, 500));
|
|
console.log('...');
|
|
console.log('Contains Acropolis:', text.includes('Acropolis'));
|
|
console.log('Contains Requested:', text.includes('Requested'));
|
|
}
|
|
|
|
// Click Q to add Acropolis
|
|
const buttons = page.locator('.keyContainer > div > div');
|
|
const count = await buttons.count();
|
|
for (let i = 0; i < count; i++) {
|
|
const txt = (await buttons.nth(i).textContent()) || '';
|
|
if (txt.trim().toUpperCase().startsWith('Q')) {
|
|
await buttons.nth(i).click({ force: true });
|
|
console.log('Clicked Q at index', i);
|
|
break;
|
|
}
|
|
}
|
|
await page.waitForTimeout(2000);
|
|
|
|
// Check entity view
|
|
const evName = (await page.locator('.entityClickView #entityName').textContent() || '').trim();
|
|
console.log('EntityView name after add:', evName);
|
|
|
|
// Get timeline text after adding
|
|
if (timelineIdx >= 0) {
|
|
const text = (await gridItems.nth(timelineIdx).textContent() || '').trim();
|
|
console.log('Timeline text after add (first 500 chars):');
|
|
console.log(text.substring(0, 500));
|
|
console.log('Contains Acropolis:', text.includes('Acropolis'));
|
|
console.log('Contains Requested:', text.includes('Requested'));
|
|
console.log('Contains New:', text.includes('New'));
|
|
}
|
|
|
|
// Count Virtualize items in timeline
|
|
const virtualItems = page.locator('[style*="grid-template-columns: 1fr 1fr"]');
|
|
console.log('Virtualize items (grid items):', await virtualItems.count());
|
|
|
|
// Click Clear Build Order
|
|
await page.locator('button').filter({ hasText: 'Clear Build Order' }).click();
|
|
await page.waitForTimeout(2000);
|
|
|
|
// Check entity view after clear
|
|
const evAfterClear = await page.locator('.entityClickView #entityName').count();
|
|
console.log('EntityView #entityName count after clear:', evAfterClear);
|
|
if (evAfterClear > 0) {
|
|
console.log('EntityView name after clear:', (await page.locator('.entityClickView #entityName').textContent() || '').trim());
|
|
}
|
|
|
|
// Check timeline after clear
|
|
if (timelineIdx >= 0) {
|
|
const text = (await gridItems.nth(timelineIdx).textContent() || '').trim();
|
|
console.log('Timeline text after clear (first 300 chars):');
|
|
console.log(text.substring(0, 300));
|
|
console.log('Contains Acropolis:', text.includes('Acropolis'));
|
|
console.log('Virtualize items:', await virtualItems.count());
|
|
}
|
|
|
|
await browser.close();
|
|
})();
|