From 60243ae036938532052493b32d1ab421f949dfa9 Mon Sep 17 00:00:00 2001 From: Sean Li <22557931+sean0407@users.noreply.github.com> Date: Wed, 14 Oct 2026 05:14:38 +0800 Subject: [PATCH] Ignore worker targets when listing window handles --- lib/capybara/cuprite/browser.rb | 6 +++++- spec/features/driver_spec.rb | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/lib/capybara/cuprite/browser.rb b/lib/capybara/cuprite/browser.rb index d127b0c..1aff6f5 100644 --- a/lib/capybara/cuprite/browser.rb +++ b/lib/capybara/cuprite/browser.rb @@ -110,7 +110,11 @@ def window_handle end def window_handles - targets.keys + handles = [] + targets.each_pair do |id, target| + handles << id if target.type == "page" + end + handles end def within_window(locator = nil) diff --git a/spec/features/driver_spec.rb b/spec/features/driver_spec.rb index aad2929..263ba58 100644 --- a/spec/features/driver_spec.rb +++ b/spec/features/driver_spec.rb @@ -989,6 +989,26 @@ def create_screenshot(file, *args) expect(@driver.window_handles.size).to eq(2) end + it "does not count worker targets as windows" do + worker = 'new Worker(URL.createObjectURL(new Blob(["self.onmessage = () => {}"], { type: "text/javascript" })))' + @session.visit "/" + @session.execute_script(worker) + sleep 0.1 + + expect(@driver.window_handles.size).to eq(1) + + popup = @session.window_opened_by do + @session.execute_script <<~JS + const popup = window.open("about:blank") + popup.eval('#{worker}') + JS + sleep 0.1 + end + + expect(@driver.window_handles.size).to eq(2) + @session.within_window(popup) { expect(@session.current_url).to eq("about:blank") } + end + context "a new window inherits settings" do it "inherits size" do @session.visit "/"