diff --git a/interactive.go b/interactive.go index 8066fa9..db63b3f 100644 --- a/interactive.go +++ b/interactive.go @@ -95,6 +95,9 @@ func NewInteractiveBrowser(ctx context.Context, opts ...BrowserOptions) (Interac page, err := res.bctx.NewPage() if err != nil { + _ = res.bctx.Close() + _ = res.browser.Close() + _ = res.pw.Stop() ch <- result{nil, fmt.Errorf("failed to create page: %w", err)} return } @@ -112,6 +115,12 @@ func NewInteractiveBrowser(ctx context.Context, opts ...BrowserOptions) (Interac select { case <-ctx.Done(): + go func() { + r := <-ch + if r.err == nil && r.ib != nil { + _ = r.ib.Close() + } + }() return nil, ctx.Err() case r := <-ch: return r.ib, r.err diff --git a/node.go b/node.go index 3a5bce4..cf5c839 100644 --- a/node.go +++ b/node.go @@ -29,7 +29,7 @@ type node struct { } func (n node) Type(input string) error { - return n.locator.Type(input) + return n.locator.PressSequentially(input) } func (n node) Click() error { diff --git a/playwright.go b/playwright.go index 063fcbd..26c0820 100644 --- a/playwright.go +++ b/playwright.go @@ -195,6 +195,12 @@ func NewBrowser(ctx context.Context, opts ...BrowserOptions) (Browser, error) { select { case <-ctx.Done(): + go func() { + r := <-resultCh + if r.err == nil && r.browser != nil { + _ = r.browser.Close() + } + }() return nil, ctx.Err() case result := <-resultCh: return result.browser, result.err @@ -242,6 +248,7 @@ func (b playWrightBrowser) openPage(_ context.Context, target string, opts OpenP resp, err := page.Goto(target, pwOpts) if err != nil { + _ = page.Close() return nil, err } @@ -277,8 +284,8 @@ func (b playWrightBrowser) Open(ctx context.Context, url string, opts OpenPageOp func (b playWrightBrowser) Close() error { return errors.Join( - b.browser.Close(), b.ctx.Close(), + b.browser.Close(), b.pw.Stop(), ) }