# Issue #010: Device Emulation Completo **Tipo**: Enhancement **Prioridad**: Media **Estado**: Pendiente ## Descripción Implementar emulación completa de dispositivos móviles y tablets (viewport, user-agent, touch, geolocation). ## Funcionalidad deseada - Emular dispositivos predefinidos (iPhone, iPad, Android, etc.) - Viewport personalizado (width, height, deviceScaleFactor) - User-Agent específico de dispositivo - Touch events habilitados - Orientación (portrait/landscape) - Geolocation personalizada - Timezone específica - Locale/idioma - Permisos de dispositivo ## API propuesta ```go type DeviceDescriptor struct { Name string UserAgent string Viewport Viewport DeviceScaleFactor float64 IsMobile bool HasTouch bool DefaultOrientation string } type Viewport struct { Width int Height int } type EmulationOptions struct { Device *DeviceDescriptor Viewport *Viewport UserAgent string IsMobile bool HasTouch bool Orientation string // "portrait" | "landscape" Geolocation *Geolocation Timezone string Locale string } // Dispositivos predefinidos var Devices = map[string]*DeviceDescriptor{ "iPhone 13": {...}, "iPhone 13 Pro": {...}, "iPad Pro": {...}, "Pixel 5": {...}, "Galaxy S21": {...}, } func (b *Browser) Emulate(ctx context.Context, opts *EmulationOptions) error func (b *Browser) EmulateDevice(ctx context.Context, deviceName string) error func (b *Browser) SetViewport(ctx context.Context, width, height int) error func (b *Browser) SetUserAgent(ctx context.Context, userAgent string) error func (b *Browser) SetTouchEnabled(ctx context.Context, enabled bool) error func (b *Browser) SetOrientation(ctx context.Context, orientation string) error ``` ## Uso ```go // Emular iPhone 13 b.EmulateDevice(ctx, "iPhone 13") // Emulación personalizada opts := &browser.EmulationOptions{ Viewport: &browser.Viewport{Width: 375, Height: 812}, UserAgent: "Mozilla/5.0 (iPhone...)", IsMobile: true, HasTouch: true, Orientation: "portrait", } b.Emulate(ctx, opts) ``` ## CDP Methods - `Emulation.setDeviceMetricsOverride` - `Emulation.setUserAgentOverride` - `Emulation.setTouchEmulationEnabled` - `Emulation.setEmulatedMedia` - `Emulation.setGeolocationOverride` - `Emulation.setTimezoneOverride` - `Emulation.setLocaleOverride` ## Referencias - CDP Emulation: https://chromedevtools.github.io/devtools-protocol/tot/Emulation/ - Playwright devices: https://playwright.dev/docs/emulation - Puppeteer emulation: https://pptr.dev/guides/emulation