diff --git a/playwright/async_api.py b/playwright/async_api.py index 490f41e53..b4ec806f5 100644 --- a/playwright/async_api.py +++ b/playwright/async_api.py @@ -5291,6 +5291,18 @@ def contexts(self) -> typing.List["BrowserContext"]: """ return mapping.from_impl_list(self._impl_obj.contexts) + @property + def version(self) -> str: + """Browser.version + + Returns the browser version. + + Returns + ------- + str + """ + return mapping.from_maybe_impl(self._impl_obj.version) + def isConnected(self) -> bool: """Browser.isConnected @@ -5484,17 +5496,6 @@ async def close(self) -> NoneType: """ return mapping.from_maybe_impl(await self._impl_obj.close()) - async def version(self) -> str: - """Browser.version - - Returns the browser version. - - Returns - ------- - str - """ - return mapping.from_maybe_impl(await self._impl_obj.version()) - mapping.register(BrowserImpl, Browser) diff --git a/playwright/browser.py b/playwright/browser.py index 72261bbf5..edd3f7b10 100644 --- a/playwright/browser.py +++ b/playwright/browser.py @@ -129,5 +129,6 @@ async def close(self) -> None: self._is_closed_or_closing = True await self._channel.send("close") - async def version(self) -> str: - return await self._channel.send("version") + @property + def version(self) -> str: + return self._initializer["version"] diff --git a/playwright/sync_api.py b/playwright/sync_api.py index 8ea629752..b8fc47675 100644 --- a/playwright/sync_api.py +++ b/playwright/sync_api.py @@ -5519,6 +5519,18 @@ def contexts(self) -> typing.List["BrowserContext"]: """ return mapping.from_impl_list(self._impl_obj.contexts) + @property + def version(self) -> str: + """Browser.version + + Returns the browser version. + + Returns + ------- + str + """ + return mapping.from_maybe_impl(self._impl_obj.version) + def isConnected(self) -> bool: """Browser.isConnected @@ -5716,17 +5728,6 @@ def close(self) -> NoneType: """ return mapping.from_maybe_impl(self._sync(self._impl_obj.close())) - def version(self) -> str: - """Browser.version - - Returns the browser version. - - Returns - ------- - str - """ - return mapping.from_maybe_impl(self._sync(self._impl_obj.version())) - mapping.register(BrowserImpl, Browser) diff --git a/tests/async/test_browser.py b/tests/async/test_browser.py new file mode 100644 index 000000000..167a09f20 --- /dev/null +++ b/tests/async/test_browser.py @@ -0,0 +1,50 @@ +# 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 + +import pytest + +from playwright import Error +from playwright.async_api import Browser + + +async def test_should_create_new_page(browser): + page1 = await browser.newPage() + assert len(browser.contexts) == 1 + + page2 = await browser.newPage() + 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): + page = await browser.newPage() + with pytest.raises(Error) as exc: + await page.context.newPage() + await page.close() + assert "Please use browser.newContext()" in exc.value.message + + +async def test_version_should_work(browser: Browser, is_chromium): + version = browser.version + if is_chromium: + assert re.match(r"^\d+\.\d+\.\d+\.\d+$", version) + else: + assert re.match(r"^\d+\.\d+$", version)