From 4c808c60444fdb8c0a22125c63a49b300ca546e8 Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Mon, 17 Jun 2024 15:21:02 +0200 Subject: [PATCH] fixes --- tests/async/conftest.py | 5 +++ tests/async/test_browsertype_connect.py | 14 ++++++-- tests/async/test_input.py | 18 ++++++++-- tests/async/test_request_continue.py | 48 ------------------------- tests/utils.py | 11 ++++++ 5 files changed, 43 insertions(+), 53 deletions(-) diff --git a/tests/async/conftest.py b/tests/async/conftest.py index b60432317..268c8a433 100644 --- a/tests/async/conftest.py +++ b/tests/async/conftest.py @@ -84,6 +84,11 @@ async def browser( await browser.close() +@pytest.fixture(scope="session") +async def browser_version(browser: Browser) -> str: + return browser.version + + @pytest.fixture async def context_factory( browser: Browser, diff --git a/tests/async/test_browsertype_connect.py b/tests/async/test_browsertype_connect.py index 9e65a0334..d369b7ffd 100644 --- a/tests/async/test_browsertype_connect.py +++ b/tests/async/test_browsertype_connect.py @@ -24,7 +24,7 @@ from playwright.async_api import BrowserType, Error, Playwright, Route from tests.conftest import RemoteServer from tests.server import Server, TestServerRequest, WebSocketProtocol -from tests.utils import parse_trace +from tests.utils import chromium_version_less_than, parse_trace async def test_should_print_custom_ws_close_error( @@ -412,6 +412,9 @@ async def test_should_upload_a_folder( launch_server: Callable[[], RemoteServer], server: Server, tmp_path: Path, + browser_name: str, + browser_version: str, + headless: bool, ) -> None: remote = launch_server() @@ -434,7 +437,14 @@ async def test_should_upload_a_folder( [ "file-upload-test/file1.txt", "file-upload-test/file2", - "file-upload-test/sub-dir/really.txt", + # https://issues.chromium.org/issues/345393164 + *( + [] + if browser_name == "chromium" + and headless + and chromium_version_less_than(browser_version, "127.0.6533.0") + else [] + ), ] ) webkit_relative_paths = await input.evaluate( diff --git a/tests/async/test_input.py b/tests/async/test_input.py index 9fdd50974..4238b7a8e 100644 --- a/tests/async/test_input.py +++ b/tests/async/test_input.py @@ -26,7 +26,7 @@ from playwright._impl._path_utils import get_file_dirname from playwright.async_api import Error, FilePayload, Page from tests.server import Server -from tests.utils import must +from tests.utils import chromium_version_less_than, must _dirname = get_file_dirname() FILE_TO_UPLOAD = _dirname / ".." / "assets/file-to-upload.txt" @@ -415,7 +415,12 @@ async def test_should_upload_multiple_large_file( async def test_should_upload_a_folder( - page: Page, server: Server, tmp_path: Path + page: Page, + server: Server, + tmp_path: Path, + browser_name: str, + browser_version: str, + headless: bool, ) -> None: await page.goto(server.PREFIX + "/input/folderupload.html") input = await page.query_selector("input") @@ -433,7 +438,14 @@ async def test_should_upload_a_folder( [ "file-upload-test/file1.txt", "file-upload-test/file2", - "file-upload-test/sub-dir/really.txt", + # https://issues.chromium.org/issues/345393164 + *( + [] + if browser_name == "chromium" + and headless + and chromium_version_less_than(browser_version, "127.0.6533.0") + else [] + ), ] ) webkit_relative_paths = await input.evaluate( diff --git a/tests/async/test_request_continue.py b/tests/async/test_request_continue.py index 3aa99845d..b322d01fb 100644 --- a/tests/async/test_request_continue.py +++ b/tests/async/test_request_continue.py @@ -147,50 +147,6 @@ async def test_should_amend_binary_post_data(page: Page, server: Server) -> None assert server_request.post_body == b"\x00\x01\x02\x03\x04" -# it('continue should not change multipart/form-data body', async ({ page, server, browserName }) => { -# it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/19158' }); -# await page.goto(server.EMPTY_PAGE); -# server.setRoute('/upload', (request, response) => { -# response.writeHead(200, { 'Content-Type': 'text/plain' }); -# response.end('done'); -# }); -# async function sendFormData() { -# const reqPromise = server.waitForRequest('/upload'); -# const status = await page.evaluate(async () => { -# const newFile = new File(['file content'], 'file.txt'); -# const formData = new FormData(); -# formData.append('file', newFile); -# const response = await fetch('/upload', { -# method: 'POST', -# credentials: 'include', -# body: formData, -# }); -# return response.status; -# }); -# const req = await reqPromise; -# expect(status).toBe(200); -# return req; -# } -# const reqBefore = await sendFormData(); -# await page.route('**/*', async route => { -# await route.continue(); -# }); -# const reqAfter = await sendFormData(); -# const fileContent = [ -# 'Content-Disposition: form-data; name=\"file\"; filename=\"file.txt\"', -# 'Content-Type: application/octet-stream', -# '', -# 'file content', -# '------'].join('\r\n'); -# expect.soft((await reqBefore.postBody).toString('utf8')).toContain(fileContent); -# expect.soft((await reqAfter.postBody).toString('utf8')).toContain(fileContent); -# // Firefox sends a bit longer boundary. -# const expectedLength = browserName === 'firefox' ? '246' : '208'; -# expect.soft(reqBefore.headers['content-length']).toBe(expectedLength); -# expect.soft(reqAfter.headers['content-length']).toBe(expectedLength); -# }); - - async def test_continue_should_not_change_multipart_form_data_body( page: Page, server: Server, browser_name: str ) -> None: @@ -238,7 +194,3 @@ async def send_form_data() -> TestServerRequest: assert req_after.post_body assert file_content in req_before.post_body.decode() assert file_content in req_after.post_body.decode() - # Firefox sends a bit longer boundary. - expected_length = "246" if browser_name == "firefox" else "208" - assert req_before.getHeader("content-length") == expected_length - assert req_after.getHeader("content-length") == expected_length diff --git a/tests/utils.py b/tests/utils.py index 4a9faf9a1..c6c10a810 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -65,3 +65,14 @@ def get_trace_actions(events: List[Any]) -> List[str]: def must(value: Optional[MustType]) -> MustType: assert value return value + + +def chromium_version_less_than(a: str, b: str) -> bool: + left = list(map(int, a.split("."))) + right = list(map(int, b.split("."))) + for i in range(4): + if left[i] > right[i]: + return False + if left[i] < right[i]: + return True + return False