From 42f24f354c4fee905d94fe457557f85974e3a481 Mon Sep 17 00:00:00 2001 From: YusukeIwaki Date: Tue, 21 Jun 2022 01:14:16 +0900 Subject: [PATCH] fix: consider existing frames when waiting for a frame https://github.com/puppeteer/puppeteer/pull/8200 --- lib/puppeteer/page.rb | 4 ++++ spec/integration/oopif_spec.rb | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/lib/puppeteer/page.rb b/lib/puppeteer/page.rb index 68d1e83d..979bd89b 100644 --- a/lib/puppeteer/page.rb +++ b/lib/puppeteer/page.rb @@ -814,6 +814,10 @@ def wait_for_frame(url: nil, predicate: nil, timeout: nil) predicate end + frames.each do |frame| + return frame if frame_predicate.call(frame) + end + wait_for_frame_manager_event( FrameManagerEmittedEvents::FrameAttached, FrameManagerEmittedEvents::FrameNavigated, diff --git a/spec/integration/oopif_spec.rb b/spec/integration/oopif_spec.rb index ac5d7d36..a32f4d4c 100644 --- a/spec/integration/oopif_spec.rb +++ b/spec/integration/oopif_spec.rb @@ -221,4 +221,12 @@ def oopifs(context) expect(result_bounding_box.x).to be > 150 # padding + margin + border left expect(result_bounding_box.y).to be > 150 # padding + margin + border top end + + it 'should resolve immediately if the frame already exists' do + page.goto(server_empty_page) + attach_frame(page, 'frame2', "#{server_cross_process_prefix}/empty.html") + predicate = ->(frame) { frame.url&.end_with?('/empty.html') } + frame = page.wait_for_frame(predicate: predicate) + expect(frame.url).to end_with("/empty.html") + end end