{"id":9359,"date":"2025-04-14T15:20:05","date_gmt":"2025-04-14T08:20:05","guid":{"rendered":"https:\/\/mb668s.com\/cam-nang-7mb66-xoc-dia\/?p=9359"},"modified":"2025-04-14T15:20:06","modified_gmt":"2025-04-14T08:20:06","slug":"playwright-la-gi","status":"publish","type":"post","link":"https:\/\/mb668s.com\/cam-nang-7mb66-xoc-dia\/tu-van-nghe-nghiep\/playwright-la-gi","title":{"rendered":"Playwright l\u00e0 g\u00ec? T\u00ednh n\u0103ng n\u1ed5i b\u1eadt v\u00e0 \u1ee9ng d\u1ee5ng th\u1ef1c t\u1ebf"},"content":{"rendered":"\n
Trong th\u1eddi \u0111\u1ea1i m\u00e0 t\u1ef1 \u0111\u1ed9ng h\u00f3a ki\u1ec3m th\u1eed tr\u1edf th\u00e0nh m\u1ed9t ph\u1ea7n kh\u00f4ng th\u1ec3 thi\u1ebfu trong quy tr\u00ecnh ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m, vi\u1ec7c l\u1ef1a ch\u1ecdn c\u00f4ng c\u1ee5 ph\u00f9 h\u1ee3p \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o ch\u1ea5t l\u01b0\u1ee3ng \u1ee9ng d\u1ee5ng lu\u00f4n l\u00e0 m\u1ed9t b\u00e0i to\u00e1n quan tr\u1ecdng v\u1edbi c\u00e1c k\u1ef9 s\u01b0 ki\u1ec3m th\u1eed. Gi\u1eefa r\u1ea5t nhi\u1ec1u l\u1ef1a ch\u1ecdn \u0111ang c\u00f3 tr\u00ean th\u1ecb tr\u01b0\u1eddng, playwright l\u00e0 g\u00ec<\/strong> \u0111ang l\u00e0 c\u00e2u h\u1ecfi \u0111\u01b0\u1ee3c \u0111\u1eb7t ra ng\u00e0y c\u00e0ng nhi\u1ec1u b\u1edfi c\u1ed9ng \u0111\u1ed3ng l\u1eadp tr\u00ecnh vi\u00ean khi h\u1ecd t\u00ecm ki\u1ebfm m\u1ed9t gi\u1ea3i ph\u00e1p m\u1ea1nh m\u1ebd, linh ho\u1ea1t v\u00e0 d\u1ec5 t\u00edch h\u1ee3p v\u00e0o h\u1ec7 th\u1ed1ng CI\/CD hi\u1ec7n \u0111\u1ea1i.<\/strong><\/p>\n\n\n\n Playwright l\u00e0 m\u1ed9t th\u01b0 vi\u1ec7n m\u00e3 ngu\u1ed3n m\u1edf do Microsoft ph\u00e1t tri\u1ec3n, \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 t\u1ef1 \u0111\u1ed9ng h\u00f3a vi\u1ec7c ki\u1ec3m th\u1eed c\u00e1c \u1ee9ng d\u1ee5ng web hi\u1ec7n \u0111\u1ea1i tr\u00ean nhi\u1ec1u tr\u00ecnh duy\u1ec7t kh\u00e1c nhau nh\u01b0 Chromium (Chrome, Edge), Firefox v\u00e0 WebKit (Safari).<\/strong><\/p>\n<\/blockquote>\n\n\n\n V\u1edbi kh\u1ea3 n\u0103ng t\u01b0\u01a1ng th\u00edch \u0111a n\u1ec1n t\u1ea3ng v\u00e0 \u0111a ng\u00f4n ng\u1eef l\u1eadp tr\u00ecnh nh\u01b0 JavaScript, TypeScript, Python, Java v\u00e0 .NET, Playwright gi\u00fap c\u00e1c nh\u00f3m ph\u00e1t tri\u1ec3n v\u00e0 ki\u1ec3m th\u1eed x\u00e2y d\u1ef1ng c\u00e1c k\u1ecbch b\u1ea3n ki\u1ec3m th\u1eed end-to-end m\u1ea1nh m\u1ebd, \u1ed5n \u0111\u1ecbnh v\u00e0 d\u1ec5 b\u1ea3o tr\u00ec.<\/p>\n\n\n\n \u0110i\u1ec3m n\u1ed5i b\u1eadt c\u1ee7a Playwright n\u1eb1m \u1edf ch\u1ed7 n\u00f3 cung c\u1ea5p m\u1ed9t API th\u1ed1ng nh\u1ea5t, cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng t\u01b0\u01a1ng t\u00e1c v\u1edbi giao di\u1ec7n ng\u01b0\u1eddi d\u00f9ng nh\u01b0 m\u1ed9t ng\u01b0\u1eddi d\u00f9ng th\u1eadt s\u1ef1: click chu\u1ed9t, g\u00f5 v\u0103n b\u1ea3n, \u0111i\u1ec1u h\u01b0\u1edbng gi\u1eefa c\u00e1c trang, t\u1ea3i d\u1eef li\u1ec7u, ki\u1ec3m tra tr\u1ea1ng th\u00e1i ph\u1ea7n t\u1eed… m\u00e0 kh\u00f4ng c\u1ea7n lo l\u1eafng qu\u00e1 nhi\u1ec1u v\u1ec1 th\u1eddi gian t\u1ea3i ho\u1eb7c c\u00e1c \u0111i\u1ec1u ki\u1ec7n b\u1ea5t \u0111\u1ed3ng b\u1ed9 trong \u1ee9ng d\u1ee5ng. V\u1edbi \u0111\u1ed9 ch\u00ednh x\u00e1c cao v\u00e0 t\u00ednh n\u0103ng ch\u1edd \u0111\u1ee3i th\u00f4ng minh, Playwright ng\u00e0y c\u00e0ng tr\u1edf th\u00e0nh c\u00f4ng c\u1ee5 ki\u1ec3m th\u1eed \u0111\u01b0\u1ee3c \u01b0a chu\u1ed9ng trong c\u00e1c d\u1ef1 \u00e1n ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m hi\u1ec7n \u0111\u1ea1i, \u0111\u1eb7c bi\u1ec7t l\u00e0 c\u00e1c \u1ee9ng d\u1ee5ng web s\u1eed d\u1ee5ng JavaScript ho\u1eb7c SPA (Single Page Application).<\/p>\n\n\n\n Playwright \u0111\u01b0\u1ee3c ph\u00e1t tri\u1ec3n b\u1edfi \u0111\u1ed9i ng\u0169 k\u1ef9 s\u01b0 t\u1eebng tham gia v\u00e0o d\u1ef1 \u00e1n Puppeteer t\u1ea1i Google, nh\u01b0ng sau \u0111\u00f3 chuy\u1ec3n sang Microsoft \u0111\u1ec3 x\u00e2y d\u1ef1ng m\u1ed9t c\u00f4ng c\u1ee5 t\u1ef1 \u0111\u1ed9ng h\u00f3a ki\u1ec3m th\u1eed to\u00e0n di\u1ec7n v\u00e0 m\u1ea1nh m\u1ebd h\u01a1n. D\u1ef1 \u00e1n ch\u00ednh th\u1ee9c \u0111\u01b0\u1ee3c gi\u1edbi thi\u1ec7u v\u00e0o n\u0103m 2020 nh\u01b0 m\u1ed9t n\u1ed7 l\u1ef1c nh\u1eb1m kh\u1eafc ph\u1ee5c c\u00e1c gi\u1edbi h\u1ea1n m\u00e0 Puppeteer g\u1eb7p ph\u1ea3i, \u0111\u1eb7c bi\u1ec7t l\u00e0 trong vi\u1ec7c h\u1ed7 tr\u1ee3 \u0111a tr\u00ecnh duy\u1ec7t v\u00e0 t\u01b0\u01a1ng t\u00e1c ph\u1ee9c t\u1ea1p v\u1edbi giao di\u1ec7n ng\u01b0\u1eddi d\u00f9ng web.<\/p>\n\n\n\n Kh\u00f4ng gi\u1ed1ng nh\u01b0 Puppeteer ch\u1ec9 h\u1ed7 tr\u1ee3 Chromium, Playwright ngay t\u1eeb \u0111\u1ea7u \u0111\u00e3 \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf \u0111\u1ec3 h\u1ed7 tr\u1ee3 ba n\u1ec1n t\u1ea3ng tr\u00ecnh duy\u1ec7t ch\u00ednh: Chromium, Firefox v\u00e0 WebKit. \u0110\u00e2y l\u00e0 \u0111i\u1ec3m kh\u00e1c bi\u1ec7t mang t\u00ednh \u0111\u1ed9t ph\u00e1, gi\u00fap Playwright tr\u1edf th\u00e0nh l\u1ef1a ch\u1ecdn h\u00e0ng \u0111\u1ea7u cho vi\u1ec7c ki\u1ec3m th\u1eed cross-browser (\u0111a tr\u00ecnh duy\u1ec7t) trong c\u00e1c d\u1ef1 \u00e1n web hi\u1ec7n \u0111\u1ea1i. Ngo\u00e0i ra, vi\u1ec7c t\u00edch h\u1ee3p s\u00e2u v\u1edbi c\u00e1c c\u00f4ng ngh\u1ec7 CI\/CD v\u00e0 DevOps c\u0169ng l\u00e0 m\u1ee5c ti\u00eau quan tr\u1ecdng ngay t\u1eeb giai \u0111o\u1ea1n ph\u00e1t tri\u1ec3n ban \u0111\u1ea7u c\u1ee7a c\u00f4ng c\u1ee5 n\u00e0y.<\/p>\n\n\n\n Nh\u1edd s\u1ef1 h\u1eadu thu\u1eabn m\u1ea1nh m\u1ebd t\u1eeb Microsoft v\u00e0 c\u1ed9ng \u0111\u1ed3ng m\u00e3 ngu\u1ed3n m\u1edf, Playwright nhanh ch\u00f3ng nh\u1eadn \u0111\u01b0\u1ee3c s\u1ef1 quan t\u00e2m l\u1edbn t\u1eeb c\u00e1c l\u1eadp tr\u00ecnh vi\u00ean v\u00e0 k\u1ef9 s\u01b0 ki\u1ec3m th\u1eed tr\u00ean to\u00e0n c\u1ea7u. \u0110\u1ebfn nay, Playwright \u0111\u00e3 tr\u1edf th\u00e0nh m\u1ed9t ph\u1ea7n kh\u00f4ng th\u1ec3 thi\u1ebfu trong nhi\u1ec1u h\u1ec7 th\u1ed1ng ki\u1ec3m th\u1eed t\u1ef1 \u0111\u1ed9ng hi\u1ec7n \u0111\u1ea1i, v\u00e0 ng\u00e0y c\u00e0ng \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt v\u1edbi c\u00e1c t\u00ednh n\u0103ng ti\u00ean ti\u1ebfn \u0111\u1ec3 \u0111\u00e1p \u1ee9ng nhu c\u1ea7u ki\u1ec3m th\u1eed linh ho\u1ea1t, nhanh ch\u00f3ng v\u00e0 \u0111\u00e1ng tin c\u1eady.<\/p>\n\n\n\n Playwright kh\u00f4ng ch\u1ec9 \u0111\u01a1n thu\u1ea7n l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 ki\u1ec3m th\u1eed t\u1ef1 \u0111\u1ed9ng, m\u00e0 c\u00f2n l\u00e0 m\u1ed9t n\u1ec1n t\u1ea3ng to\u00e0n di\u1ec7n v\u1edbi nhi\u1ec1u t\u00ednh n\u0103ng n\u1ed5i b\u1eadt gi\u00fap n\u00e2ng cao hi\u1ec7u qu\u1ea3 v\u00e0 \u0111\u1ed9 tin c\u1eady trong qu\u00e1 tr\u00ecnh ki\u1ec3m th\u1eed \u1ee9ng d\u1ee5ng web. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 nh\u1eefng \u0111i\u1ec3m m\u1ea1nh ti\u00eau bi\u1ec3u gi\u00fap Playwright tr\u1edf th\u00e0nh l\u1ef1a ch\u1ecdn \u01b0u ti\u00ean c\u1ee7a nhi\u1ec1u k\u1ef9 s\u01b0 ki\u1ec3m th\u1eed hi\u1ec7n nay.<\/p>\n\n\n\n M\u1ed9t trong nh\u1eefng \u01b0u \u0111i\u1ec3m l\u1edbn nh\u1ea5t c\u1ee7a Playwright l\u00e0 kh\u1ea3 n\u0103ng h\u1ed7 tr\u1ee3 \u0111a tr\u00ecnh duy\u1ec7t. Kh\u00f4ng ch\u1ec9 t\u01b0\u01a1ng th\u00edch v\u1edbi Chromium (\u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng b\u1edfi Chrome v\u00e0 Edge), Playwright c\u00f2n h\u1ed7 tr\u1ee3 Firefox v\u00e0 WebKit (n\u1ec1n t\u1ea3ng c\u1ee7a Safari). \u0110i\u1ec1u n\u00e0y cho ph\u00e9p c\u00e1c nh\u00f3m ph\u00e1t tri\u1ec3n d\u1ec5 d\u00e0ng ki\u1ec3m th\u1eed \u1ee9ng d\u1ee5ng c\u1ee7a m\u00ecnh tr\u00ean nhi\u1ec1u m\u00f4i tr\u01b0\u1eddng tr\u00ecnh duy\u1ec7t kh\u00e1c nhau ch\u1ec9 v\u1edbi m\u1ed9t b\u1ed9 m\u00e3 duy nh\u1ea5t, \u0111\u1ea3m b\u1ea3o tr\u1ea3i nghi\u1ec7m ng\u01b0\u1eddi d\u00f9ng nh\u1ea5t qu\u00e1n tr\u00ean m\u1ecdi n\u1ec1n t\u1ea3ng.<\/p>\n\n\n\n Playwright cung c\u1ea5p API cho nhi\u1ec1u ng\u00f4n ng\u1eef l\u1eadp tr\u00ecnh ph\u1ed5 bi\u1ebfn nh\u01b0 JavaScript, TypeScript, Python, Java v\u00e0 .NET. Nh\u1edd \u0111\u00f3, c\u00e1c \u0111\u1ed9i ng\u0169 ki\u1ec3m th\u1eed c\u00f3 th\u1ec3 linh ho\u1ea1t l\u1ef1a ch\u1ecdn ng\u00f4n ng\u1eef ph\u00f9 h\u1ee3p v\u1edbi h\u1ec7 sinh th\u00e1i hi\u1ec7n c\u00f3 c\u1ee7a m\u00ecnh m\u00e0 kh\u00f4ng c\u1ea7n ph\u1ea3i h\u1ecdc l\u1ea1i t\u1eeb \u0111\u1ea7u. \u0110i\u1ec1u n\u00e0y kh\u00f4ng ch\u1ec9 r\u00fat ng\u1eafn th\u1eddi gian tri\u1ec3n khai m\u00e0 c\u00f2n gi\u00fap d\u1ec5 d\u00e0ng t\u00edch h\u1ee3p v\u1edbi c\u00e1c framework v\u00e0 c\u00f4ng c\u1ee5 hi\u1ec7n h\u00e0nh.<\/p>\n\n\n\n Kh\u00e1c v\u1edbi nhi\u1ec1u c\u00f4ng c\u1ee5 ki\u1ec3m th\u1eed truy\u1ec1n th\u1ed1ng y\u00eau c\u1ea7u ng\u01b0\u1eddi d\u00f9ng t\u1ef1 thi\u1ebft l\u1eadp th\u1eddi gian ch\u1edd ho\u1eb7c x\u1eed l\u00fd b\u1ea5t \u0111\u1ed3ng b\u1ed9 ph\u1ee9c t\u1ea1p, Playwright \u0111\u01b0\u1ee3c t\u00edch h\u1ee3p s\u1eb5n c\u01a1 ch\u1ebf auto-waiting th\u00f4ng minh. H\u1ec7 th\u1ed1ng s\u1ebd t\u1ef1 \u0111\u1ed9ng \u0111\u1ee3i c\u00e1c ph\u1ea7n t\u1eed hi\u1ec3n th\u1ecb, s\u1eb5n s\u00e0ng t\u01b0\u01a1ng t\u00e1c tr\u01b0\u1edbc khi th\u1ef1c hi\u1ec7n h\u00e0nh \u0111\u1ed9ng nh\u01b0 click, nh\u1eadp li\u1ec7u ho\u1eb7c chuy\u1ec3n trang. \u0110i\u1ec1u n\u00e0y gi\u00fap gi\u1ea3m thi\u1ec3u l\u1ed7i ki\u1ec3m th\u1eed do trang t\u1ea3i ch\u1eadm ho\u1eb7c thao t\u00e1c qu\u00e1 s\u1edbm, t\u1eeb \u0111\u00f3 n\u00e2ng cao \u0111\u1ed9 ch\u00ednh x\u00e1c c\u1ee7a k\u1ecbch b\u1ea3n ki\u1ec3m th\u1eed.<\/p>\n\n\n\n Playwright h\u1ed7 tr\u1ee3 th\u1ef1c thi c\u00e1c k\u1ecbch b\u1ea3n ki\u1ec3m th\u1eed theo ki\u1ec3u song song (parallel), gi\u00fap ti\u1ebft ki\u1ec7m \u0111\u00e1ng k\u1ec3 th\u1eddi gian khi ki\u1ec3m th\u1eed m\u1ed9t s\u1ed1 l\u01b0\u1ee3ng l\u1edbn t\u00ednh n\u0103ng. \u0110\u1ed3ng th\u1eddi, c\u00f4ng c\u1ee5 n\u00e0y c\u00f3 th\u1ec3 ho\u1ea1t \u0111\u1ed9ng tr\u00ean m\u1ecdi h\u1ec7 \u0111i\u1ec1u h\u00e0nh ph\u1ed5 bi\u1ebfn nh\u01b0 Windows, macOS v\u00e0 Linux. Vi\u1ec7c t\u00edch h\u1ee3p d\u1ec5 d\u00e0ng v\u00e0o c\u00e1c h\u1ec7 th\u1ed1ng CI\/CD nh\u01b0 GitHub Actions, Jenkins, GitLab CI c\u0169ng gi\u00fap Playwright tr\u1edf th\u00e0nh gi\u1ea3i ph\u00e1p l\u00fd t\u01b0\u1edfng cho m\u00f4i tr\u01b0\u1eddng ki\u1ec3m th\u1eed t\u1ef1 \u0111\u1ed9ng h\u00f3a li\u00ean t\u1ee5c.<\/p>\n\n\n\n \u0110\u1ec3 ph\u1ee5c v\u1ee5 vi\u1ec7c ghi nh\u1eadn l\u1ed7i v\u00e0 ph\u00e2n t\u00edch k\u1ebft qu\u1ea3 ki\u1ec3m th\u1eed, Playwright cung c\u1ea5p t\u00ednh n\u0103ng ch\u1ee5p \u1ea3nh m\u00e0n h\u00ecnh v\u00e0 quay video to\u00e0n b\u1ed9 qu\u00e1 tr\u00ecnh ki\u1ec3m th\u1eed. C\u00e1c b\u1ea3n ghi n\u00e0y c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c l\u01b0u l\u1ea1i trong b\u00e1o c\u00e1o ki\u1ec3m th\u1eed ho\u1eb7c g\u1eedi k\u00e8m khi b\u00e1o l\u1ed7i, gi\u00fap l\u1eadp tr\u00ecnh vi\u00ean d\u1ec5 d\u00e0ng h\u00ecnh dung \u0111\u01b0\u1ee3c ng\u1eef c\u1ea3nh x\u1ea3y ra l\u1ed7i, t\u1eeb \u0111\u00f3 r\u00fat ng\u1eafn th\u1eddi gian x\u1eed l\u00fd v\u00e0 c\u1ea3i thi\u1ec7n hi\u1ec7u qu\u1ea3 l\u00e0m vi\u1ec7c gi\u1eefa c\u00e1c b\u1ed9 ph\u1eadn.<\/p>\n\n\n\n Playwright cho ph\u00e9p m\u00f4 ph\u1ecfng nhi\u1ec1u lo\u1ea1i thi\u1ebft b\u1ecb nh\u01b0 iPhone, iPad, Android v\u1edbi k\u00edch th\u01b0\u1edbc m\u00e0n h\u00ecnh v\u00e0 kh\u1ea3 n\u0103ng c\u1ea3m \u1ee9ng t\u01b0\u01a1ng \u1ee9ng. Ngo\u00e0i ra, c\u00f4ng c\u1ee5 c\u00f2n h\u1ed7 tr\u1ee3 gi\u1ea3 l\u1eadp c\u00e1c \u0111i\u1ec1u ki\u1ec7n m\u1ea1ng nh\u01b0 3G, 4G, m\u1ea1ng y\u1ebfu ho\u1eb7c m\u1ea5t k\u1ebft n\u1ed1i t\u1ea1m th\u1eddi. \u0110\u00e2y l\u00e0 t\u00ednh n\u0103ng c\u1ef1c k\u1ef3 h\u1eefu \u00edch khi ki\u1ec3m th\u1eed tr\u1ea3i nghi\u1ec7m ng\u01b0\u1eddi d\u00f9ng tr\u00ean thi\u1ebft b\u1ecb di \u0111\u1ed9ng, \u0111\u1ea3m b\u1ea3o \u1ee9ng d\u1ee5ng v\u1eadn h\u00e0nh t\u1ed1t trong m\u1ecdi ho\u00e0n c\u1ea3nh th\u1ef1c t\u1ebf.<\/p>\n\n\n\n
<\/figure>\n\n\n\nPlaywright l\u00e0 g\u00ec?<\/h2>\n\n\n\n
\n
Ngu\u1ed3n g\u1ed1c v\u00e0 qu\u00e1 tr\u00ecnh ph\u00e1t tri\u1ec3n Playwright<\/h2>\n\n\n\n
Nh\u1eefng t\u00ednh n\u0103ng v\u01b0\u1ee3t tr\u1ed9i c\u1ee7a Playwright<\/h2>\n\n\n\n
H\u1ed7 tr\u1ee3 \u0111a tr\u00ecnh duy\u1ec7t<\/h3>\n\n\n\n
H\u1ed7 tr\u1ee3 \u0111a ng\u00f4n ng\u1eef l\u1eadp tr\u00ecnh<\/h3>\n\n\n\n
T\u00ednh n\u0103ng auto-waiting (t\u1ef1 \u0111\u1ed9ng ch\u1edd \u0111\u1ee3i ph\u1ea7n t\u1eed)<\/h3>\n\n\n\n
Kh\u1ea3 n\u0103ng ch\u1ea1y song song v\u00e0 t\u01b0\u01a1ng th\u00edch \u0111a n\u1ec1n t\u1ea3ng<\/h3>\n\n\n\n
H\u1ed7 tr\u1ee3 ch\u1ee5p \u1ea3nh m\u00e0n h\u00ecnh, quay video qu\u00e1 tr\u00ecnh test<\/h3>\n\n\n\n
M\u00f4 ph\u1ecfng thi\u1ebft b\u1ecb di \u0111\u1ed9ng v\u00e0 \u0111i\u1ec1u ki\u1ec7n m\u1ea1ng linh ho\u1ea1t<\/h3>\n\n\n\n
\n