@@ -82,7 +82,7 @@ def __init__(
8282 self ._url = initializer ["url" ]
8383 self ._detached = False
8484 self ._child_frames : List [Frame ] = []
85- self ._page : " Page"
85+ self ._page : Optional [ Page ] = None
8686 self ._load_states : Set [str ] = set (initializer ["loadStates" ])
8787 self ._event_emitter = EventEmitter ()
8888 self ._channel .on (
@@ -105,33 +105,24 @@ def _on_load_state(
105105 self ._event_emitter .emit ("loadstate" , add )
106106 elif remove and remove in self ._load_states :
107107 self ._load_states .remove (remove )
108- if (
109- not self ._parent_frame
110- and add == "load"
111- and hasattr (self , "_page" )
112- and self ._page
113- ):
108+ if not self ._parent_frame and add == "load" and self ._page :
114109 self ._page .emit ("load" , self ._page )
115- if (
116- not self ._parent_frame
117- and add == "domcontentloaded"
118- and hasattr (self , "_page" )
119- and self ._page
120- ):
110+ if not self ._parent_frame and add == "domcontentloaded" and self ._page :
121111 self ._page .emit ("domcontentloaded" , self ._page )
122112
123113 def _on_frame_navigated (self , event : FrameNavigatedEvent ) -> None :
124114 self ._url = event ["url" ]
125115 self ._name = event ["name" ]
126116 self ._event_emitter .emit ("navigated" , event )
127- if "error" not in event and hasattr ( self , "_page" ) and self ._page :
117+ if "error" not in event and self ._page :
128118 self ._page .emit ("framenavigated" , self )
129119
130120 async def _query_count (self , selector : str ) -> int :
131121 return await self ._channel .send ("queryCount" , {"selector" : selector })
132122
133123 @property
134124 def page (self ) -> "Page" :
125+ assert self ._page
135126 return self ._page
136127
137128 async def goto (
@@ -151,6 +142,7 @@ async def goto(
151142 def _setup_navigation_wait_helper (
152143 self , wait_name : str , timeout : float = None
153144 ) -> WaitHelper :
145+ assert self ._page
154146 wait_helper = WaitHelper (self ._page , f"frame.{ wait_name } " )
155147 wait_helper .reject_on_event (
156148 self ._page , "close" , Error ("Navigation failed because page was closed!" )
@@ -175,6 +167,7 @@ def expect_navigation(
175167 wait_until : DocumentLoadState = None ,
176168 timeout : float = None ,
177169 ) -> EventContextManagerImpl [Response ]:
170+ assert self ._page
178171 if not wait_until :
179172 wait_until = "load"
180173
@@ -225,6 +218,7 @@ async def wait_for_url(
225218 wait_until : DocumentLoadState = None ,
226219 timeout : float = None ,
227220 ) -> None :
221+ assert self ._page
228222 matcher = URLMatcher (self ._page ._browser_context ._options .get ("baseURL" ), url )
229223 if matcher .matches (self .url ):
230224 await self ._wait_for_load_state_impl (state = wait_until , timeout = timeout )
0 commit comments