82 lines
2.4 KiB
Python
82 lines
2.4 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
import pytest
|
|
|
|
from crawlee.browsers import PlaywrightBrowserPlugin
|
|
|
|
if TYPE_CHECKING:
|
|
from collections.abc import AsyncGenerator
|
|
|
|
from yarl import URL
|
|
|
|
|
|
@pytest.fixture
|
|
async def plugin() -> AsyncGenerator[PlaywrightBrowserPlugin, None]:
|
|
async with PlaywrightBrowserPlugin() as plugin:
|
|
yield plugin
|
|
|
|
|
|
async def test_initial_state() -> None:
|
|
plugin = PlaywrightBrowserPlugin(
|
|
browser_type='chromium',
|
|
browser_launch_options={'headless': False},
|
|
browser_new_context_options={'viewport': {'width': 1920, 'height': 1080}},
|
|
max_open_pages_per_browser=10,
|
|
)
|
|
|
|
# Test initial state
|
|
assert plugin.browser_type == 'chromium'
|
|
assert 'headless' in plugin.browser_launch_options
|
|
assert plugin.browser_launch_options['headless'] is False
|
|
assert plugin.browser_new_context_options == {'viewport': {'width': 1920, 'height': 1080}}
|
|
assert plugin.max_open_pages_per_browser == 10
|
|
|
|
|
|
async def test_new_browser(plugin: PlaywrightBrowserPlugin, server_url: URL) -> None:
|
|
browser_controller = await plugin.new_browser()
|
|
|
|
assert browser_controller.is_browser_connected
|
|
|
|
page = await browser_controller.new_page()
|
|
await page.goto(str(server_url))
|
|
|
|
await page.close()
|
|
await browser_controller.close()
|
|
|
|
assert not browser_controller.is_browser_connected
|
|
|
|
|
|
async def test_multiple_new_browsers(plugin: PlaywrightBrowserPlugin) -> None:
|
|
browser_controller_1 = await plugin.new_browser()
|
|
browser_controller_2 = await plugin.new_browser()
|
|
|
|
assert browser_controller_1 is not browser_controller_2
|
|
|
|
|
|
async def test_methods_raise_error_when_not_active() -> None:
|
|
plugin = PlaywrightBrowserPlugin()
|
|
|
|
assert plugin.active is False
|
|
|
|
with pytest.raises(RuntimeError, match=r'Plugin is not active'):
|
|
await plugin.new_browser()
|
|
|
|
with pytest.raises(RuntimeError, match=r'Plugin is already active.'):
|
|
async with plugin, plugin:
|
|
pass
|
|
|
|
async with plugin:
|
|
assert plugin.active is True
|
|
|
|
|
|
async def raise_error_if_chrome_and_executable_path() -> None:
|
|
with pytest.raises(
|
|
ValueError, match=r'Cannot use `use_chrome` with `Configuration.default_browser_path` or `executable_path` set.'
|
|
):
|
|
PlaywrightBrowserPlugin(
|
|
browser_type='chrome',
|
|
browser_launch_options={'executable_path': '/path/to/chrome'},
|
|
)
|