Some checks failed
Tests / Tests (push) Has been cancelled
ESLint Check / ESLint Check and Report Upload (push) Has been cancelled
Prettier Check / Format Check (push) Has been cancelled
Prettier Check / Format Code (push) Has been cancelled
ESLint Check / Build Base for Bundle Size Comparison (push) Has been cancelled
- Add export functionality to SessionList and Player pages - Add new utility modules: dataOperations, format, path, settings - Update manifest with export and download permissions - Enhance storage utility with new data operations - Add various test scripts and documentation files
108 lines
3.3 KiB
JavaScript
108 lines
3.3 KiB
JavaScript
const puppeteer = require('puppeteer-core');
|
|
|
|
(async () => {
|
|
const browser = await puppeteer.launch({
|
|
headless: false,
|
|
executablePath: 'C:\\Users\\xgp\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe',
|
|
args: ['--allow-file-access-from-files', '--disable-web-security']
|
|
});
|
|
|
|
const page = await browser.newPage();
|
|
|
|
// Override alert
|
|
page.evaluateOnNewDocument(() => {
|
|
window.alert = (msg) => {
|
|
console.log('ALERT:', msg);
|
|
return true;
|
|
};
|
|
});
|
|
|
|
await page.goto('file:///C:/Users/xgp/projects/rrweb/index.html', {
|
|
waitUntil: 'networkidle2',
|
|
timeout: 120000
|
|
});
|
|
|
|
// Wait for scripts to load
|
|
await new Promise(r => setTimeout(r, 2000));
|
|
|
|
console.log('=== Testing Export Function ===');
|
|
|
|
// Test 1: Check export button exists
|
|
const exportButtonExists = await page.$('button[onclick="exportRecording()"]') !== null;
|
|
console.log('✓ Export button exists:', exportButtonExists);
|
|
|
|
// Test 2: Try to export with no data
|
|
await page.click('button[onclick="exportRecording()"]');
|
|
await new Promise(r => setTimeout(r, 1000));
|
|
|
|
// Test 3: Record some data
|
|
console.log('\n1. Recording test data...');
|
|
await page.click('#start-btn');
|
|
await page.evaluate(() => {
|
|
document.querySelector('button[onclick="changeColor()"]').click();
|
|
document.querySelector('button[onclick="addCounter()"]').click();
|
|
});
|
|
await new Promise(r => setTimeout(r, 1000));
|
|
|
|
await page.click('#stop-btn');
|
|
await new Promise(r => setTimeout(r, 2000));
|
|
|
|
// Check if we have recorded data
|
|
const recordedEvents = await page.evaluate(() => {
|
|
return (window.events || []).length;
|
|
});
|
|
console.log('✓ Recorded events:', recordedEvents);
|
|
|
|
// Test 4: Export with data
|
|
console.log('\n2. Testing export functionality...');
|
|
await page.click('button[onclick="exportRecording()"]');
|
|
await new Promise(r => setTimeout(r, 2000));
|
|
|
|
// Check if the download dialog appears
|
|
console.log('✓ Export triggered - should see download dialog');
|
|
|
|
// Test 5: Verify export data structure
|
|
console.log('\n3. Verifying export data structure...');
|
|
const exportDataTest = await page.evaluate(() => {
|
|
const events = window.events || [];
|
|
if (events.length === 0) return false;
|
|
|
|
const testExport = {
|
|
version: '1.0',
|
|
timestamp: new Date().toISOString(),
|
|
events: events.slice(0, 2) // Test with first 2 events
|
|
};
|
|
|
|
const jsonStr = JSON.stringify(testExport, null, 2);
|
|
const parsed = JSON.parse(jsonStr);
|
|
|
|
return (
|
|
parsed.version === '1.0' &&
|
|
parsed.timestamp &&
|
|
Array.isArray(parsed.events) &&
|
|
parsed.events.length > 0
|
|
);
|
|
});
|
|
console.log('✓ Export data structure valid:', exportDataTest);
|
|
|
|
// Test 6: Test clear functionality after export
|
|
console.log('\n4. Testing clear after export...');
|
|
await page.click('button[onclick="clearAll()"]');
|
|
await new Promise(r => setTimeout(r, 1000));
|
|
|
|
const cleared = await page.evaluate(() => {
|
|
return (window.events || []).length === 0;
|
|
});
|
|
console.log('✓ Clear works after export:', cleared);
|
|
|
|
console.log('\n=== Export Test Results ===');
|
|
console.log('✓ Export button exists');
|
|
console.log('✓ Export triggered with data');
|
|
console.log('✓ Export data structure valid');
|
|
console.log('✓ Clear functionality preserved');
|
|
|
|
await browser.close();
|
|
})().catch(e => {
|
|
console.error(e);
|
|
process.exit(1);
|
|
}); |