Playwright Academy
0 dari 17
Lampiran

Cheatsheet Python dan TypeScript

Perintah dan API yang paling sering dipakai. Di layar lebar, Python dan TypeScript tampil berdampingan.

Belum punya project? Mulai dari Persiapan.

Setup dan terminal

Menampilkan Python. Ganti bahasa di bagian atas untuk melihat TypeScript.Menampilkan TypeScript. Ganti bahasa di bagian atas untuk melihat Python.

Mau apa🐍 Python🟦 TypeScript
Buat projectuv init --no-package playwright-pythonnpm init playwright@latest -- playwright-typescript --quiet --no-examples
Install paketuv add pytest pytest-playwrightnpm install -D @playwright/test
Install browseruv run playwright installnpx playwright install
Cek versiuv run playwright --versionnpx playwright --version
Jalankan satu fileuv run pytest tests/test_pertama.pynpx playwright test tests/pertama.spec.ts
Buka HTML reportuv run pytest --html=reports/report.html (plugin pytest-html, Modul 12)npx playwright show-report
Pengguna PowerShell

PWDEBUG=1 perintah adalah cara menulis di bash. Di PowerShell, tulis $env:PWDEBUG=1 di baris terpisah, lalu perintahnya. Hindari juga && di Windows PowerShell 5.1.

Mau apa🐍 Python🟦 TypeScript
Buka URLpage.goto("/path")await page.goto('/path')
Kembali / maju / reloadpage.go_back() · page.go_forward() · page.reload()await page.goBack() · goForward() · reload()
Judul & URLpage.title() · page.urlawait page.title() · page.url()
Tunggu URLpage.wait_for_url("**/shop.html")await page.waitForURL('**/shop.html')
Screenshotpage.screenshot(path="a.png", full_page=True)await page.screenshot({ path: 'a.png', fullPage: true })
Ukuran layarpage.set_viewport_size({"width": 390, "height": 844})await page.setViewportSize({ width: 390, height: 844 })

Locator

Mau apa🐍 Python🟦 TypeScript
Role + namaget_by_role("button", name="Masuk")getByRole('button', { name: 'Masuk' })
Nama persisget_by_role("button", name="Masuk", exact=True)getByRole('button', { name: 'Masuk', exact: true })
Labelget_by_label("Username")getByLabel('Username')
Placeholderget_by_placeholder("Misalnya: mouse")getByPlaceholder('Misalnya: mouse')
Teksget_by_text("Stok habis")getByText('Stok habis')
Alt / titleget_by_alt_text("Logo") · get_by_title("Info")getByAltText('Logo') · getByTitle('Info')
Test idget_by_test_id("cart-count")getByTestId('cart-count')
CSSlocator("#students tr")locator('#students tr')
Filter teks.filter(has_text="Mouse").filter({ hasText: 'Mouse' })
Filter berisi elemen.filter(has=page.get_by_role("heading")).filter({ has: page.getByRole('heading') })
Urutan.first · .last · .nth(2).first() · .last() · .nth(2)
Jumlah.count()await .count()
Semua teks.all_inner_texts()await .allInnerTexts()
iframepage.frame_locator("iframe")page.frameLocator('iframe')

Aksi

Mau apa🐍 Python🟦 TypeScript
Klik / dobel / kanan.click() · .dblclick() · .click(button="right").click() · .dblclick() · .click({ button: 'right' })
Isi / kosongkan.fill("teks") · .clear().fill('teks') · .clear()
Ketik per huruf.press_sequentially("teks").pressSequentially('teks')
Tombol keyboard.press("Enter").press('Enter')
Centang.check() · .uncheck() · .set_checked(True).check() · .uncheck() · .setChecked(true)
Dropdown.select_option("python") · .select_option(label="Python").selectOption('python') · .selectOption({ label: 'Python' })
Hover / fokus.hover() · .focus().hover() · .focus()
Upload.set_input_files("a.txt").setInputFiles('a.txt')
Drag & drop.drag_to(target).dragTo(target)

Assertion (expect)

Mengecek🐍 Python🟦 TypeScript
Terlihat / tersembunyito_be_visible() · to_be_hidden()toBeVisible() · toBeHidden()
Aktif / nonaktifto_be_enabled() · to_be_disabled()toBeEnabled() · toBeDisabled()
Tercentang / kosong / fokusto_be_checked() · to_be_empty() · to_be_focused()toBeChecked() · toBeEmpty() · toBeFocused()
Teksto_have_text("…") · to_contain_text("…")toHaveText('…') · toContainText('…')
Nilai / atribut / classto_have_value() · to_have_attribute() · to_have_class()toHaveValue() · toHaveAttribute() · toHaveClass()
Jumlahto_have_count(3)toHaveCount(3)
Halamanexpect(page).to_have_url() · to_have_title()expect(page).toHaveURL() · toHaveTitle()
Kebalikannot_to_be_visible().not.toBeVisible()
Timeout khususto_be_visible(timeout=10_000)toBeVisible({ timeout: 10_000 })
Respons APIexpect(res).to_be_ok()await expect(res).toBeOK()
SoftTidak ada (pakai plugin pytest-check)expect.soft(...)

Event: dialog, tab, download, network

Mau apa🐍 Python🟦 TypeScript
Dialogpage.once("dialog", lambda d: d.accept())page.once('dialog', d => d.accept())
Tab baruwith context.expect_page() as info: … → info.valueconst p = context.waitForEvent('page'); …; await p
Downloadwith page.expect_download() as info: …const d = page.waitForEvent('download'); …; await d
Tunggu responswith page.expect_response("**/api/x") as info: …const r = page.waitForResponse('**/api/x'); …; await r
Mock responspage.route("**/api/x", lambda r: r.fulfill(json={...}))await page.route('**/api/x', r => r.fulfill({ json: {...} }))
Blokirpage.route("**/*.png", lambda r: r.abort())await page.route('**/*.png', r => r.abort())
Script sebelum halamanpage.add_init_script("…")await page.addInitScript(() => { … })

API testing

Mau apa🐍 Python🟦 TypeScript
Buat contextapi = playwright.request.new_context(base_url=…)fixture request (pakai baseURL config)
GET + queryapi.get("/api/products", params={"q": "mouse"})request.get('/api/products', { params: { q: 'mouse' } })
POST JSONapi.post("/api/login", data={...})request.post('/api/login', { data: {...} })
PUT / PATCH / DELETEapi.put(url, data=...) · api.patch(...) · api.delete(url)request.put(url, { data }) · request.patch(...) · request.delete(url)
Baca headerres.headers["location"]res.headers()['location']
Headerheaders={"Authorization": f"Bearer {t}"}headers: { Authorization: 'Bearer ' + t }
Status & bodyres.status · res.ok · res.json()res.status() · res.ok() · await res.json()

Test runner

Mau apa🐍 pytest🟦 Playwright Test
Jalankan semuauv run pytestnpx playwright test
Filter nama-k "login"-g "login"
Tag@pytest.mark.smoke → -m smoke{ tag: '@smoke' } → --grep @smoke
Headed / debug--headed --slowmo 500 · PWDEBUG=1--headed · --debug · --ui
Browser--browser firefox--project=firefox
Yang gagal saja--lf--last-failed
Data-driven@pytest.mark.parametrize(...)for (const c of cases) test(...)
Persiapan@pytest.fixture (+ yield)test.beforeEach · test.extend
Skip@pytest.mark.skip · pytest.skip()test.skip()
Trace--tracing on → playwright show-trace--trace on → npx playwright show-report
Codegenuv run playwright codegen URLnpx playwright codegen URL