# Issue #016: Manejo de iFrames **Tipo**: Enhancement **Prioridad**: Alta **Estado**: En progreso ## Descripción Implementar capacidad para trabajar con elementos dentro de iframes. ## Funcionalidad deseada - Cambiar contexto a un iframe específico - Volver al contexto principal (main frame) - Listar todos los iframes de la página - Detectar cuando iframe carga - Ejecutar JavaScript dentro de iframe - Click/Type en elementos dentro de iframe - Navegación en cascada (frame -> subframe -> subsubframe) ## API propuesta ```go // Frame representa un iframe type Frame struct { ID string ParentID string URL string Name string FrameTree []*Frame // Sub-frames } // SwitchToFrame cambia contexto a un iframe func (b *Browser) SwitchToFrame(ctx context.Context, selector string) error // SwitchToFrameByName cambia a iframe por atributo name func (b *Browser) SwitchToFrameByName(ctx context.Context, name string) error // SwitchToMainFrame vuelve al contexto principal func (b *Browser) SwitchToMainFrame(ctx context.Context) error // GetFrames obtiene todos los frames de la página func (b *Browser) GetFrames(ctx context.Context) ([]*Frame, error) // WaitForFrame espera a que un frame cargue func (b *Browser) WaitForFrame(ctx context.Context, selector string) error // EvaluateInFrame ejecuta JS en un frame específico func (b *Browser) EvaluateInFrame(ctx context.Context, frameID string, script string) (*EvaluateResult, error) ``` ## Uso ```go // Cambiar a iframe b.SwitchToFrame(ctx, "#payment-iframe") // Interactuar dentro del iframe b.Type(ctx, "#card-number", "1234567890123456", nil) b.Click(ctx, "#submit-payment") // Volver al frame principal b.SwitchToMainFrame(ctx) // Listar frames frames, _ := b.GetFrames(ctx) for _, frame := range frames { log.Printf("Frame: %s - %s", frame.Name, frame.URL) } ``` ## CDP Methods - `Page.getFrameTree` - Árbol de frames - `DOM.describeNode` - Info de frame node - `Runtime.evaluate` con `contextId` específico ## Referencias - CDP Page.getFrameTree: https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-getFrameTree - Selenium frames: https://www.selenium.dev/documentation/webdriver/interactions/frames/ - Playwright frames: https://playwright.dev/docs/frames