# Copyright (c) Microsoft Corporation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import re from typing import Dict import pytest from playwright.async_api import Browser, BrowserType, Error async def test_should_create_new_page(browser: Browser) -> None: page1 = await browser.new_page() assert len(browser.contexts) == 1 page2 = await browser.new_page() assert len(browser.contexts) == 2 await page1.close() assert len(browser.contexts) == 1 await page2.close() assert len(browser.contexts) == 0 async def test_should_throw_upon_second_create_new_page(browser: Browser) -> None: page = await browser.new_page() with pytest.raises(Error) as exc: await page.context.new_page() await page.close() assert "Please use browser.new_context()" in exc.value.message async def test_version_should_work(browser: Browser, is_chromium: bool) -> None: version = browser.version if is_chromium: assert re.match(r"^\d+\.\d+\.\d+\.\d+$", version) else: assert re.match(r"^\d+\.\d+", version) async def test_should_return_browser_type( browser: Browser, browser_type: BrowserType ) -> None: assert browser.browser_type is browser_type async def test_bind_should_return_endpoint_and_allow_unbind( browser_type: BrowserType, launch_arguments: Dict ) -> None: browser = await browser_type.launch(**launch_arguments) try: result = await browser.bind("test-server") assert "endpoint" in result assert isinstance(result["endpoint"], str) assert len(result["endpoint"]) > 0 await browser.unbind() finally: await browser.close() async def test_should_fire_context_event_on_new_context(browser: Browser) -> None: # Ported from upstream tests/library/browser.spec.ts. events = [] browser.on("context", lambda ctx: events.append(ctx)) context = await browser.new_context() try: assert events == [context] finally: await context.close()