Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
options: Dict = None, **kwargs: Any) -> None:
"""Make new navigator watcher."""
options = merge_dict(options, kwargs)
self._validate_options(options)
self._frameManager = frameManager
self._frame = frame
self._initialLoaderId = frame._loaderId
self._timeout = timeout
self._hasSameDocumentNavigation = False
self._eventListeners = [
helper.addEventListener(
self._frameManager,
FrameManager.Events.LifecycleEvent,
self._checkLifecycleComplete,
),
helper.addEventListener(
self._frameManager,
FrameManager.Events.FrameNavigatedWithinDocument,
self._navigatedWithinDocument,
),
helper.addEventListener(
self._frameManager,
FrameManager.Events.FrameDetached,
self._checkLifecycleComplete,
),
]
self._loop = self._frameManager._client._loop
self._lifecycleCompletePromise = self._loop.create_future()
self._navigationPromise = self._loop.create_task(asyncio.wait([
self._lifecycleCompletePromise,
self._createTimeoutPromise(),
async def start(self, options: Dict = None, **kwargs: Any) -> None:
"""Start coverage measurement."""
options = merge_dict(options, kwargs)
if self._enabled:
raise PageError('JSCoverage is always enabled.')
self._resetOnNavigation = (True if 'resetOnNavigation' not in options
else bool(options['resetOnNavigation']))
self._reportAnonymousScript = bool(options.get('reportAnonymousScript')) # noqa: E501
self._enabled = True
self._scriptURLs.clear()
self._scriptSources.clear()
self._eventListeners = [
helper.addEventListener(
self._client, 'Debugger.scriptParsed',
lambda e: self._client._loop.create_task(
self._onScriptParsed(e))),
helper.addEventListener(
self._client, 'Runtime.executionContextsCleared',
self._onExecutionContextsCleared),
]
await self._client.send('Profiler.enable')
await self._client.send('Profiler.startPreciseCoverage',
{'callCount': False, 'detailed': True})
await self._client.send('Debugger.enable')
await self._client.send('Debugger.setSkipAllPauses', {'skip': True})
async def ensureInitialPage(self, browser: Browser) -> None:
"""Wait for initial page target to be created."""
for target in browser.targets():
if target.type == 'page':
return
initialPagePromise = self._loop.create_future()
def initialPageCallback() -> None:
initialPagePromise.set_result(True)
def check_target(target: Target) -> None:
if target.type == 'page':
initialPageCallback()
listeners = [addEventListener(browser, 'targetcreated', check_target)]
await initialPagePromise
removeEventListeners(listeners)
def __init__(self, frameManager: FrameManager, frame: Frame, timeout: int,
options: Dict = None, **kwargs: Any) -> None:
"""Make new navigator watcher."""
options = merge_dict(options, kwargs)
self._validate_options(options)
self._frameManager = frameManager
self._frame = frame
self._initialLoaderId = frame._loaderId
self._timeout = timeout
self._hasSameDocumentNavigation = False
self._eventListeners = [
helper.addEventListener(
self._frameManager,
FrameManager.Events.LifecycleEvent,
self._checkLifecycleComplete,
),
helper.addEventListener(
self._frameManager,
FrameManager.Events.FrameNavigatedWithinDocument,
self._navigatedWithinDocument,
),
helper.addEventListener(
self._frameManager,
FrameManager.Events.FrameDetached,
self._checkLifecycleComplete,
),
]
self._loop = self._frameManager._client._loop
async def start(self, options: Dict = None, **kwargs: Any) -> None:
"""Start coverage measurement."""
options = merge_dict(options, kwargs)
if self._enabled:
raise PageError('CSSCoverage is already enabled.')
self._resetOnNavigation = (True if 'resetOnNavigation' not in options
else bool(options['resetOnNavigation']))
self._enabled = True
self._stylesheetURLs.clear()
self._stylesheetSources.clear()
self._eventListeners = [
helper.addEventListener(
self._client, 'CSS.styleSheetAdded',
lambda e: self._client._loop.create_task(
self._onStyleSheet(e))),
helper.addEventListener(
self._client, 'Runtime.executionContextsCleared',
self._onExecutionContextsCleared),
]
await self._client.send('DOM.enable')
await self._client.send('CSS.enable')
await self._client.send('CSS.startRuleUsageTracking')
.. note::
Headless mode doesn't support navigation to a PDF document.
"""
options = merge_dict(options, kwargs)
mainFrame = self._frameManager.mainFrame
if mainFrame is None:
raise PageError('No main frame.')
referrer = self._networkManager.extraHTTPHeaders().get('referer', '')
requests: Dict[str, Request] = dict()
def set_request(req: Request) -> None:
if req.url not in requests:
requests[req.url] = req
eventListeners = [helper.addEventListener(
self._networkManager,
NetworkManager.Events.Request,
set_request,
)]
timeout = options.get('timeout', self._defaultNavigationTimeout)
watcher = NavigatorWatcher(self._frameManager, mainFrame, timeout,
options)
result = await self._navigate(url, referrer)
if result is not None:
raise PageError(result)
result = await watcher.navigationPromise()
watcher.cancel()
helper.removeEventListeners(eventListeners)
error = result[0].pop().exception() # type: ignore
page.waitForNavigation(),
])
.. note::
Usage of the History API to change the URL is considered a
navigation.
""" # noqa: E501
options = merge_dict(options, kwargs)
mainFrame = self._frameManager.mainFrame
if mainFrame is None:
raise PageError('No main frame.')
timeout = options.get('timeout', self._defaultNavigationTimeout)
watcher = NavigatorWatcher(self._frameManager, mainFrame, timeout,
options)
responses: Dict[str, Response] = dict()
listener = helper.addEventListener(
self._networkManager,
NetworkManager.Events.Response,
lambda response: responses.__setitem__(response.url, response)
)
result = await watcher.navigationPromise()
helper.removeEventListeners([listener])
error = result[0].pop().exception()
if error:
raise error
response = responses.get(self.url, None)
return response
async def start(self, options: Dict = None, **kwargs: Any) -> None:
"""Start coverage measurement."""
options = merge_dict(options, kwargs)
if self._enabled:
raise PageError('CSSCoverage is already enabled.')
self._resetOnNavigation = (True if 'resetOnNavigation' not in options
else bool(options['resetOnNavigation']))
self._enabled = True
self._stylesheetURLs.clear()
self._stylesheetSources.clear()
self._eventListeners = [
helper.addEventListener(
self._client, 'CSS.styleSheetAdded',
lambda e: self._client._loop.create_task(
self._onStyleSheet(e))),
helper.addEventListener(
self._client, 'Runtime.executionContextsCleared',
self._onExecutionContextsCleared),
]
await self._client.send('DOM.enable')
await self._client.send('CSS.enable')
await self._client.send('CSS.startRuleUsageTracking')