[MẸO] Thủ thuật Python/Playwright
By khoanc, at: 10:03 Ngày 02 tháng 9 năm 2023
Thời gian đọc ước tính: __READING_TIME__ minutes
![[TIPS] Python/Playwright Tricks](/media/filer_public_thumbnails/filer_public/5a/a0/5aa03ee4-db55-4372-9dd7-9f266823b712/playwright_-_tips_and_tricks_-_python.png__1500x900_crop_subsampling-2_upscale.png)
![[TIPS] Python/Playwright Tricks](/media/filer_public_thumbnails/filer_public/5a/a0/5aa03ee4-db55-4372-9dd7-9f266823b712/playwright_-_tips_and_tricks_-_python.png__400x240_crop_subsampling-2_upscale.png)
Playwright là một công cụ mạnh mẽ để tự động hóa và kiểm thử các ứng dụng web, cung cấp hỗ trợ đa trình duyệt và tốc độ thực thi cao. Khi sử dụng Playwright với Python, có một số thủ thuật và các thực tiễn tốt nhất mà bạn có thể tận dụng để nâng cao hiệu quả và hiệu suất kiểm thử của mình.
1. Tận dụng Locators
Sử dụng tính năng locator của Playwright để tương tác với các phần tử trên trang thay vì dựa vào XPath hoặc CSS selectors. Locators cung cấp một cách đáng tin cậy và hiệu quả hơn để tìm các phần tử, thích ứng với các thay đổi giao diện người dùng một cách uyển chuyển hơn.
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto('https://example.com')
locator = page.locator('text="Example Domain"')
assert locator.count() == 1
browser.close()
2. Sử dụng Web-First Assertions
Áp dụng web-first assertions để đảm bảo rằng các bài kiểm tra chờ đợi các điều kiện cần thiết trước khi tiếp tục, giảm thiểu kết quả kiểm tra không ổn định. Playwright cung cấp các assertion tích hợp sẵn như to_be_visible
và to_have_text
.
page.goto('https://example.com')
page.locator('h1').wait_for(state='visible')
assert page.locator('h1').text_content() == 'Example Domain'
3. Áp dụng Song song và Sharding
Tối đa hóa tốc độ thực thi kiểm tra bằng cách chạy các bài kiểm tra song song và sử dụng sharding. Playwright hỗ trợ chạy các bài kiểm tra trên nhiều worker, điều này có thể làm giảm đáng kể thời gian kiểm tra.
pytest -n auto --dist=loadscope
4. Thực hiện Kiểm thử Hồi quy Hình ảnh
Kiểm thử hồi quy hình ảnh giúp xác định các thay đổi giao diện người dùng không mong muốn. Sử dụng phương pháp toHaveScreenshot
của Playwright để chụp và so sánh ảnh chụp màn hình.
page.goto('https://example.com')
page.screenshot(path='screenshot.png')
5. Gỡ lỗi và Thông tin Kiểm thử
Sử dụng pytest-playwright
để tăng cường khả năng gỡ lỗi trong các bài kiểm tra của bạn. Bạn có thể chạy các bài kiểm tra ở chế độ "headed" để quan sát các hành động của trình duyệt một cách trực quan. Sử dụng tùy chọn --headed
để xem trình duyệt khi các bài kiểm tra đang thực thi:
pytest --headed
Để có cái nhìn sâu sắc hơn, hãy sử dụng Playwright Inspector với page.pause()
, cho phép bạn bước qua các hành động tương tác và kiểm tra các phần tử trực tiếp:
def test_example(page):
page.goto('https://example.com')
page.pause() # Mở Playwright Inspector để gỡ lỗi
assert page.title() == 'Example Domain
Cách tiếp cận này giúp bạn hiểu rõ hơn về hành vi kiểm tra và nhanh chóng xác định các vấn đề trong quá trình phát triển. Hãy cho tôi biết nếu có bất cứ điều gì khác bạn muốn điều chỉnh!
6. Mock các cuộc gọi API
Tăng tốc độ kiểm tra bằng cách mock các cuộc gọi API và chỉ tập trung vào các yêu cầu cần thiết. Điều này có thể giúp giảm thiểu sự không ổn định của kiểm tra và cải thiện tốc độ thực thi.
page.route('**/api/**', lambda route, request: route.fulfill(body='{"mock": "data"}'))
7. Xử lý nhiều Context và Windows
Kiểm tra các ứng dụng yêu cầu nhiều ngữ cảnh trình duyệt hoặc cửa sổ trong một bài kiểm tra duy nhất, mô phỏng các kịch bản như ứng dụng trò chuyện.
context1 = browser.new_context()
context2 = browser.new_context()
page1 = context1.new_page()
page2 = context2.new_page()
8. Ghi đè cấu hình nâng cao
Đối với các trường hợp kiểm tra cụ thể, ghi đè các cấu hình mặc định của Playwright để phù hợp với nhu cầu kiểm tra của bạn, chẳng hạn như thay đổi cài đặt thời gian chờ hoặc tùy chọn khởi chạy trình duyệt.
playwright = sync_playwright().start()
browser = playwright.chromium.launch(headless=False, slowMo=50)
9. Mô phỏng Thiết bị và Điều kiện Mạng
Mô phỏng các cấu hình thiết bị và điều kiện mạng khác nhau để kiểm tra khả năng đáp ứng và hiệu suất trong các điều kiện khác nhau.
page.emulate_network_conditions(offline=True)
page.goto('https://example.com', timeout=60000) # Thời gian chờ dài hơn cho mạng chậm hơn
Bằng cách áp dụng các thủ thuật và thực tiễn tốt nhất này, bạn có thể tận dụng tối đa tiềm năng của Playwright trong các dự án Python của bạn, đạt được quy trình kiểm tra mạnh mẽ và hiệu quả hơn.