c165f2f788
Agrega 19 issues técnicas documentando funcionalidades implementadas y pendientes. Issues completadas (movidas a dev/issues/completed/): - 001-conversor-web-markdown.md - 002-accessibility-tree.md - 003-gestion-cookies-perfil.md - 004-gestion-extensiones-chrome.md - 005-eliminar-timeouts-innecesarios.md Issues implementadas: - 006-manejo-tabs-ventanas.md - 016-manejo-iframes.md - 017-actions-api.md - 018-file-uploads.md - 019-expected-conditions-mejoradas.md Issues pendientes (media prioridad): - 007-alert-prompt-confirm-handling.md - 008-screenshot-elementos-especificos.md - 009-pdf-generation.md - 010-device-emulation-completo.md - 011-downloads-handling.md Issues pendientes (baja prioridad / avanzado): - 012-browser-contexts-multi-sesion.md - 013-video-recording.md - 014-network-mocking-avanzado.md - 015-geolocation-permissions.md Incluye también dev/NUEVAS_FUNCIONALIDADES.md con resumen completo. Directorio: dev/
2.9 KiB
2.9 KiB
Issue #014: Network Mocking Avanzado
Tipo: Enhancement Prioridad: Baja (Avanzado) Estado: Pendiente
Descripción
Implementar sistema avanzado de interceptación y mocking de requests HTTP/HTTPS.
Funcionalidad deseada
- Interceptar requests antes de enviar
- Modificar request (URL, headers, body, method)
- Mock responses completas
- Simular latencia de red
- Simular errores de red
- Registro de todas las requests
- Pattern matching avanzado (regex, wildcards)
- Condicional (solo interceptar si...)
API propuesta
type MockResponse struct {
Status int
Headers map[string]string
Body string
Delay time.Duration
}
type InterceptorFunc func(req *Request) (*MockResponse, error)
type RequestPattern struct {
URL string // Glob o regex
Method string // GET, POST, etc.
Condition func(*Request) bool
}
func (b *Browser) InterceptRequest(ctx context.Context, pattern RequestPattern, handler InterceptorFunc) error
func (b *Browser) MockResponse(ctx context.Context, pattern string, response *MockResponse) error
func (b *Browser) AbortRequest(ctx context.Context, pattern string) error
func (b *Browser) SimulateOffline(ctx context.Context) error
func (b *Browser) SimulateSlowConnection(ctx context.Context, downloadThroughput, uploadThroughput int) error
func (b *Browser) GetAllRequests(ctx context.Context) ([]*Request, error)
Uso
Mock API response
b.MockResponse(ctx, "**/api/users", &browser.MockResponse{
Status: 200,
Headers: map[string]string{
"Content-Type": "application/json",
},
Body: `{"users": [{"id": 1, "name": "Test"}]}`,
Delay: 100 * time.Millisecond,
})
Interceptar y modificar
b.InterceptRequest(ctx, browser.RequestPattern{
URL: "**/api/**",
}, func(req *browser.Request) (*browser.MockResponse, error) {
// Modificar headers
req.Headers["Authorization"] = "Bearer fake-token"
// Dejar continuar request (nil = no mockear)
return nil, nil
})
Simular error de red
b.AbortRequest(ctx, "**/slow-endpoint")
Simular conexión lenta
b.SimulateSlowConnection(ctx,
500*1024, // 500 KB/s download
100*1024, // 100 KB/s upload
)
Capturar todas las requests
requests, _ := b.GetAllRequests(ctx)
for _, req := range requests {
log.Printf("%s %s - %d", req.Method, req.URL, req.StatusCode)
}
CDP Methods
Fetch.enable- Habilitar interceptaciónFetch.requestPaused- Request interceptadoFetch.continueRequest- Continuar con cambiosFetch.fulfillRequest- Mock responseFetch.failRequest- Abortar requestNetwork.emulateNetworkConditions- Simular latencia
Referencias
- CDP Fetch: https://chromedevtools.github.io/devtools-protocol/tot/Fetch/
- Playwright route: https://playwright.dev/docs/network
- Puppeteer interception: https://pptr.dev/guides/request-interception