Example #1
0
def test_connect_to_closed_server_without_hangs(browser_type: BrowserType,
                                                launch_server):
    remote_server = launch_server()
    remote_server.kill()
    with pytest.raises(Error) as exc:
        browser_type.connect(remote_server.ws_endpoint)
    assert "websocket.connect: " in exc.value.message
Example #2
0
def test_connect_to_an_existing_cdp_session(launch_arguments: Dict,
                                            browser_type: BrowserType) -> None:
    port = find_free_port()
    browser_server = browser_type.launch(**launch_arguments,
                                         args=[
                                             f"--remote-debugging-port={port}"
                                         ])
    cdp_browser = browser_type.connect_over_cdp(f"http://localhost:{port}")
    assert len(cdp_browser.contexts) == 1
    cdp_browser.close()
    browser_server.close()
Example #3
0
def test_browser_type_connect_set_browser_connected_state(
        browser_type: BrowserType, launch_server):
    remote_server = launch_server()
    browser = browser_type.connect(remote_server.ws_endpoint)
    assert browser.is_connected()
    browser.close()
    assert browser.is_connected() is False
Example #4
0
def test_browser_type_connect_disconnected_event_should_be_emitted_when_browser_is_closed_or_server_is_closed(
    browser_type: BrowserType, launch_server: Callable[[], RemoteServer]
) -> None:
    # Launch another server to not affect other tests.
    remote = launch_server()

    browser1 = browser_type.connect(remote.ws_endpoint)
    browser2 = browser_type.connect(remote.ws_endpoint)

    disconnected1 = []
    disconnected2 = []
    browser1.on("disconnected", lambda browser: disconnected1.append(True))
    browser2.on("disconnected", lambda browser: disconnected2.append(True))

    page2 = browser2.new_page()

    browser1.close()
    assert len(disconnected1) == 1
    assert len(disconnected2) == 0

    remote.kill()
    assert len(disconnected1) == 1

    with pytest.raises(Error):
        # Tickle connection so that it gets a chance to dispatch disconnect event.
        page2.title()
    assert len(disconnected2) == 1
Example #5
0
def test_browser_type_connect_should_be_able_to_reconnect_to_a_browser(
        server: Server, browser_type: BrowserType, launch_server):
    remote_server = launch_server()
    browser = browser_type.connect(remote_server.ws_endpoint)
    browser_context = browser.new_context()
    assert len(browser_context.pages) == 0
    page = browser_context.new_page()
    assert len(browser_context.pages) == 1
    assert page.evaluate("11 * 11") == 121
    page.goto(server.EMPTY_PAGE)
    browser.close()

    browser = browser_type.connect(remote_server.ws_endpoint)
    browser_context = browser.new_context()
    page = browser_context.new_page()
    page.goto(server.EMPTY_PAGE)
    browser.close()
Example #6
0
def test_browser_type_disconnected_event_should_have_browser_as_argument(
        browser_type: BrowserType, launch_server):
    remote_server = launch_server()
    browser = browser_type.connect(remote_server.ws_endpoint)
    event_payloads = []
    browser.on("disconnected", lambda b: event_payloads.append(b))
    browser.close()
    assert event_payloads[0] == browser
Example #7
0
def test_browser_type_connect_set_browser_connected_state(
    browser_type: BrowserType, launch_server: Callable[[], RemoteServer]
) -> None:
    remote_server = launch_server()
    browser = browser_type.connect(remote_server.ws_endpoint)
    assert browser.is_connected()
    browser.close()
    assert browser.is_connected() is False
def test_context_managers(browser_type: BrowserType, launch_arguments):
    with browser_type.launch(**launch_arguments) as browser:
        with browser.new_context() as context:
            with context.new_page():
                assert len(context.pages) == 1
            assert len(context.pages) == 0
            assert len(browser.contexts) == 1
        assert len(browser.contexts) == 0
    assert not browser.is_connected()
Example #9
0
def test_browser_type_connect_should_be_able_to_connect_two_browsers_at_the_same_time(
        browser_type: BrowserType, launch_server):
    remote_server = launch_server()
    browser1 = browser_type.connect(remote_server.ws_endpoint)
    assert len(browser1.contexts) == 0
    browser1.new_context()
    assert len(browser1.contexts) == 1

    browser2 = browser_type.connect(remote_server.ws_endpoint)
    assert len(browser2.contexts) == 0
    browser2.new_context()
    assert len(browser2.contexts) == 1
    assert len(browser1.contexts) == 1

    browser1.close()
    page2 = browser2.new_page()
    # original browser should still work
    assert page2.evaluate("7 * 6") == 42

    browser2.close()
