Best Python code snippet using playwright-python
realtimechess_test.py
Source:realtimechess_test.py  
...33	async def disable_time(self):34		await self.call("setdebug")35	async def enable_time(self):36		await self.call("setdebug", {"debug": 0})37	async def expect_websocket(self):38		return json.loads((await self.ws.receive()).data)39	async def get_state(self):40		return GameState(await self.call("getstate"))41	async def join_game(self, host):42		await self.ws.close()43		data = await self.request("/?g=" + host.game)44		self.game = host.game45		self.ws = await self.client.ws_connect("/websocket?g=" + self.game)46		return data47	async def losses(self):48		map = json.loads(await self.request("/getplayer"))49		return int(map["losses"])50	async def move(self, from_pos, to_pos):51		await self.call("move", {"from": from_pos, "to": to_pos})52	async def move_websocket(self, from_pos, to_pos):53		await self.ws.send_str("/move?g={}&from={}&to={}".format(54		    self.game, from_pos, to_pos))55	async def new_game(self):56		# Access implementation detail to restore cookies.57		self.client.session._cookie_jar = self.cookie_jar58		response = await self.client.request("GET", "/")59		response.raise_for_status()60		self.game = response.url.query.get("g")61	async def rating(self):62		map = json.loads(await self.request("/getplayer"))63		return int(map["rating"])64	async def request(self, path, data=None, method="GET"):65		# Access implementation detail to restore cookies.66		self.client.session._cookie_jar = self.cookie_jar67		response = await self.client.request(method, path, data=data)68		response.raise_for_status()69		return await response.text()70	async def wins(self):71		map = json.loads(await self.request("/getplayer"))72		return int(map["wins"])73class GameState:74	def __init__(self, json_string):75		self.data = json.loads(json_string)76		self.data["state"] = int(self.data["state"])77	def board(self):78		pieces = []79		for i in range(32):80			pieces.append(self.data["p" + str(i)])81		return board.Board(pieces)82	def moving(self, piece):83		pass84	def ready(self, color):85		assert color == constants.WHITE or color == constants.BLACK86		if color == constants.WHITE:87			return self.data["userXReady"]88		else:89			return self.data["userOReady"]90	def game_state(self):91		return self.data["state"]92	def __str__(self):93		return str(self.data)94def _wrap_in_loop(f):95	"""Decorator that runs the member function in self.loop if needed."""96	@functools.wraps(f)97	def wrapper(self, *args, **kwargs):98		result = f(self, *args, **kwargs)99		if inspect.iscoroutine(result):100			result = self.loop.run_until_complete(result)101		return result102	return wrapper103def async_test(cls):104	"""Class decorator that allows test methods to be async."""105	attributes = dir(cls)106	for attribute in attributes:107		if attribute.startswith("test"):108			f = getattr(cls, attribute)109			setattr(cls, attribute, _wrap_in_loop(f))110	return cls111@async_test112class GameTest(AioHTTPTestCase):113	async def get_application(self):114		return realtimechess.make_app(True)115	async def setUpAsync(self):116		self.user1 = User(self.client, "user1")117		await self.user1.connect()118		self.user2 = User(self.client, "user2")119		await self.user2.connect()120		self.assertEqual(constants.STATE_START,121		                 (await self.user1.get_state()).game_state())122		await self.user2.join_game(self.user1)123		self.assertEqual(constants.STATE_START,124		                 (await self.user1.get_state()).game_state())125		await self.user1.call("ready", {"ready": 1})126		self.assertEqual(constants.STATE_START,127		                 (await self.user2.get_state()).game_state())128		await self.user2.call("ready", {"ready": 1})129		await self.user1.expect_websocket()130		await self.user2.expect_websocket()131		self.assertEqual(constants.STATE_PLAY,132		                 (await self.user1.get_state()).game_state())133	async def tearDownAsync(self):134		pass135	def test_async_test(self):136		# Test that non-coroutines also work.137		pass138	async def test_redirect_to_loginpage(self):139		# Access implementation detail to clear cookies.140		self.client.session._cookie_jar = aiohttp.CookieJar(unsafe=True)141		response = await self.client.request("GET", "/")142		assert response.status == 200143		text = await response.text()144		self.assertIn("Choose your name", text)145		self.assertIn("loginpage", str(response.url))146	async def test_redirect_to_loginpage_with_game(self):147		# Access implementation detail to clear cookies.148		self.client.session._cookie_jar = aiohttp.CookieJar(unsafe=True)149		response = await self.client.request("GET", "/?g=deadbeef")150		assert response.status == 200151		text = await response.text()152		self.assertIn("Choose your name", text)153		self.assertIn("deadbeef", str(response.url))154		self.assertIn("loginpage", str(response.url))155	async def test_state(self):156		self.assertTrue((await self.user1.get_state()).board().has_piece("A2"))157		self.assertEqual(board.PAWN,158		                 (await159		                  self.user1.get_state()).board().piece("A2").type)160		self.assertEqual(board.WHITE,161		                 (await162		                  self.user1.get_state()).board().piece("A2").color)163	async def test_opened(self):164		await self.user1.call("opened")165		await self.user1.expect_websocket()166		await self.user2.expect_websocket()167	async def test_move(self):168		self.assertTrue((await self.user1.get_state()).board().has_piece("A2"))169		await self.user1.move("A2", "A3")170		await self.user1.expect_websocket()171		await self.user2.expect_websocket()172		self.assertFalse((await173		                  self.user1.get_state()).board().has_piece("A2"))174		await self.user1.disable_time()175		self.assertTrue((await self.user1.get_state()).board().has_piece("A3"))176	async def test_move_websocket(self):177		self.assertTrue((await self.user1.get_state()).board().has_piece("A2"))178		await self.user1.move_websocket("A2", "A3")179		await self.user1.expect_websocket()180		await self.user2.expect_websocket()181		state = await self.user1.get_state()182		self.assertFalse(state.board().has_piece("A2"))183		await self.user1.disable_time()184		state = await self.user1.get_state()185		self.assertTrue((await self.user1.get_state()).board().has_piece("A3"))186	async def test_move_websocket_error(self):187		await self.user1.move_websocket("A2", "A1")188		await self.user1.move_websocket("A2", "")189		await self.user1.move_websocket("Q21", "A121")190	async def test_move_no_destination(self):191		# Will not give an error.192		await self.user1.ws.send_str("/move")193		with self.assertRaises(aiohttp.ClientResponseError) as cm:194			await self.user1.call("move", {"from": "A2"})195		self.assertEqual(400, cm.exception.code)196	async def test_move_other_players(self):197		with self.assertRaises(aiohttp.ClientResponseError) as cm:198			await self.user1.move("A7", "A6")199		self.assertEqual(403, cm.exception.code)200	async def test_move_from_invalid_position(self):201		with self.assertRaises(aiohttp.ClientResponseError) as cm:202			await self.user1.move("Q9", "A6")203		self.assertEqual(400, cm.exception.code)204	async def test_move_to_invalid_position(self):205		with self.assertRaises(aiohttp.ClientResponseError) as cm:206			await self.user1.move("A2", "P0")207		self.assertEqual(400, cm.exception.code)208	async def test_move_from_empty(self):209		with self.assertRaises(aiohttp.ClientResponseError) as cm:210			await self.user1.move("A3", "A4")211		self.assertEqual(404, cm.exception.code)212	async def test_move_moving(self):213		await self.user1.move("A2", "A3")214		with self.assertRaises(aiohttp.ClientResponseError) as cm:215			await self.user1.move("A3", "A4")216		# There is no piece in A3 (yet).217		self.assertEqual(404, cm.exception.code)218		self.assertFalse((await219		                  self.user1.get_state()).board().has_piece("A4"))220	async def test_capture(self):221		await self.user1.disable_time()222		await self.user1.move("E2", "E3")223		await self.user1.move("D1", "G4")  #QG4224		self.assertEqual(board.QUEEN,225		                 (await226		                  self.user1.get_state()).board().piece("G4").type)227		await self.user2.move("D7", "D6")228		await self.user2.move("C8", "G4")  #BG4229		self.assertEqual(board.BISHOP,230		                 (await231		                  self.user1.get_state()).board().piece("G4").type)232		await self.user2.move("G4", "F3")  #BF3233		self.assertIs(None, (await self.user1.get_state()).board().piece("A3"))234	async def test_capture2(self):235		await self.user1.disable_time()236		await self.user1.move("B2", "B3")237		await self.user1.move("C1", "B2")238		self.assertEqual(constants.PAWN,239		                 (await240		                  self.user1.get_state()).board().piece("C7").type)241		await self.user1.move("B2", "G7")242		self.assertEqual(constants.BISHOP,243		                 (await244		                  self.user1.get_state()).board().piece("G7").type)245		self.assertEqual(constants.ROOK,246		                 (await247		                  self.user1.get_state()).board().piece("H8").type)248		await self.user1.move("G7", "H8")249		self.assertEqual(constants.BISHOP,250		                 (await251		                  self.user1.get_state()).board().piece("H8").type)252	async def test_promotion_white(self):253		await self.user1.disable_time()254		await self.user1.move("B2", "B4")255		await self.user1.move("B4", "B5")256		await self.user1.move("B5", "B6")257		await self.user1.move("B6", "C7")258		self.assertEqual(constants.KNIGHT,259		                 (await260		                  self.user1.get_state()).board().piece("B8").type)261		await self.user1.move("C7", "B8")262		self.assertEqual(constants.QUEEN,263		                 (await264		                  self.user1.get_state()).board().piece("B8").type)265	async def test_promotion_black(self):266		await self.user1.disable_time()267		await self.user2.move("H7", "H5")268		await self.user2.move("H5", "H4")269		await self.user2.move("H4", "H3")270		await self.user2.move("H3", "G2")271		self.assertEqual(constants.ROOK,272		                 (await273		                  self.user1.get_state()).board().piece("H1").type)274		self.assertEqual(constants.WHITE,275		                 (await276		                  self.user1.get_state()).board().piece("H1").color)277		await self.user2.move("G2", "H1")278		self.assertEqual(constants.QUEEN,279		                 (await280		                  self.user1.get_state()).board().piece("H1").type)281		self.assertEqual(constants.BLACK,282		                 (await283		                  self.user1.get_state()).board().piece("H1").color)284	async def test_websocket_ping(self):285		# Invalid command should be ignored.286		await self.user1.ws.send_str("/invalid")287		await self.user1.move("A2", "A3")288		await self.user1.expect_websocket()289		await self.user1.ws.send_str("/ping")290		await self.user1.expect_websocket()291	async def test_websocket_no_game(self):292		with self.assertRaises(aiohttp.ClientResponseError) as cm:293			await self.user1.client.ws_connect("/websocket")294		self.assertEqual(404, cm.exception.code)295	async def test_websocket_invalid_game(self):296		with self.assertRaises(aiohttp.ClientResponseError) as cm:297			await self.user1.client.ws_connect("/websocket?g=deadbeef")298		self.assertEqual(404, cm.exception.code)299	async def test_full_games(self):300		self.assertEqual(1000, await self.user1.rating())301		self.assertEqual(1000, await self.user2.rating())302		self.assertEqual(0, await self.user1.wins())303		self.assertEqual(0, await self.user1.losses())304		self.assertEqual(0, await self.user2.wins())...conftest.py
Source:conftest.py  
...164    nb.write_text(json.dumps(notebook_content))165    url_base = f"http://localhost:{port}"166    name = nb.name167    url = f"{url_base}/notebooks/{name}"168    with page.expect_websocket(kernel_ready):169        page.goto(url)170    # Blank cells do not increment execution_count171    expected_count = sum(1 for cell in cells if cell["source"])172    run_menu = "#celllink"173    run_all_button = "text=Run All"174    # This will raise a TimeoutError when the alert is presented, since the175    # `wait_for_selector` will never happen. Raising our own error here doesn't176    # work due to https://github.com/microsoft/playwright-python/issues/1017177    def close_on_dialog(dialog: Dialog) -> None:178        if dialog.message.startswith("WARNING:"):179            page.close()180        else:181            dialog.dismiss()182    page.on("dialog", close_on_dialog)183    page.click(run_menu)184    page.click(run_all_button)185    page.wait_for_selector(f"text=[{expected_count}]:", strict=True)186    with page.expect_response(lambda resp: is_saved(resp, name, port)) as resp:187        page.click('button[title="Save and Checkpoint"]')188    kernel_menu = "#kernellink"189    kernel_shutdown_button = "text=Shutdown"190    real_shutdown_button = 'button:has-text("Shutdown")'191    page.click(kernel_menu)192    page.click(kernel_shutdown_button)193    with page.expect_response(lambda resp: is_closing(resp, port)) as resp:194        page.click(real_shutdown_button)195    resp.value.finished()196    return json.loads(nb.read_text())197@pytest.fixture(scope="function")198def lab(199    jupyter_lab: t.Tuple[BrowserContext, Path, int],200) -> t.Callable:201    """Provide function-scoped fixture leveraging longer lived fixtures."""202    context, tmp, port = jupyter_lab203    path = tmp / f"notebook-{uuid4()}.ipynb"204    return lambda json_in: _lab(205        json_in,206        context=context,207        port=port,208        nb=path,209    )210def _lab(211    json_in: t.Dict[str, t.Any],212    context: BrowserContext,213    port: int,214    nb: Path,215) -> t.Dict[str, t.Any]:216    page = context.new_page()217    notebook_content = _base_notebook()218    cells = t.cast(t.List, notebook_content["cells"])219    cells.extend(json_in)220    notebook_content["cells"] = [make_cell(cell) for cell in cells]221    name = nb.name222    nb.write_text(json.dumps(notebook_content))223    url_base = f"http://localhost:{port}"224    url = f"{url_base}/lab/tree/{name}"225    with page.expect_websocket(kernel_ready):226        page.goto(url)227    # Blank cells do not increment execution_count228    expected_count = sum(1 for cell in cells if cell["source"])229    run_menu = "text=Run"230    run_all_button = 'ul[role="menu"] >> text=Run All Cells'231    page.click(run_menu)232    page.click(run_all_button)233    page.wait_for_selector(f"text=[{expected_count}]:", strict=True)234    with page.expect_response(lambda resp: is_saved(resp, name, port)) as resp:235        page.click("text=File")236        page.click('ul[role="menu"] >> text=Save Notebook')237    kernel_menu = "text=Kernel"238    shutdown_button = "text=Shut Down Kernel"239    page.click(kernel_menu)...test_html_rendering.py
Source:test_html_rendering.py  
...41    gui._set_frame(inspect.currentframe())42    gui.add_page("page1", Html(html_content))43    helpers.run_e2e(gui)44    page.goto("/page1")45    page.expect_websocket()46    page.wait_for_selector("#text1")47    assert (48        page.evaluate('window.getComputedStyle(document.querySelector("#text1"), null).getPropertyValue("color")')49        == "rgb(0, 128, 0)"50    )51    assert (52        page.evaluate('window.getComputedStyle(document.querySelector("#text2"), null).getPropertyValue("color")')53        == "rgb(0, 0, 255)"54    )55@pytest.mark.teste2e56def test_html_render_bind_assets(page: "Page", gui: Gui, helpers):57    gui._set_frame(inspect.currentframe())58    gui.add_pages(pages=f"{Path(Path(__file__).parent.resolve())}{os.path.sep}test-assets")59    helpers.run_e2e(gui)60    assert ".taipy-text" in urlopen("http://127.0.0.1:5000/test-assets/style/style.css").read().decode("utf-8")61    page.goto("/test-assets/page1")62    page.expect_websocket()63    page.wait_for_selector("#text1")64    retry = 065    while (66        retry < 1067        and page.evaluate('window.getComputedStyle(document.querySelector("#text1"), null).getPropertyValue("color")')68        != "rgb(0, 128, 0)"69    ):70        retry += 171        time.sleep(0.1)72    assert (73        page.evaluate('window.getComputedStyle(document.querySelector("#text1"), null).getPropertyValue("color")')74        == "rgb(0, 128, 0)"75    )76    assert (77        page.evaluate('window.getComputedStyle(document.querySelector("#text2"), null).getPropertyValue("color")')78        == "rgb(0, 0, 255)"79    )80@pytest.mark.teste2e81def test_html_render_path_mapping(page: "Page", gui: Gui, helpers):82    gui._server = _Server(83        gui,84        path_mapping={"style": f"{Path(Path(__file__).parent.resolve())}{os.path.sep}test-assets{os.path.sep}style"},85    )86    gui.add_page("page1", Html(f"{Path(Path(__file__).parent.resolve())}{os.path.sep}page1.html"))87    helpers.run_e2e(gui)88    assert ".taipy-text" in urlopen("http://127.0.0.1:5000/style/style.css").read().decode("utf-8")89    page.goto("/page1")90    page.expect_websocket()91    page.wait_for_selector("#text1")92    retry = 093    while (94        retry < 1095        and page.evaluate('window.getComputedStyle(document.querySelector("#text1"), null).getPropertyValue("color")')96        != "rgb(0, 128, 0)"97    ):98        retry += 199        time.sleep(0.1)100    assert (101        page.evaluate('window.getComputedStyle(document.querySelector("#text1"), null).getPropertyValue("color")')102        == "rgb(0, 128, 0)"103    )104    assert (...test_slider_action.py
Source:test_slider_action.py  
...25    gui._set_frame(inspect.currentframe())26    gui.add_page(name="test", page=page_md)27    helpers.run_e2e(gui)28    page.goto("/test")29    page.expect_websocket()30    page.wait_for_selector("#text1")31    text1 = page.query_selector("#text1")32    assert text1.inner_text() == "10"33    page.wait_for_selector("#slider1")34    page.fill("#slider1 input", "20")35    function_evaluated = True36    try:37        page.wait_for_function("document.querySelector('#text1').innerText !== '10'")38    except Exception as e:39        function_evaluated = False40        logging.getLogger().debug(f"Function evaluation timeout.\n{e}")41    if function_evaluated:42        text1_2 = page.query_selector("#text1")43        assert text1_2.inner_text() == "20"44@pytest.mark.teste2e45def test_slider_action_on_change(page: "Page", gui: Gui, helpers):46    d = {"v1": 10, "v2": 10}47    def on_change(state, var, val):48        if var == "d.v2":49            d = {"v1": 2 * val, "v2": val}50            state.d.update(d)51    page_md = """52Value: <|{d.v1}|id=text1|>53Slider: <|{d.v2}|slider|id=slider1|>54"""55    gui._set_frame(inspect.currentframe())56    gui.add_page(name="test", page=page_md)57    helpers.run_e2e(gui)58    page.goto("/test")59    page.expect_websocket()60    page.wait_for_selector("#text1")61    text1 = page.query_selector("#text1")62    assert text1.inner_text() == "10"63    page.wait_for_selector("#slider1")64    page.fill("#slider1 input", "20")65    function_evaluated = True66    try:67        page.wait_for_function("document.querySelector('#text1').innerText !== '10'")68    except Exception as e:69        function_evaluated = False70        logging.getLogger().debug(f"Function evaluation timeout.\n{e}")71    if function_evaluated:72        text1_2 = page.query_selector("#text1")73        assert text1_2.inner_text() == "40"LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!
