screenshot
codebolt.browser.screenshot(): Promise<BrowserScreenshotResponse>
Captures a screenshot of the current browser page as base64 encoded image data. Returns the screenshot in PNG format with the current viewport dimensions. Useful for visual verification, debugging, automated testing, and generating documentation.
Returns
Promise<BrowserScreenshotResponse>: A promise that resolves with screenshot data including base64 encoded image, viewport information, and capture metadata.
Response Structure
The method returns a Promise that resolves to a BrowserScreenshotResponse object with the following properties:
type(string): Always "screenshotResponse" or similar response type identifier.payload(object, optional): Contains the screenshot data and metadatascreenshot(string, optional): Base64 encoded PNG image data of the captured screenshot.fullPage(boolean, optional): Indicates if the screenshot captures the full page or just the viewport.success(boolean, optional): Indicates if the screenshot operation was successful.content(string, optional): Alternative content field for screenshot data.viewport(object, optional): Viewport dimensions at time of capturewidth(number): Viewport width in pixels.height(number): Viewport height in pixels.
eventId(string, optional): Unique identifier for the screenshot event.success(boolean, optional): Indicates if the operation was successful.message(string, optional): Additional information about the screenshot operation.error(string, optional): Error details if the screenshot operation failed.messageId(string, optional): Unique identifier for the message.threadId(string, optional): Thread identifier for the request.
Examples
// Example 1: Basic screenshot capture
await codebolt.browser.goToPage('https://example.com');
// Wait for page to load completely
await new Promise(resolve => setTimeout(resolve, 2000));
// Take a screenshot of the current page
const screenshotResult = await codebolt.browser.screenshot();
console.log('✅ Screenshot taken:', screenshotResult);
console.log('Screenshot data available:', !!screenshotResult?.payload?.screenshot);
console.log('Viewport:', screenshotResult?.payload?.viewport);
// Example 2: Save screenshot to file
await codebolt.browser.newPage();
await codebolt.browser.goToPage('https://example.com');
await new Promise(resolve => setTimeout(resolve, 2000));
const screenshot = await codebolt.browser.screenshot();
if (screenshot.payload?.screenshot) {
// Save base64 screenshot data to file
await codebolt.fs.createFile(
'screenshot.txt',
screenshot.payload.screenshot,
'./screenshots'
);
console.log('✅ Screenshot saved to file');
}
codebolt.browser.close();
// Example 3: Screenshot with error handling
async function captureScreenshotWithErrorHandling() {
try {
await codebolt.browser.goToPage('https://example.com');
await new Promise(resolve => setTimeout(resolve, 2000));
const result = await codebolt.browser.screenshot();
if (result.success && result.payload?.screenshot) {
console.log('✅ Screenshot captured successfully');
console.log('Data length:', result.payload.screenshot.length);
console.log('Viewport:', result.payload.viewport);
return result.payload.screenshot;
} else {
console.error('❌ Screenshot capture failed:', result.error);
throw new Error(result.error || 'Screenshot capture failed');
}
} catch (error) {
console.error('❌ Screenshot error:', error.message);
throw error;
}
}
// Usage
await captureScreenshotWithErrorHandling();
// Example 4: Multiple screenshots with timestamps
async function captureTimestampedScreenshots(urls) {
const screenshots = [];
for (const url of urls) {
await codebolt.browser.newPage();
await codebolt.browser.goToPage(url);
await new Promise(resolve => setTimeout(resolve, 2000));
const screenshot = await codebolt.browser.screenshot();
if (screenshot.payload?.screenshot) {
const filename = `screenshot-${Date.now()}.txt`;
await codebolt.fs.createFile(
filename,
screenshot.payload.screenshot,
'./screenshots'
);
screenshots.push({
url,
filename,
timestamp: new Date().toISOString(),
viewport: screenshot.payload.viewport
});
console.log(`✅ Screenshot saved: ${filename}`);
}
codebolt.browser.close();
}
return screenshots;
}
// Usage
const urls = ['https://example.com', 'https://github.com', 'https://stackoverflow.com'];
const capturedScreenshots = await captureTimestampedScreenshots(urls);
// Example 5: Screenshot comparison
async function compareScreenshots(url1, url2) {
// Capture first screenshot
await codebolt.browser.newPage();
await codebolt.browser.goToPage(url1);
await new Promise(resolve => setTimeout(resolve, 2000));
const screenshot1 = await codebolt.browser.screenshot();
codebolt.browser.close();
// Capture second screenshot
await codebolt.browser.newPage();
await codebolt.browser.goToPage(url2);
await new Promise(resolve => setTimeout(resolve, 2000));
const screenshot2 = await codebolt.browser.screenshot();
codebolt.browser.close();
// Compare
const comparison = {
url1,
url2,
screenshot1Size: screenshot1.payload?.screenshot?.length || 0,
screenshot2Size: screenshot2.payload?.screenshot?.length || 0,
viewport1: screenshot1.payload?.viewport,
viewport2: screenshot2.payload?.viewport,
timestamp: new Date().toISOString()
};
console.log('📊 Screenshot comparison:', comparison);
return comparison;
}
// Usage
await compareScreenshots('https://example.com', 'https://example.org');
// Example 6: Progressive page capture
async function captureScrollingPage(url, maxScrolls = 5) {
await codebolt.browser.newPage();
await codebolt.browser.goToPage(url);
await new Promise(resolve => setTimeout(resolve, 2000));
const screenshots = [];
for (let i = 0; i < maxScrolls; i++) {
// Capture current viewport
const screenshot = await codebolt.browser.screenshot();
if (screenshot.payload?.screenshot) {
const filename = `scroll-${i + 1}-${Date.now()}.txt`;
await codebolt.fs.createFile(
filename,
screenshot.payload.screenshot,
'./screenshots'
);
screenshots.push({
sequence: i + 1,
filename,
viewport: screenshot.payload.viewport
});
console.log(`✅ Captured scroll position ${i + 1}/${maxScrolls}`);
}
// Scroll down for next capture
await codebolt.browser.scroll('down', 500);
await new Promise(resolve => setTimeout(resolve, 1000));
}
codebolt.browser.close();
return screenshots;
}
// Usage
const scrollingScreenshots = await captureScrollingPage('https://example.com/long-page');
// Example 7: Screenshot with metadata
async function captureScreenshotWithMetadata(url, metadata = {}) {
await codebolt.browser.newPage();
await codebolt.browser.goToPage(url);
await new Promise(resolve => setTimeout(resolve, 2000));
const screenshot = await codebolt.browser.screenshot();
const currentUrl = await codebolt.browser.getUrl();
const browserInfo = await codebolt.browser.getBrowserInfo();
const screenshotData = {
url: currentUrl.payload.currentUrl,
screenshot: screenshot.payload?.screenshot,
viewport: screenshot.payload?.viewport,
browserInfo: browserInfo.payload,
metadata: {
timestamp: new Date().toISOString(),
...metadata
}
};
// Save as JSON
await codebolt.fs.createFile(
'screenshot-metadata.json',
JSON.stringify(screenshotData, null, 2),
'./screenshots'
);
console.log('✅ Screenshot with metadata saved');
codebolt.browser.close();
return screenshotData;
}
// Usage
await captureScreenshotWithMetadata('https://example.com', {
tags: ['homepage', 'production'],
environment: 'staging'
});
// Example 8: Batch screenshot capture
async function batchCaptureScreenshots(configs) {
const results = [];
for (const config of configs) {
try {
await codebolt.browser.newPage();
await codebolt.browser.goToPage(config.url);
// Custom wait time per config
await new Promise(resolve => setTimeout(resolve, config.waitTime || 2000));
const screenshot = await codebolt.browser.screenshot();
if (screenshot.payload?.screenshot) {
const filename = config.filename || `${config.name}-${Date.now()}.txt`;
await codebolt.fs.createFile(
filename,
screenshot.payload.screenshot,
config.outputPath || './screenshots'
);
results.push({
name: config.name,
url: config.url,
filename,
success: true,
viewport: screenshot.payload.viewport
});
console.log(`✅ Captured: ${config.name}`);
} else {
results.push({
name: config.name,
url: config.url,
success: false,
error: 'No screenshot data'
});
}
codebolt.browser.close();
} catch (error) {
results.push({
name: config.name,
url: config.url,
success: false,
error: error.message
});
console.error(`❌ Failed to capture ${config.name}:`, error.message);
}
}
console.log(`📊 Batch capture complete: ${results.filter(r => r.success).length}/${results.length} successful`);
return results;
}
// Usage
const screenshotConfigs = [
{ name: 'homepage', url: 'https://example.com', filename: 'home.png' },
{ name: 'about', url: 'https://example.com/about', waitTime: 3000 },
{ name: 'contact', url: 'https://example.com/contact', outputPath: './screenshots/contact' }
];
await batchCaptureScreenshots(screenshotConfigs);
// Example 9: Screenshot for visual regression testing
async function visualRegressionTest(url, baselinePath) {
// Capture current screenshot
await codebolt.browser.newPage();
await codebolt.browser.goToPage(url);
await new Promise(resolve => setTimeout(resolve, 2000));
const currentScreenshot = await codebolt.browser.screenshot();
// Read baseline if exists
const baselineExists = await codebolt.fs.readFile(baselinePath);
if (baselineExists.success) {
// Compare with baseline (simplified comparison)
const currentSize = currentScreenshot.payload?.screenshot?.length || 0;
const baselineSize = baselineExists.content.length;
const difference = Math.abs(currentSize - baselineSize);
const differencePercent = (difference / baselineSize) * 100;
console.log(`