Example #10
0
def test_browser_type_connect_slow_mo(
    server: Server, browser_type: BrowserType, launch_server: Callable[[], RemoteServer]
) -> None:
    remote_server = launch_server()
    browser = browser_type.connect(remote_server.ws_endpoint, slow_mo=100)
    browser_context = browser.new_context()
    t1 = time.monotonic()
    page = browser_context.new_page()
    assert page.evaluate("11 * 11") == 121
    assert (time.monotonic() - t1) >= 0.2
    page.goto(server.EMPTY_PAGE)
    browser.close()
Example #11
0
def test_browser_type_connect_should_throw_when_used_after_is_connected_returns_false(
        browser_type: BrowserType, launch_server):
    remote_server = launch_server()
    browser = browser_type.connect(remote_server.ws_endpoint)
    page = browser.new_page()

    remote_server.kill()

    with pytest.raises(Error) as exc_info:
        page.evaluate("1 + 1")
    assert "Playwright connection closed" == exc_info.value.message
    assert browser.is_connected() is False
Example #12
0
def test_record_video_can_get_video_path_immediately(
        browser_type: BrowserType, tmpdir: Path,
        launch_arguments: Dict) -> None:
    context = browser_type.launch_persistent_context(tmpdir,
                                                     **launch_arguments,
                                                     record_video_dir=tmpdir)
    page = context.pages[0]
    video = page.video
    assert video
    path = video.path()
    assert str(tmpdir) in str(path)
    page.wait_for_timeout(1000)
    context.close()
    assert os.path.exists(path)
Example #13
0
def context(browser_type: BrowserType, browser_type_launch_args: Dict,
            browser_context_args: Dict):
    context = browser_type.launch_persistent_context(
        "", **{
            **browser_type_launch_args,
            **browser_context_args,
            "viewport": {
                'width': 1920,
                'height': 1080
            },
            "args": ['--window-position=-9,0'],
        })
    yield context
    context.close()
Example #14
0
def test_record_video_to_path_persistent(browser_type: BrowserType,
                                         tmpdir: Path, server: Server,
                                         launch_arguments: Dict) -> None:
    context = browser_type.launch_persistent_context(tmpdir,
                                                     **launch_arguments,
                                                     record_video_dir=tmpdir)
    page = context.pages[0]
    page.goto(server.PREFIX + "/grid.html")
    video = page.video
    assert video
    path = video.path()
    assert str(tmpdir) in str(path)
    page.wait_for_timeout(1000)
    context.close()
    assert os.path.exists(path)
Example #15
0
def test_browser_type_connect_should_forward_close_events_to_pages(
        browser_type: BrowserType, launch_server):
    # Launch another server to not affect other tests.
    remote = launch_server()

    browser = browser_type.connect(remote.ws_endpoint)
    context = browser.new_context()
    page = context.new_page()

    events = []
    browser.on("disconnected", lambda: events.append("browser::disconnected"))
    context.on("close", lambda: events.append("context::close"))
    page.on("close", lambda: events.append("page::close"))

    browser.close()
    assert events == ["page::close", "context::close", "browser::disconnected"]
    remote.kill()
    assert events == ["page::close", "context::close", "browser::disconnected"]
Example #16
0
def test_browser_type_connect_should_forward_close_events_on_remote_kill(
    browser_type: BrowserType, launch_server: Callable[[], RemoteServer]
) -> None:
    # Launch another server to not affect other tests.
    remote = launch_server()

    browser = browser_type.connect(remote.ws_endpoint)
    context = browser.new_context()
    page = context.new_page()

    events = []
    browser.on("disconnected", lambda context: events.append("browser::disconnected"))
    context.on("close", lambda context: events.append("context::close"))
    page.on("close", lambda page: events.append("page::close"))
    remote.kill()
    with pytest.raises(Error):
        page.title()
    assert events == ["page::close", "context::close", "browser::disconnected"]
Example #17
0
def browser(
    browser_type: BrowserType, launch_arguments: Dict
) -> Generator[Browser, None, None]:
    browser = browser_type.launch(**launch_arguments)
    yield browser
    browser.close()
Example #18
0
def _browser(
        browser_type: BrowserType,
        browser_type_launch_args: dict) -> t.Generator[Browser, None, None]:
    browser = browser_type.launch(**browser_type_launch_args)
    yield browser
    browser.close()