{"id":22067,"date":"2024-11-25T14:06:59","date_gmt":"2024-11-25T12:06:59","guid":{"rendered":"https:\/\/iqaengineer.com\/?page_id=22067"},"modified":"2024-12-07T17:53:13","modified_gmt":"2024-12-07T15:53:13","slug":"begin_playwright_1day","status":"publish","type":"page","link":"https:\/\/iqaengineer.com\/ua\/begin_playwright_1day\/","title":{"rendered":"\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u043c \u0456\u0437 Playwright \u043d\u0430 TypeScript \u0437\u0430 1 \u0434\u0435\u043d\u044c. \u041f\u043e\u0447\u0430\u0442\u043e\u043a"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"22067\" class=\"elementor elementor-22067\">\n\t\t\t\t\t\t<div class=\"elementor-inner\">\n\t\t\t\t<div class=\"elementor-section-wrap\">\n\t\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4464a5f1 elementor-section-height-full elementor-section-boxed elementor-section-height-default elementor-section-items-middle\" data-id=\"4464a5f1\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-7f890524\" data-id=\"7f890524\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7e56d170 elementor-widget elementor-widget-heading\" data-id=\"7e56d170\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u041f\u0440\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u043c<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-52762c53 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"52762c53\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>\u041d\u0430 \u0446\u044c\u043e\u043c\u0443 \u0456\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e \u043f\u043e\u0437\u043d\u0430\u0439\u043e\u043c\u0438\u043c\u043e\u0441\u044f \u0437 Playwright \u2013 \u0441\u0443\u0447\u0430\u0441\u043d\u0438\u043c \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0456\u0457 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u0435\u0431-\u0434\u043e\u0434\u0430\u0442\u043a\u0456\u0432. \u041c\u0438 \u0440\u043e\u0437\u0431\u0435\u0440\u0435\u043c\u043e \u043e\u0441\u043d\u043e\u0432\u0438 \u0439\u043e\u0433\u043e \u0440\u043e\u0431\u043e\u0442\u0438, \u043f\u0435\u0440\u0435\u0432\u0430\u0433\u0438 \u043f\u0435\u0440\u0435\u0434 \u0456\u043d\u0448\u0438\u043c\u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c\u0438 \u0442\u0430 \u043d\u0430\u0432\u0447\u0438\u043c\u043e\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u0438 \u0441\u0442\u0430\u0431\u0456\u043b\u044c\u043d\u0456 \u0442\u0430 \u0435\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0456 \u0442\u0435\u0441\u0442\u0438.<\/p><p>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u043c \u0440\u043e\u0437\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u0438\u0439 \u043d\u0430 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043b\u044c\u043d\u0438\u043a\u0456\u0432-\u043f\u043e\u0447\u0430\u0442\u043a\u0456\u0432\u0446\u0456\u0432 \u0456 \u0440\u043e\u0437\u0440\u043e\u0431\u043d\u0438\u043a\u0456\u0432, \u044f\u043a\u0456 \u0445\u043e\u0447\u0443\u0442\u044c \u043e\u0441\u0432\u043e\u0457\u0442\u0438 Playwright \u0434\u043b\u044f \u043f\u043e\u0432\u0441\u044f\u043a\u0434\u0435\u043d\u043d\u043e\u0457 \u0440\u043e\u0431\u043e\u0442\u0438.<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3ee6b19d elementor-widget elementor-widget-button\" data-id=\"3ee6b19d\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t<a href=\"#start\" class=\"elementor-button-link elementor-button elementor-size-sm\" role=\"button\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-text\">\u041f\u043e\u0447\u043d\u0435\u043c\u043e<\/span>\n\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-132ab97f\" data-id=\"132ab97f\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-bcb43a1 elementor-widget elementor-widget-spacer\" data-id=\"bcb43a1\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-270de439 elementor-widget elementor-widget-spacer\" data-id=\"270de439\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-69583d3 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"69583d3\" data-element_type=\"section\" id=\"start\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-53aa119\" data-id=\"53aa119\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-500c55e elementor-widget elementor-widget-heading\" data-id=\"500c55e\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u0429\u043e \u0442\u0430\u043a\u0435 Playwright?<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c621402 elementor-widget elementor-widget-text-editor\" data-id=\"c621402\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p><strong>Playwright<\/strong> - \u0446\u0435 \u0441\u0443\u0447\u0430\u0441\u043d\u0438\u0439 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0456\u0457 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f, \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u0439 \u0437 \u0430\u043a\u0446\u0435\u043d\u0442\u043e\u043c \u043d\u0430 \u0441\u0442\u0430\u0431\u0456\u043b\u044c\u043d\u0456\u0441\u0442\u044c \u0442\u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u0443 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0443. \u041e\u0441\u043d\u043e\u0432\u043d\u0456 \u043f\u0435\u0440\u0435\u0432\u0430\u0433\u0438:<\/p><ul><li>\u0420\u043e\u0431\u043e\u0442\u0430 \u0437 Chromium, Firefox \u0442\u0430 WebKit \u00ab\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb.<\/li><li>\u041f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0430 \u0435\u043c\u0443\u043b\u044f\u0446\u0456\u0457 \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0438\u0445 \u043f\u0440\u0438\u0441\u0442\u0440\u043e\u0457\u0432 \u0442\u0430 \u0440\u043e\u0431\u043e\u0442\u0438 \u0437 \u043a\u0456\u043b\u044c\u043a\u043e\u043c\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0447\u0430\u0441\u043d\u043e.<\/li><li>\u041f\u043e\u0442\u0443\u0436\u043d\u0438\u0439 API \u0434\u043b\u044f \u0441\u0442\u0430\u0431\u0456\u043b\u044c\u043d\u0438\u0445 \u0432\u0438\u043f\u0440\u043e\u0431\u0443\u0432\u0430\u043d\u044c.<\/li><\/ul>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-07b703f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"07b703f\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2e5a2dc\" data-id=\"2e5a2dc\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ee80278 elementor-widget elementor-widget-heading\" data-id=\"ee80278\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u0429\u043e \u0442\u0430\u043a\u0435 TypeScript?<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8bcfe49 elementor-widget elementor-widget-text-editor\" data-id=\"8bcfe49\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p><strong>TypeScript<\/strong> \u2014 \u0446\u0435 \u043d\u0430\u0434\u043c\u043d\u043e\u0436\u0438\u043d\u0430 JavaScript, \u044f\u043a\u0430 \u0434\u043e\u0434\u0430\u0454 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u0443 \u0442\u0438\u043f\u0456\u0437\u0430\u0446\u0456\u044e \u0442\u0430 \u0456\u043d\u0448\u0456 \u043a\u043e\u0440\u0438\u0441\u043d\u0456 \u0444\u0443\u043d\u043a\u0446\u0456\u0457 \u0434\u043e JavaScript, \u0449\u043e \u0440\u043e\u0431\u0438\u0442\u044c \u043a\u043e\u0434 \u0431\u0456\u043b\u044c\u0448 \u043f\u0435\u0440\u0435\u0434\u0431\u0430\u0447\u0443\u0432\u0430\u043d\u0438\u043c, \u0431\u0435\u0437\u043f\u0435\u0447\u043d\u0438\u043c \u0456 \u0437\u0440\u0443\u0447\u043d\u0438\u043c \u0434\u043b\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0443\u0432\u0430\u043d\u043d\u044f. Playwright \u2014 \u0446\u0435 \u043f\u043e\u0442\u0443\u0436\u043d\u0438\u0439 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0456\u0457 \u0442\u0435\u0441\u0442\u0456\u0432 \u0432\u0435\u0431-\u0434\u043e\u0434\u0430\u0442\u043a\u0456\u0432, \u0456 \u0432\u0456\u043d \u043c\u0430\u0454 \u0432\u0456\u0434\u043c\u0456\u043d\u043d\u0443 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0443 \u0434\u043b\u044f TypeScript.<\/p><p>\u041a\u043e\u043b\u0438 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u043c\u043e <strong>Playwright \u0437 TypeScript<\/strong>,\u00a0 \u043e\u0442\u0440\u0438\u043c\u0443\u0454\u043c\u043e \u043a\u0456\u043b\u044c\u043a\u0430 \u043f\u0435\u0440\u0435\u0432\u0430\u0433:<\/p><p><strong>\u0421\u0442\u0430\u0442\u0438\u0447\u043d\u0430 \u0442\u0438\u043f\u0456\u0437\u0430\u0446\u0456\u044f<\/strong>: TypeScript \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0454 \u0432\u0438\u0437\u043d\u0430\u0447\u0430\u0442\u0438 \u0442\u0438\u043f\u0438 \u0437\u043c\u0456\u043d\u043d\u0438\u0445 \u0456 \u0444\u0443\u043d\u043a\u0446\u0456\u0439, \u0449\u043e \u0437\u043d\u0438\u0436\u0443\u0454 \u0439\u043c\u043e\u0432\u0456\u0440\u043d\u0456\u0441\u0442\u044c \u043f\u043e\u043c\u0438\u043b\u043e\u043a \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0456\u043b\u044f\u0446\u0456\u0457. \u0426\u0435 \u0434\u043e\u043f\u043e\u043c\u0430\u0433\u0430\u0454 \u0437\u0430\u043f\u043e\u0431\u0456\u0433\u0442\u0438 \u043f\u043e\u043c\u0438\u043b\u043a\u0430\u043c, \u0442\u0430\u043a\u0438\u043c \u044f\u043a \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u043c\u0435\u0442\u043e\u0434\u0456\u0432 \u0447\u0438 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0435\u0439 \u043e\u0431&#8217;\u0454\u043a\u0442\u0456\u0432.<\/p><p>\u041d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, \u0443 \u0432\u0430\u0441 \u0454 \u043e\u0431&#8217;\u0454\u043a\u0442 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 <code>loginPage<\/code>, \u0456 TypeScript \u043f\u0456\u0434\u043a\u0430\u0436\u0435, \u0449\u043e \u043c\u0435\u0442\u043e\u0434\u0438 \u0446\u044c\u043e\u0433\u043e \u043e\u0431&#8217;\u0454\u043a\u0442\u0430 \u043c\u0430\u044e\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0456 \u0442\u0438\u043f\u0438:<\/p><p>const title = await loginPage.getTitle(); \/\/ TypeScript \u0437\u043d\u0430\u0454, \u0449\u043e getTitle() \u043f\u043e\u0432\u0435\u0440\u0442\u0430\u0454 string<\/p><p><strong>\u0406\u043d\u0442\u0435\u043b\u0435\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0456 \u043f\u0456\u0434\u043a\u0430\u0437\u043a\u0438 \u0442\u0430 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f<\/strong>: <br \/>\u041f\u0440\u0438 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u0456 TypeScript \u0443 \u0441\u0435\u0440\u0435\u0434\u043e\u0432\u0438\u0449\u0430\u0445 \u0440\u043e\u0437\u0440\u043e\u0431\u043a\u0438 (IDE), \u0442\u0430\u043a\u0438\u0445 \u044f\u043a Visual Studio Code, \u0432\u0438 \u043e\u0442\u0440\u0438\u043c\u0443\u0454\u0442\u0435 \u0437\u0440\u0443\u0447\u043d\u0456 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f \u0434\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u0456\u0432 Playwright, \u0430 \u0442\u0430\u043a\u043e\u0436 \u043f\u0456\u0434\u043a\u0430\u0437\u043a\u0438 \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0456\u0432 \u0442\u0430 \u0442\u0438\u043f\u0456\u0432, \u0449\u043e \u0441\u043f\u0440\u043e\u0449\u0443\u0454 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044f \u043a\u043e\u0434\u0443 \u0442\u0430 \u0440\u043e\u0431\u0438\u0442\u044c \u0439\u043e\u0433\u043e \u0431\u0456\u043b\u044c\u0448 \u043d\u0430\u0434\u0456\u0439\u043d\u0438\u043c.<\/p><p><strong>\u041a\u0440\u0430\u0449\u0435 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0456 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0430 \u043a\u043e\u0434\u0443<\/strong>: <br \/>\u041e\u0441\u043a\u0456\u043b\u044c\u043a\u0438 TypeScript \u0454 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e \u0442\u0438\u043f\u0456\u0437\u043e\u0432\u0430\u043d\u0438\u043c, \u0432\u0456\u043d \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0454 \u043b\u0435\u0433\u0448\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u043e\u0434\u0443, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432\u0438\u044f\u0432\u043b\u044f\u044e\u0447\u0438 \u043c\u043e\u0436\u043b\u0438\u0432\u0456 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0438 \u043f\u0440\u0438 \u0437\u043c\u0456\u043d\u0456 \u043a\u043e\u0434\u0443 \u0430\u0431\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438 \u0434\u043e\u0434\u0430\u0442\u043a\u0430.<\/p><p><strong>\u041f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430 \u0442\u0438\u043f\u0456\u0432 \u043f\u0456\u0434 \u0447\u0430\u0441 \u043a\u043e\u043c\u043f\u0456\u043b\u044f\u0446\u0456\u0457<\/strong>: \u0412 TypeScript \u043a\u043e\u043c\u043f\u0456\u043b\u044f\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u044f\u0454 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u043d\u0456\u0441\u0442\u044c \u0442\u0438\u043f\u0456\u0432 \u043d\u0430 \u0435\u0442\u0430\u043f\u0456 \u043a\u043e\u043c\u043f\u0456\u043b\u044f\u0446\u0456\u0457, \u0449\u043e \u0434\u043e\u043f\u043e\u043c\u0430\u0433\u0430\u0454 \u0432\u0438\u044f\u0432\u0438\u0442\u0438 \u043f\u043e\u043c\u0438\u043b\u043a\u0438 \u043d\u0430 \u0440\u0430\u043d\u043d\u0456\u0445 \u0435\u0442\u0430\u043f\u0430\u0445 \u0456 \u0443\u043d\u0438\u043a\u043d\u0443\u0442\u0438 \u0431\u0430\u0433\u0456\u0432 \u043f\u0456\u0434 \u0447\u0430\u0441 \u0432\u0438\u043a\u043e\u043d\u0430\u043d\u043d\u044f \u0442\u0435\u0441\u0442\u0456\u0432.<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4173a6e1 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4173a6e1\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7f924ac1\" data-id=\"7f924ac1\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-5844f901 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"5844f901\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-7a7347e2\" data-id=\"7a7347e2\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3c2cc766 elementor-widget elementor-widget-heading\" data-id=\"3c2cc766\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u041f\u043b\u044e\u0441\u0438 Playwright<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-4fdff20 elementor-widget elementor-widget-text-editor\" data-id=\"4fdff20\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<ul><li><p><strong>\u041f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0430 \u043a\u0456\u043b\u044c\u043a\u043e\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0456\u0432<\/strong>:<br \/>Chromium, Firefox, WebKit - \u0456\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u0456\u0434\u0445\u043e\u0434\u0438\u0442\u044c \u0434\u043b\u044f \u043a\u0440\u043e\u0441\u0441\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f.<\/p><\/li><li><p><strong>\u0428\u0432\u0438\u0434\u043a\u0456\u0441\u0442\u044c \u0442\u0430 \u0441\u0442\u0430\u0431\u0456\u043b\u044c\u043d\u0456\u0441\u0442\u044c<\/strong>:<br \/>\u041f\u0440\u0430\u0446\u044e\u0454 \u0431\u0435\u0437\u043f\u043e\u0441\u0435\u0440\u0435\u0434\u043d\u044c\u043e \u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u043c\u0438, \u0431\u0435\u0437 \u043f\u043e\u0442\u0440\u0435\u0431\u0438 \u0443 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u0445 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430\u0445.<\/p><\/li><li><p><strong>\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430 \u0430\u0440\u0445\u0456\u0442\u0435\u043a\u0442\u0443\u0440\u0430<\/strong>:<br \/>\u0428\u0432\u0438\u0434\u043a\u0435 \u0432\u0438\u043a\u043e\u043d\u0430\u043d\u043d\u044f \u0442\u0435\u0441\u0442\u0456\u0432 \u0437\u0430\u0432\u0434\u044f\u043a\u0438 \u043f\u0430\u0440\u0430\u043b\u0435\u043b\u044c\u043d\u0456\u0439 \u0440\u043e\u0431\u043e\u0442\u0456 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0456\u0432.<\/p><\/li><li><p><strong>\u0417\u0440\u0443\u0447\u043d\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438 \u043d\u0430\u043b\u0430\u0433\u043e\u0434\u0436\u0435\u043d\u043d\u044f<\/strong>:<br \/>Playwright Inspector \u0442\u0430 Trace Viewer \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442\u044c \u0430\u043d\u0430\u043b\u0456\u0437\u0443\u0432\u0430\u0442\u0438 \u0442\u0430 \u0443\u0441\u0443\u0432\u0430\u0442\u0438 \u043f\u043e\u043c\u0438\u043b\u043a\u0438 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445.<\/p><\/li><li><p><strong>\u0413\u043d\u0443\u0447\u043a\u0456\u0441\u0442\u044c \u0440\u043e\u0431\u043e\u0442\u0438 \u0437 API<\/strong>:<br \/>\u041c\u043e\u0436\u043b\u0438\u0432\u0456\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u043f\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043f\u0438\u0442\u0456\u0432 \u0442\u0430 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u043c\u043e\u043a \u0434\u0430\u043d\u0438\u0445 \u0434\u043b\u044f \u0440\u0456\u0437\u043d\u0438\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0456\u0457\u0432.<\/p><\/li><li><p><strong>\u041f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0430 \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0438\u0445 \u0435\u043c\u0443\u043b\u044f\u0446\u0456\u0439<\/strong>:<br \/>\u0415\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u0435\u0431-\u0434\u043e\u0434\u0430\u0442\u043a\u0456\u0432 \u0434\u043b\u044f \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0456\u0432 \u0442\u0430 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0456\u0432.<\/p><\/li><li><p><strong>\u0406\u0437\u043e\u043b\u044f\u0446\u0456\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0456\u0432<\/strong>:<br \/>\u041a\u043e\u0436\u0435\u043d \u0442\u0435\u0441\u0442 \u0432\u0438\u043a\u043e\u043d\u0443\u0454\u0442\u044c\u0441\u044f \u0432 \u043e\u043a\u0440\u0435\u043c\u0456\u0439 \u0441\u0435\u0441\u0456\u0457 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u0449\u043e \u0437\u043d\u0438\u0436\u0443\u0454 \u0440\u0438\u0437\u0438\u043a\u0438 \u0432\u043f\u043b\u0438\u0432\u0443 \u0442\u0435\u0441\u0442\u0443 \u043d\u0430 \u0456\u043d\u0448\u0438\u0439.<\/p><\/li><li><p><strong>\u0425\u043e\u0440\u043e\u0448\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0456\u044f<\/strong>:<br \/>\u0414\u043e\u043a\u043b\u0430\u0434\u043d\u0456 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u0438 \u0442\u0430 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u0456 \u043e\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0440\u043e\u0431\u043b\u044f\u0442\u044c \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u043c \u0434\u043b\u044f \u0432\u0438\u0432\u0447\u0435\u043d\u043d\u044f.<\/p><\/li><\/ul>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-03ca6f0 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"03ca6f0\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-489d967\" data-id=\"489d967\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-a8f983c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a8f983c\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-2ace818\" data-id=\"2ace818\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-00f63a7 elementor-widget elementor-widget-heading\" data-id=\"00f63a7\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u041c\u0456\u043d\u0443\u0441\u0438 Playwright<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-c33a99d elementor-widget elementor-widget-text-editor\" data-id=\"c33a99d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<ul><li><p><strong>\u0412\u0456\u0434\u043d\u043e\u0441\u043d\u0430 \u043d\u043e\u0432\u0438\u0437\u043d\u0430<\/strong>:<br \/>\u0421\u043f\u0456\u043b\u044c\u043d\u043e\u0442\u0430 \u043c\u0435\u043d\u0448\u0430 \u043f\u043e\u0440\u0456\u0432\u043d\u044f\u043d\u043e \u0437 Selenium \u0430\u0431\u043e Cypress, \u0449\u043e \u043c\u043e\u0436\u0435 \u0443\u0441\u043a\u043b\u0430\u0434\u043d\u0438\u0442\u0438 \u043f\u043e\u0448\u0443\u043a \u0440\u0456\u0448\u0435\u043d\u044c.<\/p><\/li><li><p><strong>\u041f\u043e\u0440\u0456\u0433 \u0432\u0445\u043e\u0434\u0443<\/strong>:<br \/>\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430 \u043f\u0440\u0438\u0440\u043e\u0434\u0430 (\u0440\u043e\u0431\u043e\u0442\u0430 \u0437 <code>async\/await<\/code>) \u043c\u043e\u0436\u0435 \u0431\u0443\u0442\u0438 \u0441\u043a\u043b\u0430\u0434\u043d\u043e\u044e \u0434\u043b\u044f \u043f\u043e\u0447\u0430\u0442\u043a\u0456\u0432\u0446\u0456\u0432.<\/p><\/li><li><p><strong>\u0420\u043e\u0437\u043c\u0456\u0440 \u0437\u0430\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u0435\u0439<\/strong>:<br \/>\u041f\u0440\u043e\u0435\u043a\u0442\u0438 \u0437 Playwright \u0432\u0430\u0436\u0447\u0456 \u0447\u0435\u0440\u0435\u0437 \u0456\u043d\u0442\u0435\u0433\u0440\u043e\u0432\u0430\u043d\u0456 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0438.<\/p><\/li><\/ul>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-11692a14 elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"11692a14\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-5f704849\" data-id=\"5f704849\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-8522c6b elementor-widget elementor-widget-heading\" data-id=\"8522c6b\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u0412\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0442\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u044e\u0432\u0430\u043d\u043d\u044f \u043e\u0442\u043e\u0447\u0435\u043d\u043d\u044f \u0434\u043b\u044f Playwright<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-3cc94139\" data-id=\"3cc94139\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4206a12b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4206a12b\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1331826c\" data-id=\"1331826c\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5a8540ec elementor-widget elementor-widget-text-editor\" data-id=\"5a8540ec\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<ol><li><p><strong>\u0412\u0441\u0442\u0430\u043d\u043e\u0432\u0456\u0442\u044c Node.js<\/strong><br \/>\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0442\u0435 Node.js \u0437 <a href=\"https:\/\/nodejs.org\/en\" target=\"_new\" rel=\"noopener\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430<\/a> \u0442\u0430 \u0432\u0438\u043a\u043e\u043d\u0430\u0439\u0442\u0435 \u0456\u043d\u0441\u0442\u0430\u043b\u044f\u0446\u0456\u044e.<\/p><\/li><li><p><strong>\u0412\u0441\u0442\u0430\u043d\u043e\u0432\u0456\u0442\u044c Visual Studio Code<\/strong><br \/>\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0442\u0435 \u0442\u0430 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u0456\u0442\u044c <a href=\"https:\/\/code.visualstudio.com\" target=\"_new\" rel=\"noopener\">Visual Studio Code<\/a> - \u0437\u0440\u0443\u0447\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044f \u0442\u0435\u0441\u0442\u0456\u0432.<\/p><\/li><li><p><strong>\u041f\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u0432\u0435\u0440\u0441\u0456\u044e Node.js<\/strong><br \/>\u041f\u0456\u0441\u043b\u044f \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0432\u0456\u0434\u043a\u0440\u0438\u0439\u0442\u0435 \u0442\u0435\u0440\u043c\u0456\u043d\u0430\u043b \u0443 Visual Studio Code \u0442\u0430 \u0432\u0438\u043a\u043e\u043d\u0430\u0439\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p><div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950\"><div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre hljs language-bash\">node -v<\/code><code class=\"!whitespace-pre hljs language-bash\"><\/code><\/div><\/div><p>\u0426\u0435 \u0434\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u043e\u043d\u0430\u0442\u0438\u0441\u044f, \u0449\u043e Node.js \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u043a\u043e\u0440\u0435\u043a\u0442\u043d\u043e.<\/p><\/li><li><p><strong>\u0421\u0442\u0432\u043e\u0440\u0456\u0442\u044c \u043d\u043e\u0432\u0443 \u043f\u0430\u043f\u043a\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0443<\/strong><br \/>\u041d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434:<\/p><div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950\"><div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre hljs language-bash\">saucedemo-test<\/code><code class=\"!whitespace-pre hljs language-bash\"><\/code><\/div><\/div><\/li><li><p><strong>\u0412\u0441\u0442\u0430\u043d\u043e\u0432\u0456\u0442\u044c Playwright<\/strong><br \/>\u0412\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0456 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043e\u0457 \u043f\u0430\u043f\u043a\u0438 \u0432\u0438\u043a\u043e\u043d\u0430\u0439\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p><div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950\"><div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre hljs language-bash\">npm init playwright@latest<br \/>\n<\/code><\/div><\/div><p>\u041f\u0456\u0434 \u0447\u0430\u0441 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0432\u0438\u0431\u0435\u0440\u0456\u0442\u044c:<\/p><ul><li><strong>\u0422\u0438\u043f \u043f\u0440\u043e\u0435\u043a\u0442\u0443:<\/strong> TypeScript.<\/li><li><strong>\u041d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u0456 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0438:<\/strong> Chromium, Firefox, WebKit.<\/li><li><strong>\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438:<\/strong> GitHub Actions \u0430\u0431\u043e \u0456\u043d\u0448\u0456 CI\/CD \u0441\u0435\u0440\u0432\u0456\u0441\u0438 (\u0437\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u044e).<\/li><\/ul><\/li><li><p><strong>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f<\/strong><br \/>\u041f\u0456\u0441\u043b\u044f \u0432\u0438\u043a\u043e\u043d\u0430\u043d\u043d\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0438 \u0431\u0443\u0434\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e:<\/p><ul><li>\u0421\u0442\u0432\u043e\u0440\u0435\u043d\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0437 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u0430\u043c\u0438 \u0442\u0435\u0441\u0442\u0456\u0432.<\/li><li>\u0417\u0433\u0435\u043d\u0435\u0440\u043e\u0432\u0430\u043d\u043e \u0444\u0430\u0439\u043b <code>playwright.config.ts<\/code>.<\/li><li>\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u0456 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0438 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f.<\/li><\/ul><\/li><\/ol><p>\u0422\u0435\u043f\u0435\u0440 \u0432\u0438 \u0433\u043e\u0442\u043e\u0432\u0456 \u043f\u0438\u0441\u0430\u0442\u0438 \u0442\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0438 \u0442\u0435\u0441\u0442\u0438 \u0437 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f\u043c Playwright!\ud83c\udf89<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-320d70ab elementor-widget__width-initial elementor-widget elementor-widget-ha-advanced-tabs happy-addon ha-advanced-tabs happy-addon-pro\" data-id=\"320d70ab\" data-element_type=\"widget\" data-widget_type=\"ha-advanced-tabs.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>.elementor-element-320d70ab{display:none !important}<\/style>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6afb3f7 elementor-widget__width-initial elementor-widget elementor-widget-ha-advanced-tabs happy-addon ha-advanced-tabs happy-addon-pro\" data-id=\"6afb3f7\" data-element_type=\"widget\" data-widget_type=\"ha-advanced-tabs.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ha-tabs-6afb3f7 ha-tabs ha-tabs--nav-left  ha-tabs--nav-y-top ha-tabs--icon-left\" role=\"tablist\">\n\t\t\t<div class=\"ha-tabs__nav\">\n\t\t\t\t\t\t\t\t\t<div id=\"ha-tab-title-1121\" class=\"ha-tab__title ha-tab__title--desktop elementor-repeater-item-6a442b9\" data-tab=\"1\" role=\"tab\" aria-controls=\"ha-tab__content-1121\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"ha-tab__title-text\">\u0417\u0430\u0432\u0434\u0430\u043d\u043d\u044f \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f<\/span><\/div>\n\t\t\t\t\t\t\t\t\t<div id=\"ha-tab-title-1122\" class=\"ha-tab__title ha-tab__title--desktop elementor-repeater-item-1a9d57f\" data-tab=\"2\" role=\"tab\" aria-controls=\"ha-tab__content-1122\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"ha-tab__title-text\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/span><\/div>\n\t\t\t\t\t\t\t\t\t<div id=\"ha-tab-title-1123\" class=\"ha-tab__title ha-tab__title--desktop elementor-repeater-item-cb371da\" data-tab=\"3\" role=\"tab\" aria-controls=\"ha-tab__content-1123\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"ha-tab__title-text\">\u041e\u043f\u0438\u0441 playwright.config.ts<\/span><\/div>\n\t\t\t\t\t\t\t\t\t<div id=\"ha-tab-title-1124\" class=\"ha-tab__title ha-tab__title--desktop elementor-repeater-item-cf98d31\" data-tab=\"4\" role=\"tab\" aria-controls=\"ha-tab__content-1124\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"ha-tab__title-text\">\u041f\u0438\u0448\u0435\u043c\u043e \u043a\u043e\u0434 \u0432 pages\/<\/span><\/div>\n\t\t\t\t\t\t\t\t\t<div id=\"ha-tab-title-1125\" class=\"ha-tab__title ha-tab__title--desktop elementor-repeater-item-7193402\" data-tab=\"5\" role=\"tab\" aria-controls=\"ha-tab__content-1125\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"ha-tab__title-text\">\u041f\u0438\u0448\u0435\u043c\u043e \u043a\u043e\u0434 \u0432 tests\/<\/span><\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t<div class=\"ha-tabs__content\">\n\t\t\t\t\t\t\t\t\t<div class=\"ha-tab__title ha-tab__title--mobile elementor-repeater-item-6a442b9\" data-tab=\"1\" role=\"tab\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"ha-tab__title-text\">\u0417\u0430\u0432\u0434\u0430\u043d\u043d\u044f \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f<\/span>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"ha-tab-content-1121\" class=\"ha-tab__content ha-clearfix elementor-repeater-item-6a442b9\" data-tab=\"1\" role=\"tabpanel\" aria-labelledby=\"ha-tab-title-1121\">\n\t\t\t\t\t\t<p>\u041f\u0435\u0440\u0435\u0434 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438 \u043f\u0440\u043e\u0454\u043a\u0442\u0443 \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u043e \u0432\u0438\u0437\u043d\u0430\u0447\u0438\u0442\u0438, \u0449\u043e \u0441\u0430\u043c\u0435 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u0442\u0438. \u0414\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0441\u043b\u0456\u0434 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0437\u0430\u0432\u0434\u0430\u043d\u043d\u044f.<\/p><p><strong>\u041e\u0441\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u0456 \u0437\u0430\u0432\u0434\u0430\u043d\u043d\u044f:<\/strong><\/p><ul><li>\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0456\u044f.<\/li><li>\u041d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u0456 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0456\u0457.<\/li><li>\u0414\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u0442\u043e\u0432\u0430\u0440\u0443 \u0434\u043e \u043a\u043e\u0448\u0438\u043a\u0430.<\/li><\/ul><p><strong>\u0414\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u0456\u0439\u043d\u043e\u0457 \u0440\u043e\u0431\u043e\u0442\u0438:<\/strong><\/p><ul><li>\u0429\u0435 \u0431\u0456\u043b\u044c\u0448\u0435 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u0438\u0445 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043e\u043a \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0456\u0457.<\/li><li>\u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f<\/li><\/ul>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"ha-tab__title ha-tab__title--mobile elementor-repeater-item-1a9d57f\" data-tab=\"2\" role=\"tab\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"ha-tab__title-text\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/span>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"ha-tab-content-1122\" class=\"ha-tab__content ha-clearfix elementor-repeater-item-1a9d57f\" data-tab=\"2\" role=\"tabpanel\" aria-labelledby=\"ha-tab-title-1122\">\n\t\t\t\t\t\t<p>\u0414\u043b\u044f \u0443\u0441\u043f\u0456\u0448\u043d\u043e\u0457 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0456\u0457 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u043c\u0438 \u0440\u043e\u0437\u0434\u0456\u043b\u044f\u0454\u043c\u043e \u043f\u0440\u043e\u0454\u043a\u0442 \u043d\u0430 \u043b\u043e\u0433\u0456\u0447\u043d\u0456 \u0447\u0430\u0441\u0442\u0438\u043d\u0438, \u0449\u043e\u0431 \u0437\u0440\u043e\u0431\u0438\u0442\u0438 \u043a\u043e\u0434 \u0431\u0456\u043b\u044c\u0448 \u043e\u0440\u0433\u0430\u043d\u0456\u0437\u043e\u0432\u0430\u043d\u0438\u043c, \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u0438\u043c \u0456 \u0437\u0440\u0443\u0447\u043d\u0438\u043c \u0434\u043b\u044f \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0438. \u0426\u0435 \u0442\u0430\u043a\u043e\u0436 \u0434\u043e\u043f\u043e\u043c\u0430\u0433\u0430\u0454 \u0437\u0430\u0441\u0442\u043e\u0441\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u043d\u0430\u0439\u043a\u0440\u0430\u0449\u0456 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438, \u0442\u0430\u043a\u0456 \u044f\u043a\u00a0<strong>Page Object Model (POM)<\/strong>, \u0456 \u0437\u0430\u0431\u0435\u0437\u043f\u0435\u0447\u0443\u0454 \u0437\u0440\u0443\u0447\u043d\u0456\u0441\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0457 \u0440\u043e\u0431\u043e\u0442\u0438.<\/p><p><a href=\"https:\/\/www.saucedemo.com\/\" target=\"_new\" rel=\"noopener\">https:\/\/www.saucedemo.com<\/a><\/p><p>saucedemo-tests\/<br \/>\u251c\u2500\u2500 tests\/ # \u0422\u0435\u0441\u0442\u043e\u0432\u0456 \u0444\u0430\u0439\u043b\u0438<br \/>\u2502 \u251c\u2500\u2500 login.spec.ts # \u0422\u0435\u0441\u0442 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0456\u0457<br \/>\u2502 \u251c\u2500\u2500 inventory.spec.ts # \u0422\u0435\u0441\u0442 \u0456\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044e<br \/>\u2502 \u251c\u2500\u2500 product.spec.ts # \u0422\u0435\u0441\u0442 \u0442\u043e\u0432\u0430\u0440\u0443<br \/>\u2502 \u251c\u2500\u2500 cart.spec.ts # \u0422\u0435\u0441\u0442 \u043a\u043e\u0440\u0437\u0438\u043d\u0438<br \/>\u2502 \u2514\u2500\u2500 checkout.spec.ts # \u0422\u0435\u0441\u0442 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f<br \/>\u251c\u2500\u2500 pages\/ # Page Object Model<br \/>\u2502 \u251c\u2500\u2500 login.page.ts # \u041b\u043e\u0433\u0456\u043d<br \/>\u2502 \u251c\u2500\u2500 inventory.page.ts # \u0421\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0432\u0430\u0440\u0456\u0432<br \/>\u2502 \u251c\u2500\u2500 product.page.ts # \u0421\u0442\u043e\u0440\u0456\u043d\u043a\u0430 \u0442\u043e\u0432\u0430\u0440\u0443<br \/>\u2502 \u251c\u2500\u2500 cart.page.ts # \u041a\u043e\u0440\u0437\u0438\u043d\u0430<br \/>\u2502 \u2514\u2500\u2500 checkout.page.ts # \u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f<br \/>\u2514\u2500\u2500 playwright.config.ts # \u041a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044f Playwright<\/p><hr \/><p><strong>\u041a\u0430\u0442\u0430\u043b\u043e\u0433 <code>tests\/<\/code><\/strong> \u2013 \u0422\u0435\u0441\u0442\u043e\u0432\u0456 \u0444\u0430\u0439\u043b\u0438<\/p><p>\u0426\u0435\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043c\u0456\u0441\u0442\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u0438 \u0437 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u0440\u0456\u0437\u043d\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u0432\u0435\u0431-\u0437\u0430\u0441\u0442\u043e\u0441\u0443\u043d\u043a\u0443, \u0449\u043e \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u044f\u044e\u0442\u044c\u0441\u044f. \u0412 \u043a\u043e\u0436\u043d\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0456 \u043e\u043f\u0438\u0441\u0443\u0454\u0442\u044c\u0441\u044f \u043f\u0435\u0432\u043d\u0430 \u0447\u0430\u0441\u0442\u0438\u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0443:<\/p><ul><li><strong><code>login.spec.ts<\/code><\/strong> \u2014 \u0442\u0435\u0441\u0442\u0443\u0454 \u043f\u0440\u043e\u0446\u0435\u0441 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0456\u0457 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430, \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u044f\u044e\u0447\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0456\u0441\u0442\u044c \u0432\u0432\u043e\u0434\u0443 \u043b\u043e\u0433\u0456\u043d\u0443 \u0442\u0430 \u043f\u0430\u0440\u043e\u043b\u044f, \u0430 \u0442\u0430\u043a\u043e\u0436 \u043a\u043e\u0440\u0435\u043a\u0442\u043d\u0456\u0441\u0442\u044c \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u044c \u043f\u0440\u043e \u043f\u043e\u043c\u0438\u043b\u043a\u0438 \u043f\u0440\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c\u0443 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u0456 \u0434\u0430\u043d\u0438\u0445.<\/li><li><strong><code>inventory.spec.ts<\/code><\/strong> \u2014 \u0442\u0435\u0441\u0442\u0443\u0454 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0456\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044f, \u0442\u043e\u0431\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u0445 \u0442\u043e\u0432\u0430\u0440\u0456\u0432 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456, \u0457\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0456\u0441\u0442\u044c, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0456\u0441\u0442\u044c, \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0442\u0430 \u0456\u043d\u0448\u0456 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438.<\/li><li><strong><code>product.spec.ts<\/code><\/strong> \u2014 \u0442\u0435\u0441\u0442\u0443\u0454 \u0444\u0443\u043d\u043a\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u0456\u0441\u0442\u044c, \u043f\u043e\u0432&#8217;\u044f\u0437\u0430\u043d\u0443 \u0437 \u0442\u043e\u0432\u0430\u0440\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0442\u044f \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 \u0442\u043e\u0432\u0430\u0440\u0443, \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434 \u0434\u0435\u0442\u0430\u043b\u0435\u0439, \u0432\u0438\u0431\u0456\u0440 \u043a\u0456\u043b\u044c\u043a\u043e\u0441\u0442\u0456, \u0434\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u0442\u043e\u0432\u0430\u0440\u0443 \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0443.<\/li><li><strong><code>cart.spec.ts<\/code><\/strong> \u2014 \u0442\u0435\u0441\u0442\u0443\u0454 \u043a\u043e\u0440\u0437\u0438\u043d\u0443 \u043f\u043e\u043a\u0443\u043f\u043e\u043a, \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u044f\u044e\u0447\u0438 \u0434\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u0442\u043e\u0432\u0430\u0440\u0456\u0432, \u0457\u0445 \u043a\u043e\u0440\u0435\u043a\u0442\u043d\u0435 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f, \u043c\u043e\u0436\u043b\u0438\u0432\u0456\u0441\u0442\u044c \u0437\u043c\u0456\u043d\u044e\u0432\u0430\u0442\u0438 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0430\u0431\u043e \u0432\u0438\u0434\u0430\u043b\u044f\u0442\u0438 \u0442\u043e\u0432\u0430\u0440\u0438 \u0437 \u043a\u043e\u0448\u0438\u043a\u0430.<\/li><li><strong><code>checkout.spec.ts<\/code><\/strong> \u2014 \u0442\u0435\u0441\u0442\u0443\u0454 \u043f\u0440\u043e\u0446\u0435\u0441 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f, \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u044f\u044e\u0447\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0456\u0441\u0442\u044c \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0445 \u0434\u0430\u043d\u0438\u0445, \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0443 \u043f\u043b\u0430\u0442\u0456\u0436\u043d\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0456\u0432, \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0442\u0430 \u0432\u0456\u0434\u043f\u0440\u0430\u0432\u043a\u0443 \u043f\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0436\u0435\u043d\u043d\u044f.<\/li><\/ul><p><strong>2. \u041a\u0430\u0442\u0430\u043b\u043e\u0433 <code>pages\/<\/code> \u2013 Page Object Model (POM)<\/strong><\/p><p>\u0426\u0435\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043c\u0456\u0441\u0442\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u0438, \u0449\u043e \u0440\u0435\u0430\u043b\u0456\u0437\u0443\u044e\u0442\u044c Page Object Model (POM), \u043f\u0456\u0434\u0445\u0456\u0434 \u0434\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0456\u0457 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f, \u0434\u0435 \u043a\u043e\u0436\u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0430 \u0430\u0431\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432\u0435\u0431-\u0437\u0430\u0441\u0442\u043e\u0441\u0443\u043d\u043a\u0443 \u043c\u0430\u0454 \u0441\u0432\u0456\u0439 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u043d\u0438\u0439 \u043e\u0431&#8217;\u0454\u043a\u0442 \u0434\u043b\u044f \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u0457 \u0437 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438.<\/p><ul><li><strong><code>login.page.ts<\/code><\/strong> \u2014 \u043a\u043b\u0430\u0441, \u0449\u043e \u043c\u0456\u0441\u0442\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u0438 \u0434\u043b\u044f \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u0457 \u0437 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0456\u0457, \u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u043b\u043e\u0433\u0456\u043d\u0443 \u0442\u0430 \u043f\u0430\u0440\u043e\u043b\u044f, \u043d\u0430\u0442\u0438\u0441\u043a\u0430\u043d\u043d\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u0432\u0445\u043e\u0434\u0443.<\/li><li><strong><code>inventory.page.ts<\/code><\/strong> \u2014 \u043a\u043b\u0430\u0441 \u0434\u043b\u044f \u0440\u043e\u0431\u043e\u0442\u0438 \u0437\u0456 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u043e\u044e \u0456\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044f, \u0434\u0435 \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u044e\u0442\u044c\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u0438 \u0434\u043b\u044f \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u0457 \u0437 \u0442\u043e\u0432\u0430\u0440\u0430\u043c\u0438, \u0444\u0456\u043b\u044c\u0442\u0440\u0430\u043c\u0438 \u0442\u0430 \u0456\u043d\u0448\u0438\u043c\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u0442\u043e\u0432\u0430\u0440\u0456\u0432.<\/li><li><strong><code>product.page.ts<\/code><\/strong> \u2014 \u043a\u043b\u0430\u0441 \u0434\u043b\u044f \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u0457 \u0437\u0456 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u043e\u044e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0442\u043e\u0432\u0430\u0440\u0443, \u0434\u0435 \u043c\u043e\u0436\u043d\u0430 \u043e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u0434\u0430\u043d\u0456 \u0442\u043e\u0432\u0430\u0440\u0443, \u0434\u043e\u0434\u0430\u0432\u0430\u0442\u0438 \u0439\u043e\u0433\u043e \u0432 \u043a\u043e\u0448\u0438\u043a \u0442\u0430 \u0432\u0438\u043a\u043e\u043d\u0443\u0432\u0430\u0442\u0438 \u0456\u043d\u0448\u0456 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0457.<\/li><li><strong><code>cart.page.ts<\/code><\/strong> \u2014 \u043a\u043b\u0430\u0441 \u0434\u043b\u044f \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u0457 \u0437 \u043a\u043e\u0448\u0438\u043a\u043e\u043c, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0447\u0438 \u043c\u0435\u0442\u043e\u0434\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0438 \u0442\u043e\u0432\u0430\u0440\u0456\u0432 \u0443 \u043a\u043e\u0448\u0438\u043a\u0443, \u0437\u043c\u0456\u043d\u0438 \u0457\u0445 \u043a\u0456\u043b\u044c\u043a\u043e\u0441\u0442\u0456, \u0432\u0438\u0434\u0430\u043b\u0435\u043d\u043d\u044f \u0442\u043e\u0432\u0430\u0440\u0456\u0432 \u0442\u0430 \u0456\u043d\u0448\u0435.<\/li><li><strong><code>checkout.page.ts<\/code><\/strong> \u2014 \u043a\u043b\u0430\u0441 \u0434\u043b\u044f \u0440\u043e\u0431\u043e\u0442\u0438 \u0437 \u043f\u0440\u043e\u0446\u0435\u0441\u043e\u043c \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0447\u0438 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u0434\u0430\u043d\u0438\u0445 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438, \u0432\u0438\u0431\u0456\u0440 \u043f\u043b\u0430\u0442\u0456\u0436\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0443, \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044f \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u043f\u043e\u043a\u0443\u043f\u043a\u0438.<\/li><\/ul><p><strong>3. \u0424\u0430\u0439\u043b <code>playwright.config.ts<\/code> \u2013 \u041a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044f Playwright<\/strong><\/p><p>\u0426\u0435\u0439 \u0444\u0430\u0439\u043b \u043c\u0456\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044e \u0434\u043b\u044f Playwright, \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0443 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0456\u0457 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u0435\u0431-\u0437\u0430\u0441\u0442\u043e\u0441\u0443\u043d\u043a\u0456\u0432. \u0422\u0443\u0442 \u043c\u043e\u0436\u0443\u0442\u044c \u0431\u0443\u0442\u0438 \u0432\u043a\u0430\u0437\u0430\u043d\u0456 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438, \u044f\u043a-\u043e\u0442:<\/p><ul><li><strong>\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430<\/strong> \u2014 \u0432\u0438\u0431\u0456\u0440 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0456\u0432 (\u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, Chromium, Firefox, WebKit) \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u0442\u0435\u0441\u0442\u0456\u0432.<\/li><li><strong>\u041c\u0435\u0440\u0435\u0436\u0435\u0432\u0456 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f<\/strong> \u2014 \u043a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044f \u0434\u043b\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0456\u0457 \u0440\u0456\u0437\u043d\u0438\u0445 \u0443\u043c\u043e\u0432 \u043c\u0435\u0440\u0435\u0436\u0456, \u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, \u043f\u043e\u0432\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0437&#8217;\u0454\u0434\u043d\u0430\u043d\u043d\u044f.<\/li><li><strong>\u0406\u043d\u0448\u0456 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f<\/strong> \u2014 \u0447\u0430\u0441 \u043e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f \u043c\u0456\u0436 \u0434\u0456\u044f\u043c\u0438, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0435\u0434\u043e\u0432\u0438\u0449\u0430, \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0430\u0440\u0430\u043b\u0435\u043b\u044c\u043d\u0438\u0445 \u0442\u0435\u0441\u0442\u0456\u0432 \u0442\u043e\u0449\u043e.<\/li><\/ul><p>\u0426\u0435\u0439 \u0444\u0430\u0439\u043b \u0454 \u043e\u0441\u043d\u043e\u0432\u043d\u0438\u043c \u0434\u043b\u044f \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0441\u0435\u0440\u0435\u0434\u043e\u0432\u0438\u0449\u0430 \u0434\u043b\u044f \u0432\u0438\u043a\u043e\u043d\u0430\u043d\u043d\u044f \u0442\u0435\u0441\u0442\u0456\u0432 \u0443 Playwright.<\/p><hr \/><p><strong>\u041f\u0435\u0440\u0435\u0432\u0430\u0433\u0438 \u0442\u0430\u043a\u043e\u0457 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438<\/strong><\/p><ol><li><p><strong>\u0420\u043e\u0437\u0434\u0456\u043b\u0435\u043d\u043d\u044f \u043b\u043e\u0433\u0456\u043a\u0438<\/strong>:<\/p><ul><li>\u0422\u0435\u0441\u0442\u0438 \u0437\u043e\u0441\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u0456 \u043b\u0438\u0448\u0435 \u043d\u0430 \u0441\u0446\u0435\u043d\u0430\u0440\u0456\u044f\u0445.<\/li><li>\u0423\u0441\u044f \u043b\u043e\u0433\u0456\u043a\u0430 \u0440\u043e\u0431\u043e\u0442\u0438 \u0437 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u0454\u0442\u044c\u0441\u044f \u0432\u00a0<strong>pages\/<\/strong>.<\/li><\/ul><\/li><li><p><strong>\u0417\u0440\u0443\u0447\u043d\u0456\u0441\u0442\u044c \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0438<\/strong>:<\/p><ul><li>\u042f\u043a\u0449\u043e \u0437\u043c\u0456\u043d\u0438\u0442\u044c\u0441\u044f \u0456\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438, \u0434\u043e\u0441\u0442\u0430\u0442\u043d\u044c\u043e \u043e\u043d\u043e\u0432\u0438\u0442\u0438 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u043d\u0438\u0439 \u0444\u0430\u0439\u043b \u0443\u00a0<strong>pages\/<\/strong>.<\/li><\/ul><\/li><li><p><strong>\u0427\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u0456\u0441\u0442\u044c<\/strong>:<\/p><ul><li>\u0422\u0435\u0441\u0442\u0438 \u0447\u0438\u0442\u0430\u044e\u0442\u044c\u0441\u044f \u044f\u043a \u043a\u0440\u043e\u043a\u0438 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430, \u0449\u043e \u0441\u043f\u0440\u043e\u0449\u0443\u0454 \u0457\u0445 \u0440\u043e\u0437\u0443\u043c\u0456\u043d\u043d\u044f \u043d\u0430\u0432\u0456\u0442\u044c \u0434\u043b\u044f \u043d\u043e\u0432\u0430\u0447\u043a\u0456\u0432.<\/li><\/ul><\/li><li><p><strong>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u043e\u0432\u0430\u043d\u0456\u0441\u0442\u044c<\/strong>:<\/p><ul><li>\u0414\u043e\u0434\u0430\u0432\u0430\u0442\u0438 \u043d\u043e\u0432\u0456 \u0442\u0435\u0441\u0442\u0438 \u0430\u0431\u043e \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 \u043b\u0435\u0433\u043a\u043e \u0437\u0430\u0432\u0434\u044f\u043a\u0438 \u0447\u0456\u0442\u043a\u0456\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0456.<\/li><\/ul><\/li><\/ol><hr \/><p><strong>\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u043d\u044f<\/strong><\/p><ul><li><p><strong>\u0427\u043e\u043c\u0443 \u043c\u0438 \u0432\u0438\u0434\u0456\u043b\u044f\u0454\u043c\u043e \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 \u0432 \u043e\u043a\u0440\u0435\u043c\u0456 \u0444\u0430\u0439\u043b\u0438?<\/strong><br \/>\u0423\u044f\u0432\u0456\u0442\u044c, \u0449\u043e \u043d\u0430 \u0441\u0430\u0439\u0442\u0456 \u0437\u043c\u0456\u043d\u0438\u043b\u0430\u0441\u044f \u043a\u043d\u043e\u043f\u043a\u0430 &#171;Login&#187; \u043d\u0430 &#171;Sign In&#187;. \u0417\u0430\u043c\u0456\u0441\u0442\u044c \u0442\u043e\u0433\u043e, \u0449\u043e\u0431 \u043e\u043d\u043e\u0432\u043b\u044e\u0432\u0430\u0442\u0438 \u0432\u0441\u0456 \u0442\u0435\u0441\u0442\u0438, \u0434\u043e\u0441\u0442\u0430\u0442\u043d\u044c\u043e \u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u043b\u0438\u0448\u0435 \u043e\u0434\u0438\u043d \u043c\u0435\u0442\u043e\u0434 \u0443\u00a0<strong>login.page.ts<\/strong>.<\/p><\/li><li><p><strong>\u0427\u043e\u043c\u0443 \u0440\u0456\u0437\u043d\u0456 \u0444\u0430\u0439\u043b\u0438 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0456\u0432?<\/strong><br \/>\u0422\u0435\u0441\u0442\u0438 \u043f\u043e\u0434\u0456\u043b\u0435\u043d\u0456 \u0437\u0430 \u0444\u0443\u043d\u043a\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u0456\u0441\u0442\u044e, \u0449\u043e\u0431 \u0443 \u0440\u0430\u0437\u0456 \u043f\u043e\u043c\u0438\u043b\u043a\u0438 \u043b\u0435\u0433\u043a\u043e \u0437\u0440\u043e\u0437\u0443\u043c\u0456\u0442\u0438, \u0434\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0456\u044f, \u043a\u043e\u0448\u0438\u043a \u0447\u0438 \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f.<\/p><\/li><li><p><strong>\u041d\u0430\u0432\u0456\u0449\u043e \u043f\u043e\u0442\u0440\u0456\u0431\u0435\u043d playwright.config.ts?<\/strong><br \/>\u0426\u0435\u0439 \u0444\u0430\u0439\u043b \u0437\u0430\u0434\u0430\u0454 \u0431\u0430\u0437\u043e\u0432\u0456 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f, \u0449\u043e\u0431 \u0443\u043d\u0438\u043a\u043d\u0443\u0442\u0438 \u0457\u0445 \u0434\u0443\u0431\u043b\u044e\u0432\u0430\u043d\u043d\u044f \u0432 \u043a\u043e\u0436\u043d\u043e\u043c\u0443 \u0442\u0435\u0441\u0442\u0456. \u041d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0441\u0430\u0439\u0442\u0443 \u0443 \u043a\u0456\u043b\u044c\u043a\u043e\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u0446\u0435 \u0432\u043a\u0430\u0437\u0443\u0454\u0442\u044c\u0441\u044f \u043b\u0438\u0448\u0435 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0443 \u043a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u0457.<\/p><\/li><\/ul>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"ha-tab__title ha-tab__title--mobile elementor-repeater-item-cb371da\" data-tab=\"3\" role=\"tab\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"ha-tab__title-text\">\u041e\u043f\u0438\u0441 playwright.config.ts<\/span>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"ha-tab-content-1123\" class=\"ha-tab__content ha-clearfix elementor-repeater-item-cb371da\" data-tab=\"3\" role=\"tabpanel\" aria-labelledby=\"ha-tab-title-1123\">\n\t\t\t\t\t\t<p><code>playwright.config.ts<\/code>\u00a0\u2014 \u0446\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u0438\u0439 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u0457 \u0434\u043b\u044f Playwright. \u0412\u0456\u043d \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0454 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0456\u0437\u043e\u0432\u0430\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u0438 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u0442\u0435\u0441\u0442\u0456\u0432, \u0442\u0430\u043a\u0456 \u044f\u043a \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0438, \u0431\u0430\u0437\u043e\u0432\u0438\u0439 URL, \u0447\u0430\u0441 \u043e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0430 \u0431\u0430\u0433\u0430\u0442\u043e \u0456\u043d\u0448\u043e\u0433\u043e. \u0426\u0435\u0439 \u0444\u0430\u0439\u043b \u0434\u043e\u043f\u043e\u043c\u0430\u0433\u0430\u0454 \u0441\u043a\u043e\u0440\u043e\u0442\u0438\u0442\u0438 \u0434\u0443\u0431\u043b\u044e\u0432\u0430\u043d\u043d\u044f \u043a\u043e\u0434\u0443 \u0442\u0430 \u0441\u043f\u0440\u043e\u0449\u0443\u0454 \u0443\u043f\u0440\u0430\u0432\u043b\u0456\u043d\u043d\u044f \u0442\u0435\u0441\u0442\u0430\u043c\u0438.<\/p><p><strong>export default defineConfig({<\/strong><br \/><strong>testDir: &#8216;.\/tests&#8217;,<\/strong><br \/><strong>retries: 1,<\/strong><br \/><strong>use: {<\/strong><br \/><strong>headless: true, <\/strong><br \/><strong>viewport: { width: 1280, height: 720 },<\/strong><br \/><strong>actionTimeout: 5000,<\/strong><br \/><strong>baseURL: &#8216;https:\/\/www.saucedemo.com&#8217;,<\/strong><br \/><strong>screenshot: &#8216;only-on-failure&#8217;, <\/strong><br \/><strong>video: &#8216;retain-on-failure&#8217;,<\/strong><br \/><strong>},<\/strong><br \/><strong>projects: [<\/strong><br \/><strong>{<\/strong><br \/><strong>name: &#8216;desktop&#8217;,<\/strong><br \/><strong>use: { &#8230;devices[&#8216;Desktop Chrome&#8217;] },<\/strong><br \/><strong>},<\/strong><br \/><strong>{<\/strong><br \/><strong>name: &#8216;mobile&#8217;,<\/strong><br \/><strong>use: { &#8230;devices[&#8216;Pixel 5&#8217;] },<\/strong><br \/><strong>},<\/strong><br \/><strong>],<\/strong><br \/><strong>});<\/strong><\/p><p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0456 \u0440\u043e\u0437\u0434\u0456\u043b\u0438\u00a0<code>playwright.config.ts<\/code><\/strong><\/p><ol><li><strong>\u0406\u043c\u043f\u043e\u0440\u0442\u0438<\/strong><\/li><\/ol><p>\u041d\u0430 \u043f\u043e\u0447\u0430\u0442\u043a\u0443 \u0444\u0430\u0439\u043b\u0443 \u043f\u0456\u0434\u043a\u043b\u044e\u0447\u0430\u0454\u0442\u044c\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u0430 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0430 Playwright:<\/p><div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950\"><div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre hljs language-ts\"><span class=\"hljs-keyword\">import<\/span> { defineConfig } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'@playwright\/test'<\/span>;<br \/>\n<\/code><\/div><\/div><p><code>defineConfig<\/code>\u00a0\u0441\u043f\u0440\u043e\u0449\u0443\u0454 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u043a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u0457 \u0437 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f\u043c.<\/p><p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0456 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u043a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u0457:<\/strong><\/p><ul><li><p><strong><code>testDir: '.\/tests'<\/code><\/strong> \u2014 \u0432\u043a\u0430\u0437\u0443\u0454 \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0432 \u044f\u043a\u043e\u043c\u0443 \u0431\u0443\u0434\u0443\u0442\u044c \u0440\u043e\u0437\u043c\u0456\u0449\u0443\u0432\u0430\u0442\u0438\u0441\u044f \u0442\u0435\u0441\u0442\u0438. \u0423 \u0446\u044c\u043e\u043c\u0443 \u0432\u0438\u043f\u0430\u0434\u043a\u0443 \u0446\u0435 \u043f\u0430\u043f\u043a\u0430 <code>.\/tests<\/code>, \u0434\u0435 \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u044e\u0442\u044c\u0441\u044f \u0432\u0441\u0456 \u0432\u0430\u0448\u0456 \u0442\u0435\u0441\u0442\u0438.<\/p><\/li><li><p><strong><code>retries: 1<\/code><\/strong> \u2014 \u043d\u0430\u043b\u0430\u0448\u0442\u043e\u0432\u0443\u0454 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u0456\u0432 \u0434\u043b\u044f \u043a\u043e\u0436\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0443 \u0432 \u0440\u0430\u0437\u0456 \u043d\u0435\u0432\u0434\u0430\u0447\u0456. \u0423 \u0446\u044c\u043e\u043c\u0443 \u0432\u0438\u043f\u0430\u0434\u043a\u0443, \u044f\u043a\u0449\u043e \u0442\u0435\u0441\u0442 \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0435, \u0432\u0456\u043d \u0431\u0443\u0434\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 (\u0432\u0441\u044c\u043e\u0433\u043e \u0434\u0432\u0430 \u0441\u043f\u0440\u043e\u0431\u0438).<\/p><\/li><li><p><strong><code>use<\/code><\/strong> \u2014 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f, \u0449\u043e \u0441\u0442\u043e\u0441\u0443\u044e\u0442\u044c\u0441\u044f \u0441\u0435\u0440\u0435\u0434\u043e\u0432\u0438\u0449\u0430 \u0432\u0438\u043a\u043e\u043d\u0430\u043d\u043d\u044f \u0442\u0435\u0441\u0442\u0456\u0432.<\/p><ul><li><strong><code>headless: true<\/code><\/strong> \u2014 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0431\u0443\u0434\u0435 \u0432\u0438\u043a\u043e\u043d\u0443\u0432\u0430\u0442\u0438\u0441\u044f \u0432 \u0431\u0435\u0437\u0433\u043e\u043b\u043e\u0432\u043e\u043c\u0443 \u0440\u0435\u0436\u0438\u043c\u0456, \u0442\u043e\u0431\u0442\u043e \u0431\u0435\u0437 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0442\u044f \u0432\u0456\u043a\u043d\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.<\/li><li><strong><code>viewport: { width: 1280, height: 720 }<\/code><\/strong> \u2014 \u0432\u043a\u0430\u0437\u0443\u0454 \u0440\u043e\u0437\u043c\u0456\u0440 \u0435\u043a\u0440\u0430\u043d\u0443, \u043d\u0430 \u044f\u043a\u043e\u043c\u0443 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u0442\u0438\u043c\u0435\u0442\u044c\u0441\u044f \u0434\u043e\u0434\u0430\u0442\u043e\u043a (\u0432 \u0434\u0430\u043d\u043e\u043c\u0443 \u0432\u0438\u043f\u0430\u0434\u043a\u0443 \u0446\u0435 1280&#215;720 \u043f\u0456\u043a\u0441\u0435\u043b\u0456\u0432).<\/li><li><strong><code>actionTimeout: 5000<\/code><\/strong> \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0438\u0439 \u0447\u0430\u0441 \u043e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f \u0434\u043b\u044f \u043a\u043e\u0436\u043d\u043e\u0457 \u0434\u0456\u0457 (\u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, \u043a\u043b\u0456\u043a\u0438, \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u0442\u0435\u043a\u0441\u0442\u0443 \u0442\u043e\u0449\u043e). \u042f\u043a\u0449\u043e \u0434\u0456\u044f \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0442\u044f\u0433\u043e\u043c 5 \u0441\u0435\u043a\u0443\u043d\u0434, \u0442\u0435\u0441\u0442 \u0431\u0443\u0434\u0435 \u0432\u0438\u0437\u043d\u0430\u043d\u0438\u0439 \u043d\u0435\u0432\u0434\u0430\u043b\u0438\u043c.<\/li><li><strong><code>baseURL: 'https:\/\/www.saucedemo.com'<\/code><\/strong> \u2014 \u0431\u0430\u0437\u043e\u0432\u0430 URL-\u0430\u0434\u0440\u0435\u0441\u0430, \u044f\u043a\u0430 \u0431\u0443\u0434\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438\u0441\u044c \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0456\u0432. \u0426\u0435 \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0454 \u0437\u0440\u0443\u0447\u043d\u0456\u0448\u0435 \u043f\u0438\u0441\u0430\u0442\u0438 \u0442\u0435\u0441\u0442\u0438, \u043e\u0441\u043a\u0456\u043b\u044c\u043a\u0438 URL \u043c\u043e\u0436\u0435 \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044e\u0432\u0430\u0442\u0438\u0441\u044f \u0432 \u043a\u043e\u0436\u043d\u043e\u043c\u0443 \u0442\u0435\u0441\u0442\u0456.<\/li><li><strong><code>screenshot: 'only-on-failure'<\/code><\/strong> \u2014 \u0440\u043e\u0431\u0438\u0442\u0438 \u0437\u043d\u0456\u043c\u043e\u043a \u0435\u043a\u0440\u0430\u043d\u0443 \u0442\u0456\u043b\u044c\u043a\u0438 \u0432 \u0440\u0430\u0437\u0456 \u043d\u0435\u0432\u0434\u0430\u0447\u0456 \u0442\u0435\u0441\u0442\u0443.<\/li><li><strong><code>video: 'retain-on-failure'<\/code><\/strong> \u2014 \u0437\u0430\u043f\u0438\u0441\u0443\u0432\u0430\u0442\u0438 \u0432\u0456\u0434\u0435\u043e \u0442\u0456\u043b\u044c\u043a\u0438 \u0432 \u0440\u0430\u0437\u0456 \u043d\u0435\u0432\u0434\u0430\u0447\u0456 \u0442\u0435\u0441\u0442\u0443, \u0449\u043e \u0434\u043e\u043f\u043e\u043c\u0430\u0433\u0430\u0454 \u0430\u043d\u0430\u043b\u0456\u0437\u0443\u0432\u0430\u0442\u0438, \u0449\u043e \u043f\u0456\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a.<\/li><\/ul><\/li><\/ul><p><strong>\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0434\u043b\u044f \u0440\u0456\u0437\u043d\u0438\u0445 \u043f\u0440\u0438\u0441\u0442\u0440\u043e\u0457\u0432 (\u043f\u0440\u043e\u0435\u043a\u0442\u0456\u0432):<\/strong><\/p><p>projects: [<br \/>{<br \/>name: &#8216;desktop&#8217;,<br \/>use: { &#8230;devices[&#8216;Desktop Chrome&#8217;] },<br \/>},<br \/>{<br \/>name: &#8216;mobile&#8217;,<br \/>use: { &#8230;devices[&#8216;Pixel 5&#8217;] },<br \/>},<br \/>],<\/p><p>\u0426\u0435\u0439 \u0431\u043b\u043e\u043a \u043d\u0430\u043b\u0430\u0448\u0442\u043e\u0432\u0443\u0454 \u043f\u0440\u043e\u0435\u043a\u0442\u0438 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u043d\u0430 \u0440\u0456\u0437\u043d\u0438\u0445 \u043f\u0440\u0438\u0441\u0442\u0440\u043e\u044f\u0445:<\/p><ul><li><p><strong>\u041f\u0440\u043e\u0435\u043a\u0442 <code>desktop<\/code><\/strong> \u2014 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u0442\u0438\u043c\u0435 \u0441\u0430\u0439\u0442 \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u0456\u0439 \u0432\u0435\u0440\u0441\u0456\u0457 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 Chrome. \u0414\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044f, \u043f\u0435\u0440\u0435\u0434\u0431\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f <strong>Desktop Chrome<\/strong> \u0432 \u043e\u0431&#8217;\u0454\u043a\u0442\u0456 <code>devices<\/code>.<\/p><\/li><li><p><strong>\u041f\u0440\u043e\u0435\u043a\u0442 <code>mobile<\/code><\/strong> \u2014 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u0442\u0438\u043c\u0435 \u0441\u0430\u0439\u0442 \u043d\u0430 \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u043e\u043c\u0443 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0456 Pixel 5. \u0414\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044f, \u043f\u0435\u0440\u0435\u0434\u0431\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f <strong>Pixel 5<\/strong> \u0432 \u043e\u0431&#8217;\u0454\u043a\u0442\u0456 <code>devices<\/code>.<\/p><\/li><\/ul><p>\u041e\u0431\u0438\u0434\u0432\u0430 \u0446\u0456 \u043f\u0440\u043e\u0435\u043a\u0442\u0438 \u043c\u0430\u044e\u0442\u044c \u043e\u043a\u0440\u0435\u043c\u0456 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0434\u043b\u044f \u043a\u043e\u0436\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0443 \u043f\u0440\u0438\u0441\u0442\u0440\u043e\u044e, \u0449\u043e \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0454 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u0438\u0442\u0438 \u043a\u043e\u0440\u0435\u043a\u0442\u043d\u0456\u0441\u0442\u044c \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0456\u043e\u043d\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u0443 \u044f\u043a \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0430\u0445, \u0442\u0430\u043a \u0456 \u043d\u0430 \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0438\u0445 \u043f\u0440\u0438\u0441\u0442\u0440\u043e\u044f\u0445.<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"ha-tab__title ha-tab__title--mobile elementor-repeater-item-cf98d31\" data-tab=\"4\" role=\"tab\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"ha-tab__title-text\">\u041f\u0438\u0448\u0435\u043c\u043e \u043a\u043e\u0434 \u0432 pages\/<\/span>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"ha-tab-content-1124\" class=\"ha-tab__content ha-clearfix elementor-repeater-item-cf98d31\" data-tab=\"4\" role=\"tabpanel\" aria-labelledby=\"ha-tab-title-1124\">\n\t\t\t\t\t\t<p><strong>login.page.ts<\/strong><\/p><p>import { Page } from &#8216;@playwright\/test&#8217;;<\/p><p>export class LoginPage {<br \/>private page: Page;<br \/>private usernameInput = &#8216;#user-name&#8217;;<br \/>private passwordInput = &#8216;#password&#8217;;<br \/>private loginButton = &#8216;#login-button&#8217;;<br \/>private errorMessage = &#8216;.error-message-container&#8217;;<\/p><p>constructor(page: Page) {<br \/>this.page = page;<br \/>}<\/p><p>async goto() {<br \/>await this.page.goto(&#8216;\/&#8217;);<br \/>}<\/p><p>async login(username: string, password: string) {<br \/>await this.page.fill(this.usernameInput, username);<br \/>await this.page.fill(this.passwordInput, password);<br \/>await this.page.click(this.loginButton);<br \/>}<\/p><p>async getErrorMessage() {<br \/>return await this.page.innerText(this.errorMessage);<br \/>}<br \/>}<\/p><p><strong>\u041e\u043f\u0438\u0441 \u043a\u043b\u0430\u0441\u0443 <code>LoginPage<\/code><\/strong><\/p><p>\u041a\u043b\u0430\u0441 <code>LoginPage<\/code> \u0456\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u044e\u0454 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0456 \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u0457 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 \u043b\u043e\u0433\u0456\u043d\u0443 \u0434\u043b\u044f \u043f\u043e\u0434\u0430\u043b\u044c\u0448\u043e\u0433\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u0443 \u0442\u0435\u0441\u0442\u0430\u0445. \u0412\u0456\u043d \u043d\u0430\u0434\u0430\u0454 \u043c\u0435\u0442\u043e\u0434\u0438 \u0434\u043b\u044f \u043d\u0430\u0432\u0456\u0433\u0430\u0446\u0456\u0457 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443, \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u0434\u0430\u043d\u0438\u0445 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430, \u043d\u0430\u0442\u0438\u0441\u043a\u0430\u043d\u043d\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u043b\u043e\u0433\u0456\u043d\u0443 \u0442\u0430 \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u044c \u043f\u0440\u043e \u043f\u043e\u043c\u0438\u043b\u043a\u0438.<\/p><p><strong>\u0406\u043c\u043f\u043e\u0440\u0442\u0438:<\/strong><\/p><p>import { Page } from &#8216;@playwright\/test&#8217;;<\/p><p>\u0406\u043c\u043f\u043e\u0440\u0442\u0443\u0454\u0442\u044c\u0441\u044f <code>Page<\/code> \u0437 Playwright \u0434\u043b\u044f \u0440\u043e\u0431\u043e\u0442\u0438 \u0437\u0456 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u043e\u044e, \u043d\u0430 \u044f\u043a\u0456\u0439 \u0431\u0443\u0434\u0443\u0442\u044c \u0432\u0438\u043a\u043e\u043d\u0443\u0432\u0430\u0442\u0438\u0441\u044c \u0434\u0456\u0457.<\/p><p><strong>\u041e\u0433\u043e\u043b\u043e\u0448\u0435\u043d\u043d\u044f \u043a\u043b\u0430\u0441\u0443:<\/strong><\/p><p>export class LoginPage {<br \/>private page: Page;<br \/>private usernameInput = &#8216;#user-name&#8217;;<br \/>private passwordInput = &#8216;#password&#8217;;<br \/>private loginButton = &#8216;#login-button&#8217;;<br \/>private errorMessage = &#8216;.error-message-container&#8217;;<\/p><ul><li><strong><code>page<\/code><\/strong> \u2014 \u043e\u0431&#8217;\u0454\u043a\u0442 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438, \u0447\u0435\u0440\u0435\u0437 \u044f\u043a\u0438\u0439 \u0437\u0434\u0456\u0439\u0441\u043d\u044e\u044e\u0442\u044c\u0441\u044f \u0432\u0441\u0456 \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u0457.<\/li><li><strong><code>usernameInput<\/code><\/strong>, <strong><code>passwordInput<\/code><\/strong>, <strong><code>loginButton<\/code><\/strong>, <strong><code>errorMessage<\/code><\/strong> \u2014 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456\u0432 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 (\u043f\u043e\u043b\u0435 \u0434\u043b\u044f \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u0456\u043c\u0435\u043d\u0456 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430, \u043f\u043e\u043b\u0435 \u0434\u043b\u044f \u043f\u0430\u0440\u043e\u043b\u044f, \u043a\u043d\u043e\u043f\u043a\u0430 \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0443 \u0442\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u043f\u0440\u043e \u043f\u043e\u043c\u0438\u043b\u043a\u0443).<\/li><\/ul><p><strong>\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440:<\/strong><\/p><p>constructor(page: Page) {<br \/>this.page = page;<br \/>}<\/p><p>\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043f\u0440\u0438\u0439\u043c\u0430\u0454 \u043e\u0431&#8217;\u0454\u043a\u0442 <code>page<\/code> \u0456 \u0456\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0443\u0454 \u0439\u043e\u0433\u043e \u0434\u043b\u044f \u043f\u043e\u0434\u0430\u043b\u044c\u0448\u043e\u0433\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u0443 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u043a\u043b\u0430\u0441\u0443.<\/p><p>\u041c\u0435\u0442\u043e\u0434\u0438 \u043a\u043b\u0430\u0441\u0443:<\/p><ol><li><p><strong>\u041c\u0435\u0442\u043e\u0434 <code>goto<\/code><\/strong>:<\/p><\/li><\/ol><p>async goto() {<br \/>await this.page.goto(&#8216;\/&#8217;);<br \/>}<\/p><p>\u0426\u0435\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454 Playwright \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443 \u043d\u0430 \u0434\u043e\u043c\u0430\u0448\u043d\u044e \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 (\u0437\u0430 \u0443\u043c\u043e\u0432\u0447\u0430\u043d\u043d\u044f\u043c <code>\/<\/code> \u2014 \u043a\u043e\u0440\u0456\u043d\u044c \u0441\u0430\u0439\u0442\u0443).<\/p><p><strong>\u041c\u0435\u0442\u043e\u0434 <code>login<\/code><\/strong>:<\/p><p>async login(username: string, password: string) {<br \/>await this.page.fill(this.usernameInput, username);<br \/>await this.page.fill(this.passwordInput, password);<br \/>await this.page.click(this.loginButton);<br \/>}<\/p><p>\u041c\u0435\u0442\u043e\u0434 \u0437\u0430\u043f\u043e\u0432\u043d\u044e\u0454 \u043f\u043e\u043b\u044f \u0434\u043b\u044f \u0456\u043c\u0435\u043d\u0456 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430 \u0456 \u043f\u0430\u0440\u043e\u043b\u044f, \u0430 \u043f\u043e\u0442\u0456\u043c \u043d\u0430\u0442\u0438\u0441\u043a\u0430\u0454 \u043a\u043d\u043e\u043f\u043a\u0443 \u043b\u043e\u0433\u0456\u043d\u0443 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0456\u0457.<\/p><p><strong>\u041c\u0435\u0442\u043e\u0434 <code>getErrorMessage<\/code><\/strong>:<\/p><p>async getErrorMessage() {<br \/>return await this.page.innerText(this.errorMessage);<br \/>}<\/p><p>\u0426\u0435\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0432\u0435\u0440\u0442\u0430\u0454 \u0442\u0435\u043a\u0441\u0442 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u043f\u0440\u043e \u043f\u043e\u043c\u0438\u043b\u043a\u0443, \u044f\u043a\u0449\u043e \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0456\u044f \u043d\u0435 \u0432\u0434\u0430\u043b\u0430\u0441\u044f.<\/p><p><strong>\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u043d\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u0438\u0445 \u0434\u0456\u0439:<\/strong><\/p><ul><li><strong><code>this.page.fill(selector, value)<\/code><\/strong> \u2014 \u043c\u0435\u0442\u043e\u0434 Playwright, \u044f\u043a\u0438\u0439 \u0437\u0430\u043f\u043e\u0432\u043d\u044e\u0454 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0435 \u043f\u043e\u043b\u0435 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c.<\/li><li><strong><code>this.page.click(selector)<\/code><\/strong> \u2014 \u043c\u0435\u0442\u043e\u0434, \u044f\u043a\u0438\u0439 \u043d\u0430\u0442\u0438\u0441\u043a\u0430\u0454 \u043d\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438, \u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, \u043a\u043d\u043e\u043f\u043a\u0443.<\/li><li><strong><code>this.page.innerText(selector)<\/code><\/strong> \u2014 \u043e\u0442\u0440\u0438\u043c\u0443\u0454 \u0442\u0435\u043a\u0441\u0442, \u0449\u043e \u043c\u0456\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0432 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456, \u0449\u043e \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u0454 \u0437\u0430\u0434\u0430\u043d\u043e\u043c\u0443 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0443.<\/li><\/ul><p>\u0426\u0435\u0439 \u043a\u043b\u0430\u0441 \u043c\u043e\u0436\u043d\u0430 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u043e\u0432\u0430\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0443 \u043b\u043e\u0433\u0456\u043d\u0443 \u043d\u0430 \u0432\u0435\u0431-\u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456, \u0437\u0430\u0431\u0435\u0437\u043f\u0435\u0447\u0443\u044e\u0447\u0438 \u0432\u0456\u0434\u043e\u043a\u0440\u0435\u043c\u043b\u0435\u043d\u043d\u044f \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456\u0432 \u0456\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0432\u0456\u0434 \u0442\u0435\u0441\u0442\u043e\u0432\u0438\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0456\u0457\u0432.<\/p><p><strong>inventory.page.ts<\/strong><\/p><div><div>import { Page } from &#8216;@playwright\/test&#8217;;<\/div><p>\u00a0<\/p><div>export class InventoryPage {<\/div><div>\u00a0 private page: Page;<\/div><div>\u00a0 private productTitles = &#8216;.inventory_item_name&#8217;;<\/div><div>\u00a0 private productPrice = &#8216;.inventory_item_price&#8217;;<\/div><div>\u00a0 private addToCartButton = &#8216;.btn_inventory&#8217;;<\/div><div>\u00a0 private backpackTitle = &#8216;Sauce Labs Backpack&#8217;; \u00a0\/\/ \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u043e\u0432\u0430\u0440\u0430<\/div><p>\u00a0<\/p><div>\u00a0 constructor(page: Page) {<\/div><div>\u00a0 \u00a0 this.page = page;<\/div><div>\u00a0 }<\/div><p>\u00a0<\/p><div>\u00a0 async getProductTitles() {<\/div><div>\u00a0 \u00a0 return await this.page.$$eval(this.productTitles, titles =&gt; titles.map(title =&gt; title.textContent?.trim()));<\/div><div>\u00a0 }<\/div><p>\u00a0<\/p><div>\u00a0 async getProductPrices() {<\/div><div>\u00a0 \u00a0 return await this.page.$$eval(this.productPrice, prices =&gt; prices.map(price =&gt; price.textContent?.trim()));<\/div><div>\u00a0 }<\/div><p>\u00a0<\/p><div>\u00a0 async addBackpackToCart() {<\/div><div>\u00a0 \u00a0 const backpackIndex = await this.page.$$eval(this.productTitles, (titles, backpackTitle) =&gt;<\/div><div>\u00a0 \u00a0 \u00a0 titles.findIndex(title =&gt; title.textContent?.trim() === backpackTitle), this.backpackTitle);<\/div><p>\u00a0<\/p><div>\u00a0 \u00a0 if (backpackIndex !== -1) {<\/div><div>\u00a0 \u00a0 \u00a0 const addToCartButtons = await this.page.$$(this.addToCartButton);<\/div><div>\u00a0 \u00a0 \u00a0 await addToCartButtons[backpackIndex].click();<\/div><div>\u00a0 \u00a0 } else {<\/div><div>\u00a0 \u00a0 \u00a0 throw new Error(&#8216;Sauce Labs Backpack not found on the page&#8217;);<\/div><div>\u00a0 \u00a0 }<\/div><div>\u00a0 }<\/div><div>}<\/div><\/div><div><p><strong>\u041e\u043f\u0438\u0441 \u043a\u043b\u0430\u0441\u0443 <code>InventoryPage<\/code><\/strong><\/p><p>\u041a\u043b\u0430\u0441 <code>InventoryPage<\/code> \u0456\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u044e\u0454 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0456 \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u0457 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 \u0456\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044e. \u0412\u0456\u043d \u043d\u0430\u0434\u0430\u0454 \u043c\u0435\u0442\u043e\u0434\u0438 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u043d\u0430\u0437\u0432 \u0442\u0430 \u0446\u0456\u043d \u0442\u043e\u0432\u0430\u0440\u0456\u0432, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0434\u043b\u044f \u0434\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u043f\u0435\u0432\u043d\u043e\u0433\u043e \u0442\u043e\u0432\u0430\u0440\u0443 (\u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, &#171;Sauce Labs Backpack&#187;) \u0443 \u043a\u043e\u0448\u0438\u043a.<\/p><\/div><p><strong>\u041e\u0433\u043e\u043b\u043e\u0448\u0435\u043d\u043d\u044f \u043a\u043b\u0430\u0441\u0443:<\/strong><\/p><p>export class InventoryPage {<br \/>private page: Page;<br \/>private productTitles = &#8216;.inventory_item_name&#8217;;<br \/>private productPrice = &#8216;.inventory_item_price&#8217;;<br \/>private addToCartButton = &#8216;.btn_inventory&#8217;;<br \/>private backpackTitle = &#8216;Sauce Labs Backpack&#8217;;\u00a0<\/p><ul><li><strong><code>page<\/code><\/strong> \u2014 \u043e\u0431&#8217;\u0454\u043a\u0442 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 \u0434\u043b\u044f \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u0457 \u0437 \u0432\u0435\u0431-\u0441\u0442\u043e\u0440\u0456\u043d\u043a\u043e\u044e.<\/li><li><strong><code>productTitles<\/code><\/strong> \u2014 CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456\u0432, \u0449\u043e \u043c\u0456\u0441\u0442\u044f\u0442\u044c \u043d\u0430\u0437\u0432\u0438 \u0442\u043e\u0432\u0430\u0440\u0456\u0432 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456.<\/li><li><strong><code>productPrice<\/code><\/strong> \u2014 CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456\u0432, \u0449\u043e \u043c\u0456\u0441\u0442\u044f\u0442\u044c \u0446\u0456\u043d\u0438 \u0442\u043e\u0432\u0430\u0440\u0456\u0432.<\/li><li><strong><code>addToCartButton<\/code><\/strong> \u2014 CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043e\u043a \u0434\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u0442\u043e\u0432\u0430\u0440\u0456\u0432 \u0443 \u043a\u043e\u0448\u0438\u043a.<\/li><li><strong><code>backpackTitle<\/code><\/strong> \u2014 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0430 \u043d\u0430\u0437\u0432\u0430 \u0442\u043e\u0432\u0430\u0440\u0443, \u044f\u043a\u0438\u0439 \u043c\u0438 \u0445\u043e\u0447\u0435\u043c\u043e \u0434\u043e\u0434\u0430\u0442\u0438 \u0432 \u043a\u043e\u0448\u0438\u043a (\u0432 \u0434\u0430\u043d\u043e\u043c\u0443 \u0432\u0438\u043f\u0430\u0434\u043a\u0443, &#171;Sauce Labs Backpack&#187;).<\/li><\/ul><p><strong>\u041c\u0435\u0442\u043e\u0434\u0438 \u043a\u043b\u0430\u0441\u0443:<\/strong><\/p><p><strong>\u041c\u0435\u0442\u043e\u0434 <code>getProductTitles<\/code><\/strong>:<\/p><p>async getProductTitles() {<br \/>return await this.page.$$eval(this.productTitles, titles =&gt; titles.map(title =&gt; title.textContent?.trim()));<br \/>}<\/p><p>\u041c\u0435\u0442\u043e\u0434 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454 \u043c\u0435\u0442\u043e\u0434 <code>$$eval<\/code> \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u0432\u0441\u0456\u0445 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456\u0432, \u0449\u043e \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u044e\u0442\u044c \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0443 <code>productTitles<\/code> (\u0442\u043e\u0431\u0442\u043e \u043d\u0430\u0437\u0432 \u0442\u043e\u0432\u0430\u0440\u0456\u0432), \u0456 \u043f\u043e\u0432\u0435\u0440\u0442\u0430\u0454 \u0457\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0443 \u0432\u0438\u0433\u043b\u044f\u0434\u0456 \u043c\u0430\u0441\u0438\u0432\u0443.<\/p><p><strong>\u041c\u0435\u0442\u043e\u0434 <code>getProductPrices<\/code><\/strong>:<\/p><p>async getProductPrices() {<br \/>return await this.page.$$eval(this.productPrice, prices =&gt; prices.map(price =&gt; price.textContent?.trim()));<br \/>}<\/p><p>\u0410\u043d\u0430\u043b\u043e\u0433\u0456\u0447\u043d\u043e \u0434\u043e \u043f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044c\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0443, \u0446\u0435\u0439 \u043c\u0435\u0442\u043e\u0434 \u043e\u0442\u0440\u0438\u043c\u0443\u0454 \u0446\u0456\u043d\u0438 \u0442\u043e\u0432\u0430\u0440\u0456\u0432 \u0437 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456\u0432, \u0449\u043e \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u044e\u0442\u044c \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0443 <code>productPrice<\/code>, \u0456 \u043f\u043e\u0432\u0435\u0440\u0442\u0430\u0454 \u0457\u0445 \u044f\u043a \u043c\u0430\u0441\u0438\u0432.<\/p><p><strong>\u041c\u0435\u0442\u043e\u0434 <code>addBackpackToCart<\/code><\/strong>:<\/p><p>async addBackpackToCart() {<br \/>const backpackIndex = await this.page.$$eval(this.productTitles, (titles, backpackTitle) =&gt;<br \/>titles.findIndex(title =&gt; title.textContent?.trim() === backpackTitle), this.backpackTitle);<\/p><p>if (backpackIndex !== -1) {<br \/>const addToCartButtons = await this.page.$$(this.addToCartButton);<br \/>await addToCartButtons[backpackIndex].click();\u00a0<br \/>} else {<br \/>throw new Error(&#8216;Sauce Labs Backpack not found on the page&#8217;);<br \/>}<br \/>}<\/p><ul><li>\u0426\u0435\u0439 \u043c\u0435\u0442\u043e\u0434 \u0448\u0443\u043a\u0430\u0454 \u0442\u043e\u0432\u0430\u0440 &#171;Sauce Labs Backpack&#187; \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456, \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u044e\u0447\u0438 <code>$$eval<\/code> \u0434\u043b\u044f \u043f\u043e\u0448\u0443\u043a\u0443 \u0456\u043d\u0434\u0435\u043a\u0441\u0443 \u0446\u044c\u043e\u0433\u043e \u0442\u043e\u0432\u0430\u0440\u0443 \u0441\u0435\u0440\u0435\u0434 \u0443\u0441\u0456\u0445 \u043d\u0430\u0437\u0432 \u0442\u043e\u0432\u0430\u0440\u0456\u0432.<\/li><li>\u042f\u043a\u0449\u043e \u0442\u043e\u0432\u0430\u0440 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u0438\u0439 (\u0442\u043e\u0431\u0442\u043e \u0456\u043d\u0434\u0435\u043a\u0441 \u043d\u0435 \u0434\u043e\u0440\u0456\u0432\u043d\u044e\u0454 -1), \u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u0442\u0438\u0441\u043a\u0430\u0454 \u043a\u043d\u043e\u043f\u043a\u0443 &#171;Add to cart&#187; \u0434\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0442\u043e\u0432\u0430\u0440\u0443, \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u044e\u0447\u0438 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u0438\u0439 \u0456\u043d\u0434\u0435\u043a\u0441 \u0442\u043e\u0432\u0430\u0440\u0443 \u0432 \u043c\u0430\u0441\u0438\u0432\u0456 \u043a\u043d\u043e\u043f\u043e\u043a \u0434\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f.<\/li><li>\u042f\u043a\u0449\u043e \u0442\u043e\u0432\u0430\u0440 \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u0438\u0439, \u0432\u0438\u043a\u0438\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u043f\u043e\u043c\u0438\u043b\u043a\u0430 \u0437 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f\u043c \u043f\u0440\u043e \u0432\u0456\u0434\u0441\u0443\u0442\u043d\u0456\u0441\u0442\u044c \u0442\u043e\u0432\u0430\u0440\u0443 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456.<\/li><\/ul><p><strong>\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u043d\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0456\u0432 Playwright:<\/strong><\/p><ul><li><strong><code>$$eval(selector, callback)<\/code><\/strong> \u2014 \u0446\u0435\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0454 \u043e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u0432\u0441\u0456 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438, \u0449\u043e \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u044e\u0442\u044c \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0443, \u0456 \u0437\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u0434\u043e \u043d\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0456\u044e \u0437\u0432\u043e\u0440\u043e\u0442\u043d\u043e\u0433\u043e \u0432\u0438\u043a\u043b\u0438\u043a\u0443 (<code>callback<\/code>), \u044f\u043a\u0430 \u043f\u043e\u0432\u0435\u0440\u0442\u0430\u0454 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f.<\/li><li><strong><code>this.page.$$(selector)<\/code><\/strong> \u2014 \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0432\u0441\u0456 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438, \u0449\u043e \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u044e\u0442\u044c \u0434\u0430\u043d\u043e\u043c\u0443 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0443, \u0456 \u043f\u043e\u0432\u0435\u0440\u0442\u0430\u0454 \u0457\u0445 \u044f\u043a \u043c\u0430\u0441\u0438\u0432 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456\u0432.<\/li><li><strong><code>element.click()<\/code><\/strong> \u2014 \u0432\u0438\u043a\u043b\u0438\u043a\u0430\u0454 \u043a\u043b\u0456\u043a \u043d\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456.<\/li><\/ul><p><strong>cart.page.ts<\/strong><\/p><div><div>import { Page } from &#8216;@playwright\/test&#8217;;<\/div><br \/><div>export class CartPage {<\/div><div>\u00a0 private page: Page;<\/div><div>\u00a0 private cartItemsSelector = &#8216;.cart_item&#8217;;<\/div><br \/><div>\u00a0 constructor(page: Page) {<\/div><div>\u00a0 \u00a0 this.page = page;<\/div><div>\u00a0 }<\/div><br \/><div>\u00a0 async getCartItems() {<\/div><div>\u00a0 \u00a0 return await this.page.$$eval(this.cartItemsSelector, items =&gt; items.map(item =&gt; item.textContent?.trim()));<\/div><div>\u00a0 }<\/div><br \/><div>\u00a0 async goto() {<\/div><div>\u00a0 \u00a0 await this.page.goto(&#8216;\/cart.html&#8217;);<\/div><div>\u00a0 }<\/div><div>}<\/div><\/div><p><strong>\u041e\u043f\u0438\u0441 \u043a\u043b\u0430\u0441\u0443 <\/strong><code><strong>CartPage<\/strong><\/code><\/p><p>\u041a\u043b\u0430\u0441 <code>CartPage<\/code> \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u0454 \u0437\u0430 \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u044e \u0437 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 \u043a\u043e\u0448\u0438\u043a\u0430, \u0442\u0430\u043a\u0438\u043c\u0438 \u044f\u043a \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u0441\u043f\u0438\u0441\u043a\u0443 \u0442\u043e\u0432\u0430\u0440\u0456\u0432 \u0443 \u043a\u043e\u0448\u0438\u043a\u0443 \u0442\u0430 \u043d\u0430\u0432\u0456\u0433\u0430\u0446\u0456\u044f \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 \u043a\u043e\u0448\u0438\u043a\u0430.<\/p><p><strong>\u041e\u0433\u043e\u043b\u043e\u0448\u0435\u043d\u043d\u044f \u043a\u043b\u0430\u0441\u0443:<\/strong><\/p><p>export class CartPage {<br \/>private page: Page;<br \/>private cartItemsSelector = &#8216;.cart_item&#8217;;<\/p><ul><li><strong><code>page<\/code><\/strong> \u2014 \u043e\u0431&#8217;\u0454\u043a\u0442 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438, \u043d\u0430 \u044f\u043a\u0456\u0439 \u0431\u0443\u0434\u0443\u0442\u044c \u0432\u0438\u043a\u043e\u043d\u0443\u0432\u0430\u0442\u0438\u0441\u044f \u0434\u0456\u0457.<\/li><li><strong><code>cartItemsSelector<\/code><\/strong> \u2014 CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456\u0432, \u0449\u043e \u043c\u0456\u0441\u0442\u044f\u0442\u044c \u0442\u043e\u0432\u0430\u0440\u0438 \u0432 \u043a\u043e\u0448\u0438\u043a\u0443 (\u0432 \u0434\u0430\u043d\u043e\u043c\u0443 \u0432\u0438\u043f\u0430\u0434\u043a\u0443 \u043a\u043b\u0430\u0441 <code>.cart_item<\/code>).<\/li><\/ul><p><strong>\u041c\u0435\u0442\u043e\u0434\u0438 \u043a\u043b\u0430\u0441\u0443:<\/strong><\/p><p><strong>\u041c\u0435\u0442\u043e\u0434 <code>getCartItems<\/code><\/strong>:<\/p><p>async getCartItems() {<br \/>return await this.page.$$eval(this.cartItemsSelector, items =&gt; items.map(item =&gt; item.textContent?.trim()));<br \/>}<\/p><ul><li>\u0426\u0435\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454 \u043c\u0435\u0442\u043e\u0434 <code>$$eval<\/code>, \u0449\u043e\u0431 \u043e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u0432\u0441\u0456 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438, \u044f\u043a\u0456 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u044e\u0442\u044c \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0443 <code>cartItemsSelector<\/code> (\u0442\u043e\u0431\u0442\u043e \u0432\u0441\u0456 \u0442\u043e\u0432\u0430\u0440\u0438 \u0432 \u043a\u043e\u0448\u0438\u043a\u0443).<\/li><li>\u0412\u0456\u043d \u0437\u0430\u0441\u0442\u043e\u0441\u043e\u0432\u0443\u0454 \u0444\u0443\u043d\u043a\u0446\u0456\u044e \u0434\u043e \u043a\u043e\u0436\u043d\u043e\u0433\u043e \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0443, \u044f\u043a\u0430 \u043e\u0442\u0440\u0438\u043c\u0443\u0454 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0438\u0439 \u0432\u043c\u0456\u0441\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0442\u0430 \u0432\u0438\u0434\u0430\u043b\u044f\u0454 \u0437\u0430\u0439\u0432\u0456 \u043f\u0440\u043e\u0431\u0456\u043b\u0438, \u043f\u043e\u0432\u0435\u0440\u0442\u0430\u044e\u0447\u0438 \u043c\u0430\u0441\u0438\u0432 \u043d\u0430\u0437\u0432 \u0442\u043e\u0432\u0430\u0440\u0456\u0432 \u0443 \u043a\u043e\u0448\u0438\u043a\u0443.<\/li><\/ul><p><strong>\u041c\u0435\u0442\u043e\u0434 <code>goto<\/code><\/strong>:<\/p><p>async goto() {<br \/>await this.page.goto(&#8216;\/cart.html&#8217;);<br \/>}<\/p><p>\u041c\u0435\u0442\u043e\u0434 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454 <code>this.page.goto()<\/code> \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 \u043a\u043e\u0448\u0438\u043a\u0430 (<code>\/cart.html<\/code>), \u0449\u043e\u0431 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432\u0456\u0434\u043a\u0440\u0438\u0432\u0430\u0442\u0438 \u0446\u044e \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445.<\/p><p><strong>\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u043d\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0456\u0432 Playwright:<\/strong><\/p><ul><li><strong><code>$$eval(selector, callback)<\/code><\/strong> \u2014 \u0446\u0435\u0439 \u043c\u0435\u0442\u043e\u0434 \u0448\u0443\u043a\u0430\u0454 \u0432\u0441\u0456 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456, \u0449\u043e \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u044e\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u043e\u043c\u0443 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0443, \u0456 \u0432\u0438\u043a\u043b\u0438\u043a\u0430\u0454 \u043d\u0430 \u043d\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0456\u044e \u0437\u0432\u043e\u0440\u043e\u0442\u043d\u043e\u0433\u043e \u0432\u0438\u043a\u043b\u0438\u043a\u0443, \u044f\u043a\u0430 \u043f\u043e\u0432\u0435\u0440\u0442\u0430\u0454 \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u0456 \u0434\u0430\u043d\u0456 (\u0432 \u0434\u0430\u043d\u043e\u043c\u0443 \u0432\u0438\u043f\u0430\u0434\u043a\u0443, \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0456 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f).<\/li><li><strong><code>this.page.goto(url)<\/code><\/strong> \u2014 \u043f\u0435\u0440\u0435\u0445\u0456\u0434 \u043d\u0430 \u0456\u043d\u0448\u0443 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 \u0441\u0430\u0439\u0442\u0443, \u0432 \u0434\u0430\u043d\u043e\u043c\u0443 \u0432\u0438\u043f\u0430\u0434\u043a\u0443 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 \u043a\u043e\u0448\u0438\u043a\u0430.<\/li><\/ul><p><strong>checkout.page.ts<\/strong><\/p><p>\u041a\u043b\u0430\u0441 <code>CheckoutPage<\/code> \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u0454 \u0437\u0430 \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u044e \u0437 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f, \u0442\u0430\u043a\u0438\u043c\u0438 \u044f\u043a \u0437\u0430\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f \u0444\u043e\u0440\u043c\u0438 \u0437 \u043e\u0441\u043e\u0431\u0438\u0441\u0442\u0438\u043c\u0438 \u0434\u0430\u043d\u0438\u043c\u0438 \u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0443 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f.<\/p><p><strong>\u041e\u0433\u043e\u043b\u043e\u0448\u0435\u043d\u043d\u044f \u043a\u043b\u0430\u0441\u0443:<\/strong><\/p><p>export class CheckoutPage {<br \/>private page: Page;<br \/>private firstNameInput = &#8216;#first-name&#8217;;<br \/>private lastNameInput = &#8216;#last-name&#8217;;<br \/>private postalCodeInput = &#8216;#postal-code&#8217;;<br \/>private continueButton = &#8216;#continue&#8217;;<br \/>private finishButton = &#8216;#finish&#8217;;<\/p><ul><li><strong><code>page<\/code><\/strong> \u2014 \u043e\u0431&#8217;\u0454\u043a\u0442 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438, \u0437 \u044f\u043a\u043e\u044e \u0437\u0434\u0456\u0439\u0441\u043d\u044e\u044e\u0442\u044c\u0441\u044f \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u0457.<\/li><li><strong><code>firstNameInput<\/code><\/strong> \u2014 CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u043b\u044f \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u0456\u043c\u0435\u043d\u0456.<\/li><li><strong><code>lastNameInput<\/code><\/strong> \u2014 CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u043b\u044f \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u043f\u0440\u0456\u0437\u0432\u0438\u0449\u0430.<\/li><li><strong><code>postalCodeInput<\/code><\/strong> \u2014 CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u043b\u044f \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u043f\u043e\u0448\u0442\u043e\u0432\u043e\u0433\u043e \u0456\u043d\u0434\u0435\u043a\u0441\u0443.<\/li><li><strong><code>continueButton<\/code><\/strong> \u2014 CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u0440\u043e\u0434\u043e\u0432\u0436\u0435\u043d\u043d\u044f \u043f\u0456\u0441\u043b\u044f \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u043e\u0441\u043e\u0431\u0438\u0441\u0442\u0438\u0445 \u0434\u0430\u043d\u0438\u0445.<\/li><li><strong><code>finishButton<\/code><\/strong> \u2014 CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044f \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f.<\/li><\/ul><div class=\"flex-shrink-0 flex flex-col relative items-end\"><div><div class=\"pt-0\"><div class=\"gizmo-bot-avatar flex h-8 w-8 items-center justify-center overflow-hidden rounded-full\"><div class=\"relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8\">\u00a0<\/div><\/div><\/div><\/div><\/div><div class=\"group\/conversation-turn relative flex w-full min-w-0 flex-col agent-turn\"><div class=\"flex-col gap-1 md:gap-3\"><div class=\"flex max-w-full flex-col flex-grow\"><div class=\"min-h-8 text-message flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&amp;]:mt-5\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"1af416a2-e325-403a-b093-f296b86e3a9e\" data-message-model-slug=\"gpt-4o-mini\"><div class=\"flex w-full flex-col gap-1 empty:hidden first:pt-[3px]\"><div class=\"markdown prose w-full break-words dark:prose-invert light\"><p>\u0426\u0435\u0439 \u043a\u043e\u0434 \u043e\u043f\u0438\u0441\u0443\u0454 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u043e\u0432\u0430\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e Playwright \u0443 \u0444\u0430\u0439\u043b\u0456 <code>checkout.page.ts<\/code>. \u041e\u0441\u044c \u0439\u043e\u0433\u043e \u0440\u043e\u0437\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0442\u0430 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0456:<\/p><p><strong>\u041e\u043f\u0438\u0441 \u043a\u043b\u0430\u0441\u0443 <code>CheckoutPage<\/code><\/strong><\/p><p>\u041a\u043b\u0430\u0441 <code>CheckoutPage<\/code> \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u0454 \u0437\u0430 \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u044e \u0437 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f, \u0442\u0430\u043a\u0438\u043c\u0438 \u044f\u043a \u0437\u0430\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f \u0444\u043e\u0440\u043c\u0438 \u0437 \u043e\u0441\u043e\u0431\u0438\u0441\u0442\u0438\u043c\u0438 \u0434\u0430\u043d\u0438\u043c\u0438 \u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0443 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f.<\/p><div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950\"><div class=\"sticky top-9 md:top-[5.75rem]\"><div class=\"absolute bottom-0 right-2 flex h-9 items-center\"><div class=\"flex items-center rounded bg-token-sidebar-surface-primary px-2 font-sans text-xs text-token-text-secondary dark:bg-token-main-surface-secondary\">\u00a0<\/div><\/div><\/div><\/div><p><strong>\u041e\u0433\u043e\u043b\u043e\u0448\u0435\u043d\u043d\u044f \u043a\u043b\u0430\u0441\u0443:<\/strong><\/p><div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950\"><div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre hljs language-typescript\"><span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">CheckoutPage<\/span> {\n  <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-attr\">page<\/span>: <span class=\"hljs-title class_\">Page<\/span>;\n  <span class=\"hljs-keyword\">private<\/span> firstNameInput = <span class=\"hljs-string\">'#first-name'<\/span>;\n  <span class=\"hljs-keyword\">private<\/span> lastNameInput = <span class=\"hljs-string\">'#last-name'<\/span>;\n  <span class=\"hljs-keyword\">private<\/span> postalCodeInput = <span class=\"hljs-string\">'#postal-code'<\/span>;\n  <span class=\"hljs-keyword\">private<\/span> continueButton = <span class=\"hljs-string\">'#continue'<\/span>;\n  <span class=\"hljs-keyword\">private<\/span> finishButton = <span class=\"hljs-string\">'#finish'<\/span>;\n<\/code><\/div><\/div><ul><li><strong><code>page<\/code><\/strong> \u2014 \u043e\u0431&#8217;\u0454\u043a\u0442 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438, \u0437 \u044f\u043a\u043e\u044e \u0437\u0434\u0456\u0439\u0441\u043d\u044e\u044e\u0442\u044c\u0441\u044f \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u0457.<\/li><li><strong><code>firstNameInput<\/code><\/strong> \u2014 CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u043b\u044f \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u0456\u043c\u0435\u043d\u0456.<\/li><li><strong><code>lastNameInput<\/code><\/strong> \u2014 CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u043b\u044f \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u043f\u0440\u0456\u0437\u0432\u0438\u0449\u0430.<\/li><li><strong><code>postalCodeInput<\/code><\/strong> \u2014 CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u043b\u044f \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u043f\u043e\u0448\u0442\u043e\u0432\u043e\u0433\u043e \u0456\u043d\u0434\u0435\u043a\u0441\u0443.<\/li><li><strong><code>continueButton<\/code><\/strong> \u2014 CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u0440\u043e\u0434\u043e\u0432\u0436\u0435\u043d\u043d\u044f \u043f\u0456\u0441\u043b\u044f \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u043e\u0441\u043e\u0431\u0438\u0441\u0442\u0438\u0445 \u0434\u0430\u043d\u0438\u0445.<\/li><li><strong><code>finishButton<\/code><\/strong> \u2014 CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044f \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f.<\/li><\/ul><p><strong>\u041c\u0435\u0442\u043e\u0434\u0438 \u043a\u043b\u0430\u0441\u0443:<\/strong><\/p><p><strong>\u041c\u0435\u0442\u043e\u0434 <code>goto<\/code><\/strong>:<\/p><p>async goto() {<br \/>await this.page.goto(&#8216;\/checkout-step-one.html&#8217;);<br \/>}<\/p><p>\u0426\u0435\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454 <code>this.page.goto()<\/code> \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f (<code>\/checkout-step-one.html<\/code>). \u0426\u0435 \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0432\u0456\u0433\u0430\u0446\u0456\u0457 \u0434\u043e \u0446\u0456\u0454\u0457 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 \u043f\u0456\u0434 \u0447\u0430\u0441 \u0442\u0435\u0441\u0442\u0456\u0432.<\/p><p><strong>\u041c\u0435\u0442\u043e\u0434 <code>fillCheckoutForm<\/code><\/strong>:<\/p><p>async fillCheckoutForm(firstName: string, lastName: string, postalCode: string) {<br \/>await this.page.fill(this.firstNameInput, firstName);<br \/>await this.page.fill(this.lastNameInput, lastName);<br \/>await this.page.fill(this.postalCodeInput, postalCode);<br \/>await this.page.click(this.continueButton);<br \/>}<\/p><ul><li>\u0426\u0435\u0439 \u043c\u0435\u0442\u043e\u0434 \u0437\u0430\u043f\u043e\u0432\u043d\u044e\u0454 \u0444\u043e\u0440\u043c\u0443 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f. \u0412\u0456\u043d \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454 \u043c\u0435\u0442\u043e\u0434 <code>this.page.fill()<\/code> \u0434\u043b\u044f \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u044c \u0432 \u043f\u043e\u043b\u044f &#171;\u0456\u043c&#8217;\u044f&#187;, &#171;\u043f\u0440\u0456\u0437\u0432\u0438\u0449\u0435&#187; \u0442\u0430 &#171;\u043f\u043e\u0448\u0442\u043e\u0432\u0438\u0439 \u0456\u043d\u0434\u0435\u043a\u0441&#187;.<\/li><li>\u041f\u0456\u0441\u043b\u044f \u0437\u0430\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f \u0444\u043e\u0440\u043c\u0438, \u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u0442\u0438\u0441\u043a\u0430\u0454 \u043a\u043d\u043e\u043f\u043a\u0443 &#171;Continue&#187; (<code>this.page.click(this.continueButton)<\/code>), \u0449\u043e\u0431 \u043f\u0440\u043e\u0434\u043e\u0432\u0436\u0438\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f.<\/li><\/ul><p><strong>\u041c\u0435\u0442\u043e\u0434 <code>completeCheckout<\/code><\/strong>:<\/p><div>async completeCheckout() {<\/div><div>\u00a0 await this.page.click(this.finishButton);<\/div><div>}<\/div><p>\u0426\u0435\u0439 \u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u0442\u0438\u0441\u043a\u0430\u0454 \u043a\u043d\u043e\u043f\u043a\u0443 &#171;Finish&#187; (<code>this.page.click(this.finishButton)<\/code>), \u0449\u043e\u0431 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u043f\u0456\u0441\u043b\u044f \u0437\u0430\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f \u0444\u043e\u0440\u043c\u0438.<\/p><p><strong>\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u043d\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0456\u0432 Playwright:<\/strong><\/p><ul><li><strong><code>this.page.goto(url)<\/code><\/strong> \u2014 \u043f\u0435\u0440\u0435\u0445\u0456\u0434 \u043d\u0430 \u0432\u043a\u0430\u0437\u0430\u043d\u0443 URL-\u0430\u0434\u0440\u0435\u0441\u0443, \u0432 \u0434\u0430\u043d\u043e\u043c\u0443 \u0432\u0438\u043f\u0430\u0434\u043a\u0443 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f.<\/li><li><strong><code>this.page.fill(selector, value)<\/code><\/strong> \u2014 \u0437\u0430\u043f\u043e\u0432\u043d\u044e\u0454 \u043f\u043e\u043b\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f (\u0432\u043a\u0430\u0437\u0430\u043d\u0435 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u043e\u043c) \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c.<\/li><li><strong><code>this.page.click(selector)<\/code><\/strong> \u2014 \u043d\u0430\u0442\u0438\u0441\u043a\u0430\u0454 \u043d\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 (\u043a\u043d\u043e\u043f\u043a\u0443), \u0449\u043e \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u0454 \u0432\u043a\u0430\u0437\u0430\u043d\u043e\u043c\u0443 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0443.<\/li><\/ul><p><strong>product.page.ts<\/strong><\/p><div><div>import { Page } from &#8216;@playwright\/test&#8217;;<\/div><br \/><div>export class ProductPage {<\/div><div>\u00a0 private page: Page;<\/div><div>\u00a0 private addToCartButton = &#8216;.btn_inventory&#8217;;<\/div><div>\u00a0 private cartBadge = &#8216;.shopping_cart_badge&#8217;;<\/div><br \/><div>\u00a0 constructor(page: Page) {<\/div><div>\u00a0 \u00a0 this.page = page;<\/div><div>\u00a0 }<\/div><br \/><div>\u00a0 async addToCart() {<\/div><div>\u00a0 \u00a0 await this.page.click(this.addToCartButton);<\/div><div>\u00a0 }<\/div><br \/><div>\u00a0 async getCartBadge() {<\/div><div>\u00a0 \u00a0 return await this.page.textContent(this.cartBadge);<\/div><div>\u00a0 }<\/div><div>}<\/div>\u041a\u043b\u0430\u0441 <code>ProductPage<\/code> \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u0454 \u0437\u0430 \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u044e \u0437 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0443, \u0437\u043e\u043a\u0440\u0435\u043c\u0430, \u0434\u043b\u044f \u0434\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u0442\u043e\u0432\u0430\u0440\u0443 \u0432 \u043a\u043e\u0448\u0438\u043a \u0442\u0430 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0438 \u043a\u0456\u043b\u044c\u043a\u043e\u0441\u0442\u0456 \u0442\u043e\u0432\u0430\u0440\u0456\u0432 \u0443 \u043a\u043e\u0448\u0438\u043a\u0443.<\/div><div>\u00a0<\/div><div><strong>\u041e\u0433\u043e\u043b\u043e\u0448\u0435\u043d\u043d\u044f \u043a\u043b\u0430\u0441\u0443:<\/strong><\/div><div>export class ProductPage {<br \/>private page: Page;<br \/>private addToCartButton = &#8216;.btn_inventory&#8217;;<br \/>private cartBadge = &#8216;.shopping_cart_badge&#8217;;<\/div><div><ul><li><strong><code>page<\/code><\/strong> \u2014 \u043e\u0431&#8217;\u0454\u043a\u0442 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438, \u0437 \u044f\u043a\u043e\u044e \u0437\u0434\u0456\u0439\u0441\u043d\u044e\u044e\u0442\u044c\u0441\u044f \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u0457.<\/li><li><strong><code>addToCartButton<\/code><\/strong> \u2014 CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043a\u0438 &#171;\u0414\u043e\u0434\u0430\u0442\u0438 \u0432 \u043a\u043e\u0448\u0438\u043a&#187;.<\/li><li><strong><code>cartBadge<\/code><\/strong> \u2014 CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u043a\u0430 \u043a\u043e\u0448\u0438\u043a\u0430, \u044f\u043a\u0438\u0439 \u043f\u043e\u043a\u0430\u0437\u0443\u0454 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0442\u043e\u0432\u0430\u0440\u0456\u0432 \u0432 \u043a\u043e\u0448\u0438\u043a\u0443.<\/li><\/ul><p><strong>\u041c\u0435\u0442\u043e\u0434\u0438 \u043a\u043b\u0430\u0441\u0443:<\/strong><\/p><p><strong>\u041c\u0435\u0442\u043e\u0434 <code>addToCart<\/code><\/strong>:<\/p><p>async addToCart() {<br \/>await this.page.click(this.addToCartButton);<br \/>}<\/p><p>\u0426\u0435\u0439 \u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u0442\u0438\u0441\u043a\u0430\u0454 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 &#171;\u0414\u043e\u0434\u0430\u0442\u0438 \u0432 \u043a\u043e\u0448\u0438\u043a&#187; (<code>addToCartButton<\/code>) \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0443, \u0449\u043e \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0454 \u0434\u043e\u0434\u0430\u0442\u0438 \u0442\u043e\u0432\u0430\u0440 \u0434\u043e \u043a\u043e\u0448\u0438\u043a\u0430.<\/p><p><strong>\u041c\u0435\u0442\u043e\u0434 <code>getCartBadge<\/code><\/strong>:<\/p><p>async getCartBadge() {<br \/>return await this.page.textContent(this.cartBadge);<br \/>}<\/p><p>\u0426\u0435\u0439 \u043c\u0435\u0442\u043e\u0434 \u043e\u0442\u0440\u0438\u043c\u0443\u0454 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0438\u0439 \u0432\u043c\u0456\u0441\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0449\u043e \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u0454 \u0437\u043d\u0430\u0447\u043a\u0443 \u043a\u043e\u0448\u0438\u043a\u0430 (<code>cartBadge<\/code>). \u0417\u0430\u0437\u0432\u0438\u0447\u0430\u0439 \u0446\u0435\u0439 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0456\u0441\u0442\u0438\u0442\u044c \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0442\u043e\u0432\u0430\u0440\u0456\u0432 \u0443 \u043a\u043e\u0448\u0438\u043a\u0443. \u041c\u0435\u0442\u043e\u0434 \u043f\u043e\u0432\u0435\u0440\u0442\u0430\u0454 \u0442\u0435\u043a\u0441\u0442, \u044f\u043a\u0438\u0439 \u043c\u043e\u0436\u0435 \u0431\u0443\u0442\u0438 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0438, \u0441\u043a\u0456\u043b\u044c\u043a\u0438 \u0442\u043e\u0432\u0430\u0440\u0456\u0432 \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u0448\u0438\u043a\u0443 \u043f\u0456\u0441\u043b\u044f \u0434\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0442\u043e\u0432\u0430\u0440\u0443.<\/p><p><strong>\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u043d\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0456\u0432 Playwright:<\/strong><\/p><ul><li><strong><code>this.page.click(selector)<\/code><\/strong> \u2014 \u043d\u0430\u0442\u0438\u0441\u043a\u0430\u0454 \u043d\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442, \u0449\u043e \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u0454 \u0432\u043a\u0430\u0437\u0430\u043d\u043e\u043c\u0443 CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0443. \u0423 \u0434\u0430\u043d\u043e\u043c\u0443 \u0432\u0438\u043f\u0430\u0434\u043a\u0443 \u2014 \u0446\u0435 \u043a\u043d\u043e\u043f\u043a\u0430 \u0434\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u0442\u043e\u0432\u0430\u0440\u0443 \u0432 \u043a\u043e\u0448\u0438\u043a.<\/li><li><strong><code>this.page.textContent(selector)<\/code><\/strong> \u2014 \u043e\u0442\u0440\u0438\u043c\u0443\u0454 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0438\u0439 \u0432\u043c\u0456\u0441\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0449\u043e \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u0454 \u0432\u043a\u0430\u0437\u0430\u043d\u043e\u043c\u0443 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0443. \u0423 \u0446\u044c\u043e\u043c\u0443 \u0432\u0438\u043f\u0430\u0434\u043a\u0443 \u0446\u0435 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0442\u043e\u0432\u0430\u0440\u0456\u0432 \u0443 \u043a\u043e\u0448\u0438\u043a\u0443.<\/li><\/ul><\/div><\/div><\/div><\/div><\/div><\/div><\/div>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"ha-tab__title ha-tab__title--mobile elementor-repeater-item-7193402\" data-tab=\"5\" role=\"tab\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"ha-tab__title-text\">\u041f\u0438\u0448\u0435\u043c\u043e \u043a\u043e\u0434 \u0432 tests\/<\/span>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"ha-tab-content-1125\" class=\"ha-tab__content ha-clearfix elementor-repeater-item-7193402\" data-tab=\"5\" role=\"tabpanel\" aria-labelledby=\"ha-tab-title-1125\">\n\t\t\t\t\t\t<div><div><code>login.spec.ts<\/code><\/div><div>\u00a0<\/div><div>import { test, expect } from &#8216;@playwright\/test&#8217;;<\/div><div>import { LoginPage } from &#8216;..\/pages\/login.page&#8217;;<\/div><div>import { InventoryPage } from &#8216;..\/pages\/inventory.page&#8217;;<\/div><br \/><div>test.describe(&#8216;Login Tests&#8217;, () =&gt; {<\/div><div>\u00a0 let loginPage: LoginPage;<\/div><div>\u00a0 let inventoryPage: InventoryPage;<\/div><br \/><div>\u00a0 test.beforeEach(async ({ page }) =&gt; {<\/div><div>\u00a0 \u00a0 loginPage = new LoginPage(page);<\/div><div>\u00a0 \u00a0 inventoryPage = new InventoryPage(page);<\/div><div>\u00a0 });<\/div><br \/><div>\u00a0 test(&#8216;Valid login&#8217;, async () =&gt; {<\/div><div>\u00a0 \u00a0 await loginPage.goto();<\/div><div>\u00a0 \u00a0 await loginPage.login(&#8216;standard_user&#8217;, &#8216;secret_sauce&#8217;);<\/div><div>\u00a0 \u00a0 const titles = await inventoryPage.getProductTitles();<\/div><div>\u00a0 \u00a0 expect(titles.length).toBeGreaterThan(0);<\/div><div>\u00a0 });<\/div><br \/><div>\u00a0 test(&#8216;Invalid login&#8217;, async () =&gt; {<\/div><div>\u00a0 \u00a0 await loginPage.goto();<\/div><div>\u00a0 \u00a0 await loginPage.login(&#8216;invalid_user&#8217;, &#8216;invalid_pass&#8217;);<\/div><div>\u00a0 \u00a0 const errorMessage = await loginPage.getErrorMessage();<\/div><div>\u00a0 \u00a0 expect(errorMessage).toContain(&#8216;Epic sadface: Username and password do not match&#8217;);<\/div><div>\u00a0 });<\/div><div>});<\/div>\u0426\u0435\u0439 \u043a\u043e\u0434 \u0454 \u0442\u0435\u0441\u0442\u043e\u0432\u0438\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0456\u0454\u043c \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0443 \u0432\u0445\u043e\u0434\u0443 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e Playwright. \u0412\u0456\u043d \u0442\u0435\u0441\u0442\u0443\u0454 \u0434\u0432\u0430 \u0432\u0438\u043f\u0430\u0434\u043a\u0438: \u0443\u0441\u043f\u0456\u0448\u043d\u0438\u0439 \u0432\u0445\u0456\u0434 \u0442\u0430 \u043d\u0435\u0443\u0441\u043f\u0456\u0448\u043d\u0438\u0439 (\u0437 \u043d\u0435\u0432\u0456\u0440\u043d\u0438\u043c\u0438 \u0434\u0430\u043d\u0438\u043c\u0438)<\/div><div>import { test, expect } from &#8216;@playwright\/test&#8217;;<br \/>import { LoginPage } from &#8216;..\/pages\/login.page&#8217;;<br \/>import { InventoryPage } from &#8216;..\/pages\/inventory.page&#8217;;<\/div><div><ul><li><strong><code>test<\/code>, <code>expect<\/code><\/strong> \u2014 \u0456\u043c\u043f\u043e\u0440\u0442\u0443\u044e\u0442\u044c\u0441\u044f \u0437 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438 Playwright \u0434\u043b\u044f \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u0442\u0435\u0441\u0442\u0456\u0432 \u0442\u0430 \u0430\u0441\u0435\u0440\u0446\u0456\u0439.<\/li><li><strong><code>LoginPage<\/code><\/strong> \u0442\u0430 <strong><code>InventoryPage<\/code><\/strong> \u2014 \u0456\u043c\u043f\u043e\u0440\u0442\u0443\u044e\u0442\u044c\u0441\u044f \u043a\u043b\u0430\u0441\u0438, \u0449\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u044c \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u043d\u043e \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 \u0432\u0445\u043e\u0434\u0443 \u0442\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 \u0456\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044e. \u0412\u043e\u043d\u0438 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u044e\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u0457 \u0437 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0446\u0438\u0445 \u0441\u0442\u043e\u0440\u0456\u043d\u043e\u043a.<\/li><\/ul><p><strong>\u041e\u043f\u0438\u0441 \u0433\u0440\u0443\u043f\u0438 \u0442\u0435\u0441\u0442\u0456\u0432:<\/strong><\/p><p>test.describe(&#8216;Login Tests&#8217;, () =&gt; {<br \/>let loginPage: LoginPage;<br \/>let inventoryPage: InventoryPage;<\/p><ul><li><strong><code>test.describe<\/code><\/strong> \u2014 \u0433\u0440\u0443\u043f\u0443\u0454 \u0442\u0435\u0441\u0442\u0438 \u0437\u0430 \u043f\u0435\u0432\u043d\u043e\u044e \u0442\u0435\u043c\u043e\u044e, \u0443 \u0446\u044c\u043e\u043c\u0443 \u0432\u0438\u043f\u0430\u0434\u043a\u0443 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u0445\u043e\u0434\u0443 \u043d\u0430 \u0441\u0430\u0439\u0442.<\/li><li><strong><code>loginPage<\/code><\/strong> \u0442\u0430 <strong><code>inventoryPage<\/code><\/strong> \u2014 \u0437\u043c\u0456\u043d\u043d\u0456 \u0434\u043b\u044f \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u043d\u043d\u044f \u0435\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0456\u0432 \u043a\u043b\u0430\u0441\u0456\u0432 \u0441\u0442\u043e\u0440\u0456\u043d\u043e\u043a.<\/li><\/ul><p><code>beforeEach<\/code> \u0445\u0443\u043a:<\/p><p>test.beforeEach(async ({ page }) =&gt; {<br \/>loginPage = new LoginPage(page);<br \/>inventoryPage = new InventoryPage(page);<br \/>});<\/p><p><strong><code>beforeEach<\/code><\/strong> \u2014 \u0432\u0438\u043a\u043e\u043d\u0443\u0454\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u0436\u043d\u0438\u043c \u0442\u0435\u0441\u0442\u043e\u043c. \u0421\u0442\u0432\u043e\u0440\u044e\u0454\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u0438\u0439 \u0435\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0456\u0432 <code>LoginPage<\/code> \u0456 <code>InventoryPage<\/code> \u0434\u043b\u044f \u043a\u043e\u0436\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0443, \u0437\u0430\u0431\u0435\u0437\u043f\u0435\u0447\u0443\u044e\u0447\u0438, \u0449\u043e \u0442\u0435\u0441\u0442 \u043f\u043e\u0447\u0438\u043d\u0430\u0454\u0442\u044c\u0441\u044f \u0437 \u0447\u0438\u0441\u0442\u043e\u0457 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438.<\/p><\/div><p>\u0422\u0435\u0441\u0442 1: \u0423\u0441\u043f\u0456\u0448\u043d\u0438\u0439 \u0432\u0445\u0456\u0434<\/p><p>test(&#8216;Valid login&#8217;, async () =&gt; {<br \/>await loginPage.goto();<br \/>await loginPage.login(&#8216;standard_user&#8217;, &#8216;secret_sauce&#8217;);<br \/>const titles = await inventoryPage.getProductTitles();<br \/>expect(titles.length).toBeGreaterThan(0); <br \/>});<\/p><ul><li><strong><code>loginPage.goto()<\/code><\/strong> \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 \u043b\u043e\u0433\u0456\u043d\u0430.<\/li><li><strong><code>loginPage.login('standard_user', 'secret_sauce')<\/code><\/strong> \u2014 \u0432\u0438\u043a\u043e\u043d\u0443\u0454\u0442\u044c\u0441\u044f \u0432\u0445\u0456\u0434 \u0437 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0438\u043c\u0438 \u0434\u0430\u043d\u0438\u043c\u0438 (\u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447: <code>standard_user<\/code>, \u043f\u0430\u0440\u043e\u043b\u044c: <code>secret_sauce<\/code>).<\/li><li><strong><code>inventoryPage.getProductTitles()<\/code><\/strong> \u2014 \u043e\u0442\u0440\u0438\u043c\u0443\u0454\u043c\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430\u0437\u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0456\u0432 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 \u0456\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044e \u043f\u0456\u0441\u043b\u044f \u0443\u0441\u043f\u0456\u0448\u043d\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u0443.<\/li><li><strong><code>expect(titles.length).toBeGreaterThan(0)<\/code><\/strong> \u2014 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u044f\u0454\u043c\u043e, \u0449\u043e \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0456\u0432 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 \u0456\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044e \u0431\u0456\u043b\u044c\u0448\u0430 \u0437\u0430 0, \u0449\u043e \u0441\u0432\u0456\u0434\u0447\u0438\u0442\u044c \u043f\u0440\u043e \u0443\u0441\u043f\u0456\u0448\u043d\u0438\u0439 \u0432\u0445\u0456\u0434.<\/li><\/ul><p>\u0422\u0435\u0441\u0442 2: \u041d\u0435\u0432\u0456\u0440\u043d\u0438\u0439 \u0432\u0445\u0456\u0434<\/p><p>test(&#8216;Invalid login&#8217;, async () =&gt; {<br \/>await loginPage.goto();<br \/>await loginPage.login(&#8216;invalid_user&#8217;, &#8216;invalid_pass&#8217;);<br \/>const errorMessage = await loginPage.getErrorMessage();<br \/>expect(errorMessage).toContain(&#8216;Epic sadface: Username and password do not match&#8217;);<br \/>});<\/p><p>\u00a0<\/p><ul><li><strong><code>loginPage.goto()<\/code><\/strong> \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 \u043b\u043e\u0433\u0456\u043d\u0430.<\/li><li><strong><code>loginPage.login('invalid_user', 'invalid_pass')<\/code><\/strong> \u2014 \u043d\u0430\u043c\u0430\u0433\u0430\u0454\u043c\u043e\u0441\u044f \u0443\u0432\u0456\u0439\u0442\u0438 \u0437 \u043d\u0435\u0432\u0456\u0440\u043d\u0438\u043c\u0438 \u0434\u0430\u043d\u0438\u043c\u0438 (\u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447: <code>invalid_user<\/code>, \u043f\u0430\u0440\u043e\u043b\u044c: <code>invalid_pass<\/code>).<\/li><li><strong><code>loginPage.getErrorMessage()<\/code><\/strong> \u2014 \u043e\u0442\u0440\u0438\u043c\u0443\u0454\u043c\u043e \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u043f\u0440\u043e \u043f\u043e\u043c\u0438\u043b\u043a\u0443 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456.<\/li><li><strong><code>expect(errorMessage).toContain('Epic sadface: Username and password do not match')<\/code><\/strong> \u2014 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u044f\u0454\u043c\u043e, \u0449\u043e \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u043f\u0440\u043e \u043f\u043e\u043c\u0438\u043b\u043a\u0443 \u043c\u0456\u0441\u0442\u0438\u0442\u044c \u0432\u043a\u0430\u0437\u0430\u043d\u0443 \u0444\u0440\u0430\u0437\u0443, \u0449\u043e \u043f\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0436\u0443\u0454 \u043d\u0435\u0432\u0456\u0440\u043d\u0456 \u0434\u0430\u043d\u0456 \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0443.<\/li><\/ul><p>\u0426\u0435\u0439 \u043a\u043e\u0434 \u043c\u0456\u0441\u0442\u0438\u0442\u044c \u0434\u0432\u0430 \u0442\u0435\u0441\u0442\u0438:<\/p><ol><li><strong>\u0422\u0435\u0441\u0442 \u043d\u0430 \u0443\u0441\u043f\u0456\u0448\u043d\u0438\u0439 \u0432\u0445\u0456\u0434<\/strong> \u2014 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u044f\u0454, \u0449\u043e \u043f\u0456\u0441\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u0443 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 \u0456\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044e.<\/li><li><strong>\u0422\u0435\u0441\u0442 \u043d\u0430 \u043d\u0435\u0432\u0456\u0440\u043d\u0438\u0439 \u0432\u0445\u0456\u0434<\/strong> \u2014 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u044f\u0454, \u0449\u043e \u043f\u0456\u0441\u043b\u044f \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0438\u0445 \u0434\u0430\u043d\u0438\u0445 \u0437&#8217;\u044f\u0432\u043b\u044f\u0454\u0442\u044c\u0441\u044f \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u043d\u0435 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u043f\u0440\u043e \u043f\u043e\u043c\u0438\u043b\u043a\u0443.<\/li><\/ol><p><strong>inventory.spec.ts<\/strong><\/p><div><div>import { test, expect } from &#8216;@playwright\/test&#8217;;<\/div><div>import { InventoryPage } from &#8216;..\/pages\/inventory.page&#8217;;<\/div><div>import { LoginPage } from &#8216;..\/pages\/login.page&#8217;;<\/div><div>import { CartPage } from &#8216;..\/pages\/cart.page&#8217;;<\/div><br \/><div>test.describe(&#8216;Inventory Tests&#8217;, () =&gt; {<\/div><div>\u00a0 let loginPage: LoginPage;<\/div><div>\u00a0 let inventoryPage: InventoryPage;<\/div><div>\u00a0 let cartPage: CartPage;<\/div><br \/><div>\u00a0 test.beforeEach(async ({ page }) =&gt; {<\/div><div>\u00a0 \u00a0 loginPage = new LoginPage(page);<\/div><div>\u00a0 \u00a0 await loginPage.goto();<\/div><div>\u00a0 \u00a0 await loginPage.login(&#8216;standard_user&#8217;, &#8216;secret_sauce&#8217;);<\/div><div>\u00a0 \u00a0 inventoryPage = new InventoryPage(page);<\/div><div>\u00a0 \u00a0 cartPage = new CartPage(page);<\/div><div>\u00a0 });<\/div><br \/><div>\u00a0 test(&#8216;Add Sauce Labs Backpack to cart&#8217;, async () =&gt; {<\/div><div>\u00a0 \u00a0 await inventoryPage.addBackpackToCart();<\/div><div>\u00a0 \u00a0 await cartPage.goto(); \u00a0<\/div><div>\u00a0 \u00a0<\/div><div>\u00a0 \u00a0 const cartItems = await cartPage.getCartItems();<\/div><div>\u00a0 \u00a0 const backpackInCart = cartItems.some(item =&gt; item.includes(&#8216;Sauce Labs Backpack&#8217;));<\/div><div>\u00a0 \u00a0 expect(backpackInCart).toBe(true);<\/div><div>\u00a0 });<\/div><div>});<\/div>\u0426\u0435\u0439 \u043a\u043e\u0434 \u0442\u0435\u0441\u0442\u0443\u0454 \u0441\u0446\u0435\u043d\u0430\u0440\u0456\u0439 \u0434\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u0442\u043e\u0432\u0430\u0440\u0443 \u0434\u043e \u043a\u043e\u0448\u0438\u043a\u0430 \u0432 \u043e\u043d\u043b\u0430\u0439\u043d-\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0456.<\/div><div>\u00a0<\/div><div><strong>\u041e\u043f\u0438\u0441 \u0433\u0440\u0443\u043f\u0438 \u0442\u0435\u0441\u0442\u0456\u0432:<\/strong><\/div><div>test.describe(&#8216;Inventory Tests&#8217;, () =&gt; {<br \/>let loginPage: LoginPage;<br \/>let inventoryPage: InventoryPage;<br \/>let cartPage: CartPage;<\/div><div><ul><li><strong><code>test.describe<\/code><\/strong> \u2014 \u0433\u0440\u0443\u043f\u0443\u0454 \u0442\u0435\u0441\u0442\u0438 \u0437\u0430 \u043f\u0435\u0432\u043d\u043e\u044e \u0442\u0435\u043c\u043e\u044e, \u0432 \u0434\u0430\u043d\u043e\u043c\u0443 \u0432\u0438\u043f\u0430\u0434\u043a\u0443 \u0446\u0435 \u0442\u0435\u0441\u0442\u0438, \u0449\u043e \u0441\u0442\u043e\u0441\u0443\u044e\u0442\u044c\u0441\u044f \u0456\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044e.<\/li><li><strong><code>loginPage<\/code>, <code>inventoryPage<\/code>, <code>cartPage<\/code><\/strong> \u2014 \u0437\u043c\u0456\u043d\u043d\u0456, \u0449\u043e \u043c\u0456\u0441\u0442\u044f\u0442\u044c \u0435\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0438 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u043d\u0438\u0445 \u043a\u043b\u0430\u0441\u0456\u0432 \u0434\u043b\u044f \u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u0457 \u0437 \u0446\u0438\u043c\u0438 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0430\u043c\u0438.<\/li><\/ul><p><code>beforeEach<\/code> \u0445\u0443\u043a:<\/p><\/div><p>test.beforeEach(async ({ page }) =&gt; {<br \/>loginPage = new LoginPage(page);<br \/>await loginPage.goto();<br \/>await loginPage.login(&#8216;standard_user&#8217;, &#8216;secret_sauce&#8217;);<br \/>inventoryPage = new InventoryPage(page);<br \/>cartPage = new CartPage(page);<br \/>});<\/p><p>\u00a0<\/p><ul><li><strong><code>beforeEach<\/code><\/strong> \u2014 \u0432\u0438\u043a\u043e\u043d\u0443\u0454\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u0436\u043d\u0438\u043c \u0442\u0435\u0441\u0442\u043e\u043c.<\/li><li>\u0421\u0442\u0432\u043e\u0440\u044e\u044e\u0442\u044c\u0441\u044f \u0435\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0438 \u043a\u043b\u0430\u0441\u0456\u0432 <code>LoginPage<\/code>, <code>InventoryPage<\/code> \u0456 <code>CartPage<\/code>.<\/li><li>\u0417\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e <strong><code>loginPage.goto()<\/code><\/strong> \u0442\u0430 <strong><code>loginPage.login()<\/code><\/strong> \u0432\u0456\u0434\u0431\u0443\u0432\u0430\u0454\u0442\u044c\u0441\u044f \u0432\u0445\u0456\u0434 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0437 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0438\u0445 \u0434\u0430\u043d\u0438\u0445 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430.<\/li><li>\u041f\u0456\u0441\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0441\u0442\u0432\u043e\u0440\u044e\u044e\u0442\u044c\u0441\u044f \u0435\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0438 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u0456\u043d\u043e\u043a \u0456\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044e \u0442\u0430 \u043a\u043e\u0448\u0438\u043a\u0430.<\/li><\/ul><p>\u0422\u0435\u0441\u0442: \u0414\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u0440\u044e\u043a\u0437\u0430\u043a\u0430 &#171;Sauce Labs Backpack&#187; \u0434\u043e \u043a\u043e\u0448\u0438\u043a\u0430<\/p><p>test(&#8216;Add Sauce Labs Backpack to cart&#8217;, async () =&gt; {<br \/>await inventoryPage.addBackpackToCart(); <br \/>await cartPage.goto(); <br \/><br \/>const cartItems = await cartPage.getCartItems();<br \/>const backpackInCart = cartItems.some(item =&gt; item.includes(&#8216;Sauce Labs Backpack&#8217;));<br \/>expect(backpackInCart).toBe(true); <br \/>});<\/p><ul><li><strong><code>inventoryPage.addBackpackToCart()<\/code><\/strong> \u2014 \u0434\u043e\u0434\u0430\u0454\u043c\u043e \u0442\u043e\u0432\u0430\u0440 &#171;Sauce Labs Backpack&#187; \u0434\u043e \u043a\u043e\u0448\u0438\u043a\u0430, \u0432\u0438\u043a\u043b\u0438\u043a\u0430\u044e\u0447\u0438 \u043c\u0435\u0442\u043e\u0434 \u0437 <code>InventoryPage<\/code>. \u0426\u0435\u0439 \u043c\u0435\u0442\u043e\u0434 \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0442\u043e\u0432\u0430\u0440 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 \u0456 \u043d\u0430\u0442\u0438\u0441\u043a\u0430\u0454 \u043a\u043d\u043e\u043f\u043a\u0443 &#171;Add to Cart&#187;.<\/li><li><strong><code>cartPage.goto()<\/code><\/strong> \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 \u043a\u043e\u0448\u0438\u043a\u0430, \u0449\u043e\u0431 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u0438\u0442\u0438, \u0447\u0438 \u0434\u043e\u0434\u0430\u0432\u0441\u044f \u0442\u043e\u0432\u0430\u0440.<\/li><li><strong><code>cartPage.getCartItems()<\/code><\/strong> \u2014 \u043e\u0442\u0440\u0438\u043c\u0443\u0454\u043c\u043e \u0432\u0441\u0456 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0432 \u043a\u043e\u0448\u0438\u043a\u0443.<\/li><li><strong><code>const backpackInCart = cartItems.some(item =&gt; item.includes('Sauce Labs Backpack'))<\/code><\/strong> \u2014 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u044f\u0454\u043c\u043e, \u0447\u0438 \u0454 \u0442\u043e\u0432\u0430\u0440 &#171;Sauce Labs Backpack&#187; \u0441\u0435\u0440\u0435\u0434 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456\u0432 \u0443 \u043a\u043e\u0448\u0438\u043a\u0443. \u0414\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u044f\u0454\u043c\u043e, \u0447\u0438 \u0454 \u0432 \u0431\u0443\u0434\u044c-\u044f\u043a\u043e\u043c\u0443 \u0437 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456\u0432 \u043a\u043e\u0448\u0438\u043a\u0430 \u043d\u0430\u0437\u0432\u0430 \u0442\u043e\u0432\u0430\u0440\u0443.<\/li><li><strong><code>expect(backpackInCart).toBe(true)<\/code><\/strong> \u2014 \u0430\u0441\u0435\u0440\u0442\u0443\u0454\u043c\u043e, \u0449\u043e \u0442\u043e\u0432\u0430\u0440 &#171;Sauce Labs Backpack&#187; \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u0448\u0438\u043a\u0443. \u042f\u043a\u0449\u043e \u0446\u0435 \u043d\u0435 \u0442\u0430\u043a, \u0442\u0435\u0441\u0442 \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0435.<\/li><\/ul><p>\u0426\u0435\u0439 \u0442\u0435\u0441\u0442 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u044f\u0454 \u0444\u0443\u043d\u043a\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u0456\u0441\u0442\u044c \u0434\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u0442\u043e\u0432\u0430\u0440\u0443 \u0434\u043e \u043a\u043e\u0448\u0438\u043a\u0430 \u0456 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0456\u0441\u0442\u044c \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0434\u043e\u0434\u0430\u043d\u043e\u0433\u043e \u0442\u043e\u0432\u0430\u0440\u0443 \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 \u043a\u043e\u0448\u0438\u043a\u0430.<\/p><p>\u042f\u043a\u0449\u043e \u0442\u043e\u0432\u0430\u0440 \u0434\u043e\u0434\u0430\u043d\u043e \u0443\u0441\u043f\u0456\u0448\u043d\u043e, \u0442\u0435\u0441\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0443\u0454\u0442\u044c\u0441\u044f \u0443\u0441\u043f\u0456\u0448\u043d\u043e. \u042f\u043a\u0449\u043e \u0442\u043e\u0432\u0430\u0440 \u043d\u0435 \u0437&#8217;\u044f\u0432\u043b\u044f\u0454\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u0448\u0438\u043a\u0443, \u0442\u0435\u0441\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0443\u0454\u0442\u044c\u0441\u044f \u0437 \u043f\u043e\u043c\u0438\u043b\u043a\u043e\u044e.<\/p><p>\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f <strong><code>beforeEach<\/code><\/strong> \u0433\u0430\u0440\u0430\u043d\u0442\u0443\u0454, \u0449\u043e \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u0436\u043d\u0438\u043c \u0442\u0435\u0441\u0442\u043e\u043c \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447 \u0432\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0456 \u0442\u0435\u0441\u0442\u0443\u0454\u043c\u043e \u0434\u0456\u044e \u043d\u0430 \u0447\u0438\u0441\u0442\u0456\u0439 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 \u0456\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044e.<\/p><div><p><strong>cart.spec.ts<\/strong><\/p><div><div>import { test, expect } from &#8216;@playwright\/test&#8217;;<\/div><div>import { CartPage } from &#8216;..\/pages\/cart.page&#8217;;<\/div><div>import { LoginPage } from &#8216;..\/pages\/login.page&#8217;;<\/div><div>import { InventoryPage } from &#8216;..\/pages\/inventory.page&#8217;;<\/div><br \/><div>test.describe(&#8216;Cart Tests&#8217;, () =&gt; {<\/div><div>\u00a0 let loginPage: LoginPage;<\/div><div>\u00a0 let inventoryPage: InventoryPage;<\/div><div>\u00a0 let cartPage: CartPage;<\/div><br \/><div>\u00a0 test.beforeEach(async ({ page }) =&gt; {<\/div><div>\u00a0 \u00a0 loginPage = new LoginPage(page);<\/div><div>\u00a0 \u00a0 await loginPage.goto();<\/div><div>\u00a0 \u00a0 await loginPage.login(&#8216;standard_user&#8217;, &#8216;secret_sauce&#8217;);<\/div><div>\u00a0 \u00a0 inventoryPage = new InventoryPage(page);<\/div><div>\u00a0 \u00a0 cartPage = new CartPage(page);<\/div><div>\u00a0 \u00a0 await inventoryPage.addBackpackToCart(); \u00a0\/\/ Add to cart<\/div><div>\u00a0 });<\/div><br \/><div>\u00a0 test(&#8216;Check items in cart&#8217;, async () =&gt; {<\/div><div>\u00a0 \u00a0 await cartPage.goto();<\/div><div>\u00a0 \u00a0 const cartItems = await cartPage.getCartItems();<\/div><div>\u00a0 \u00a0 expect(cartItems.length).toBeGreaterThan(0);<\/div><div>\u00a0 });<\/div><div>});<\/div><div><div>import { test, expect } from &#8216;@playwright\/test&#8217;;<\/div><div>import { CartPage } from &#8216;..\/pages\/cart.page&#8217;;<\/div><div>import { LoginPage } from &#8216;..\/pages\/login.page&#8217;;<\/div><div>import { InventoryPage } from &#8216;..\/pages\/inventory.page&#8217;;<\/div><br \/><div>test.describe(&#8216;Cart Tests&#8217;, () =&gt; {<\/div><div>\u00a0 let loginPage: LoginPage;<\/div><div>\u00a0 let inventoryPage: InventoryPage;<\/div><div>\u00a0 let cartPage: CartPage;<\/div><br \/><div>\u00a0 test.beforeEach(async ({ page }) =&gt; {<\/div><div>\u00a0 \u00a0 loginPage = new LoginPage(page);<\/div><div>\u00a0 \u00a0 await loginPage.goto();<\/div><div>\u00a0 \u00a0 await loginPage.login(&#8216;standard_user&#8217;, &#8216;secret_sauce&#8217;);<\/div><div>\u00a0 \u00a0 inventoryPage = new InventoryPage(page);<\/div><div>\u00a0 \u00a0 cartPage = new CartPage(page);<\/div><div>\u00a0 \u00a0 await inventoryPage.addBackpackToCart(); \u00a0\/\/ Add to cart<\/div><div>\u00a0 });<\/div><br \/><div>\u00a0 test(&#8216;Check items in cart&#8217;, async () =&gt; {<\/div><div>\u00a0 \u00a0 await cartPage.goto();<\/div><div>\u00a0 \u00a0 const cartItems = await cartPage.getCartItems();<\/div><div>\u00a0 \u00a0 expect(cartItems.length).toBeGreaterThan(0);<\/div><div>\u00a0 });<\/div><div>});<\/div><div>\u0426\u0435\u0439 \u043a\u043e\u0434 \u0442\u0435\u0441\u0442\u0443\u0454 \u0444\u0443\u043d\u043a\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u0456\u0441\u0442\u044c \u043a\u043e\u0448\u0438\u043a\u0430 \u043d\u0430 \u043e\u043d\u043b\u0430\u0439\u043d-\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0456.<\/div><div><code>beforeEach<\/code> \u0445\u0443\u043a:<\/div><div>test.beforeEach(async ({ page }) =&gt; {<br \/>loginPage = new LoginPage(page);<br \/>await loginPage.goto();<br \/>await loginPage.login(&#8216;standard_user&#8217;, &#8216;secret_sauce&#8217;);<br \/>inventoryPage = new InventoryPage(page);<br \/>cartPage = new CartPage(page);<br \/>await inventoryPage.addBackpackToCart(); \/\/ Add to cart<br \/>});<\/div><\/div><div><ul><li><strong><code>beforeEach<\/code><\/strong> \u2014 \u0432\u0438\u043a\u043e\u043d\u0443\u0454\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u0436\u043d\u0438\u043c \u0442\u0435\u0441\u0442\u043e\u043c.<\/li><li>\u0421\u0442\u0432\u043e\u0440\u044e\u044e\u0442\u044c\u0441\u044f \u0435\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0438 \u043a\u043b\u0430\u0441\u0456\u0432 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u0456\u043d\u043e\u043a: <strong><code>LoginPage<\/code><\/strong>, <strong><code>InventoryPage<\/code><\/strong> \u0442\u0430 <strong><code>CartPage<\/code><\/strong>.<\/li><li>\u0412\u0438\u043a\u043e\u043d\u0443\u0454\u0442\u044c\u0441\u044f \u0432\u0445\u0456\u0434 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0447\u0435\u0440\u0435\u0437 <strong><code>loginPage.goto()<\/code><\/strong> \u0442\u0430 <strong><code>loginPage.login()<\/code><\/strong> \u0437 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0438\u043c\u0438 \u0434\u0430\u043d\u0438\u043c\u0438 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430.<\/li><li>\u041f\u0456\u0441\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0442\u043e\u0432\u0430\u0440 &#171;Sauce Labs Backpack&#187; \u0434\u043e\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u0434\u043e \u043a\u043e\u0448\u0438\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 <strong><code>inventoryPage.addBackpackToCart()<\/code><\/strong>.<\/li><\/ul><\/div><p>\u0422\u0435\u0441\u0442: \u041f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430 \u043d\u0430\u044f\u0432\u043d\u043e\u0441\u0442\u0456 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456\u0432 \u0443 \u043a\u043e\u0448\u0438\u043a\u0443<\/p><p>test(&#8216;Check items in cart&#8217;, async () =&gt; {<br \/>await cartPage.goto();<br \/>const cartItems = await cartPage.getCartItems();<br \/>expect(cartItems.length).toBeGreaterThan(0); <br \/>});<\/p><ul><li><strong><code>cartPage.goto()<\/code><\/strong> \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 \u043a\u043e\u0448\u0438\u043a\u0430, \u0449\u043e\u0431 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u0438\u0442\u0438, \u0447\u0438 \u0454 \u0434\u043e\u0434\u0430\u043d\u0456 \u0442\u043e\u0432\u0430\u0440\u0438.<\/li><li><strong><code>cartPage.getCartItems()<\/code><\/strong> \u2014 \u043e\u0442\u0440\u0438\u043c\u0443\u0454\u043c\u043e \u0432\u0441\u0456 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0432 \u043a\u043e\u0448\u0438\u043a\u0443 \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u043c\u0435\u0442\u043e\u0434\u0443 <code>getCartItems()<\/code> \u0437 <code>CartPage<\/code>.<\/li><li><strong><code>expect(cartItems.length).toBeGreaterThan(0)<\/code><\/strong> \u2014 \u0430\u0441\u0435\u0440\u0442\u0443\u0454\u043c\u043e, \u0449\u043e \u0432 \u043a\u043e\u0448\u0438\u043a\u0443 \u0454 \u0445\u043e\u0447\u0430 \u0431 \u043e\u0434\u0438\u043d \u0442\u043e\u0432\u0430\u0440. \u042f\u043a\u0449\u043e \u043a\u043e\u0448\u0438\u043a \u043f\u043e\u0440\u043e\u0436\u043d\u0456\u0439, \u0442\u0435\u0441\u0442 \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0435.<\/li><\/ul><\/div><\/div>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5e721121 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"5e721121\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-11f1d64d\" data-id=\"11f1d64d\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-6569d2f6 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6569d2f6\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-5ebd1066\" data-id=\"5ebd1066\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6d909dad elementor-widget elementor-widget-heading\" data-id=\"6d909dad\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u042f\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0438 \u0442\u0435\u0441\u0442\u0438?<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ecc906d elementor-widget elementor-widget-text-editor\" data-id=\"ecc906d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u0442\u0435\u0441\u0442\u0456\u0432 \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e Playwright, \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p><p><strong>npx playwright test<\/strong><\/p><p>\u0426\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0456 \u0442\u0435\u0441\u0442\u0438 \u0437 \u043f\u0430\u043f\u043a\u0438 <code>tests<\/code>, \u0437\u0433\u0456\u0434\u043d\u043e \u0437 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f\u043c\u0438 \u0432 \u043a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u0439\u043d\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0456 <code>playwright.config.ts<\/code>.<\/p><p>\u00a0<\/p><p><strong>\u0417\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0443:<\/strong><\/p><p>\u042f\u043a\u0449\u043e \u0432\u0438 \u0445\u043e\u0447\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0438\u0439 \u0442\u0435\u0441\u0442, \u0432\u043a\u0430\u0436\u0456\u0442\u044c \u0448\u043b\u044f\u0445 \u0434\u043e \u0446\u044c\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0443:<\/p><p><strong>npx playwright test tests\/login.spec.ts<\/strong><\/p><p>\u041d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, \u0449\u043e\u0431 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0438 \u0442\u0435\u0441\u0442\u0438 \u0432 \u0440\u0435\u0436\u0438\u043c\u0456 <code>headed<\/code> (\u0437 \u0456\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430), \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435:<\/p><p><strong>npx playwright test &#8212;headed<\/strong><\/p><p>\u0429\u043e\u0431 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0438 \u0431\u0456\u043b\u044c\u0448\u0435 \u043b\u043e\u0433\u0456\u0432 \u043f\u0456\u0434 \u0447\u0430\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u0442\u0435\u0441\u0442\u0456\u0432:<\/p><p><strong>npx playwright test &#8212;verbose<\/strong><\/p><p>\u041f\u0456\u0441\u043b\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044f \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f, \u0432\u0438 \u0437\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0431\u0430\u0447\u0438\u0442\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0438\u043a\u043e\u043d\u0430\u043d\u043d\u044f \u0442\u0435\u0441\u0442\u0456\u0432 \u043f\u0440\u044f\u043c\u043e \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0456. \u042f\u043a\u0449\u043e \u0442\u0435\u0441\u0442\u0438 \u043d\u0435 \u043f\u0440\u043e\u0439\u0448\u043b\u0438, Playwright \u0432\u0438\u0432\u0435\u0434\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0456 \u043f\u043e\u043c\u0438\u043b\u043a\u0438, \u0449\u043e\u0431 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0432\u0430\u043c \u0432\u0438\u043f\u0440\u0430\u0432\u0438\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0438.<\/p><p>\u00a0<\/p><p>\u00a0<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5a3de37d elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"5a3de37d\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1d71cf22\" data-id=\"1d71cf22\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6b356bf0 elementor-widget elementor-widget-heading\" data-id=\"6b356bf0\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 \u0433\u043e\u0442\u043e\u0432\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0456\u0437 GitLab?<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-670dfc29 elementor-widget elementor-widget-text-editor\" data-id=\"670dfc29\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>\u0414\u043b\u044f \u0437\u0432\u0456\u0440\u043a\u0438 \u0441\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0443 \u0432\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 \u0432\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0456\u044e<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6d983f94 elementor-align-left elementor-mobile-align-center elementor-widget elementor-widget-button\" data-id=\"6d983f94\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t<a href=\"https:\/\/gitlab.com\/iqaengineercom1group\/saucedemo\" target=\"_blank\" class=\"elementor-button-link elementor-button elementor-size-sm\" role=\"button\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t<span class=\"elementor-button-icon elementor-align-icon-right\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"hm hm-arrow-right\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"elementor-button-text\">\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0456\u0457<\/span>\n\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-83e0c6c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"83e0c6c\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-dbdef63\" data-id=\"dbdef63\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-63fd467 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"63fd467\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-6e56a5a\" data-id=\"6e56a5a\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-da5c27a elementor-widget elementor-widget-heading\" data-id=\"da5c27a\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u0425\u043e\u0447\u0435\u0442\u0435 \u043f\u0440\u043e\u0439\u0442\u0438 \u043f\u043e\u0432\u043d\u043e\u0446\u0456\u043d\u043d\u0438\u0439 2 \u043c\u0456\u0441\u044f\u0447\u043d\u0438\u0439 \u043a\u0443\u0440\u0441 Playwright \u043d\u0430 TypeScript?<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-069d11c elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"069d11c\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-b2a0226\" data-id=\"b2a0226\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-22e8d12 elementor-widget elementor-widget-heading\" data-id=\"22e8d12\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u041d\u0430 \u043a\u0443\u0440\u0441\u0456 \u0432\u0438<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-b2f6211\" data-id=\"b2f6211\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-4daa9bd elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4daa9bd\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-cf57286\" data-id=\"cf57286\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-53f103a elementor-vertical-align-middle elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"53f103a\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span class=\"elementor-icon elementor-animation-\" >\n\t\t\t\t<i aria-hidden=\"true\" class=\"hm hm-finger-touch\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t<span  >\n\t\t\t\t\t\t\u0412\u0438\u0432\u0447\u0456\u0442\u044c Playwright \u0432 \u0434\u0435\u0442\u0430\u043b\u044f\u0445\t\t\t\t\t<\/span>\n\t\t\t\t<\/h3>\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\t\u0432\u0456\u0434 \u0431\u0430\u0437\u043e\u0432\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0439 \u0434\u043e \u0441\u0443\u0447\u0430\u0441\u043d\u0438\u0445 \u0442\u0435\u0445\u043d\u0456\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0456\u0457.\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-fd0ff8c\" data-id=\"fd0ff8c\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-11afb77 elementor-vertical-align-middle elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"11afb77\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span class=\"elementor-icon elementor-animation-\" >\n\t\t\t\t<i aria-hidden=\"true\" class=\"hm hm-avatar-man\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t<span  >\n\t\t\t\t\t\t\u041e\u043f\u0430\u043d\u0443\u0439\u0442\u0435 TypeScript\t\t\t\t\t<\/span>\n\t\t\t\t<\/h3>\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\t\u0449\u043e\u0431 \u0441\u0442\u0432\u043e\u0440\u044e\u0432\u0430\u0442\u0438 \u0431\u0456\u043b\u044c\u0448 \u043d\u0430\u0434\u0456\u0439\u043d\u0456 \u0442\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043e\u0432\u0430\u043d\u0456 \u0442\u0435\u0441\u0442\u0438.\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-53fcf37 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"53fcf37\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-a5b2a5c\" data-id=\"a5b2a5c\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a7eb5ca elementor-vertical-align-middle elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"a7eb5ca\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span class=\"elementor-icon elementor-animation-\" >\n\t\t\t\t<i aria-hidden=\"true\" class=\"hm hm-clip\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t<span  >\n\t\t\t\t\t\t\u0421\u0442\u0432\u043e\u0440\u0456\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u0456 \u0441\u0446\u0435\u043d\u0430\u0440\u0456\u0457 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0456\u0432\t\t\t\t\t<\/span>\n\t\t\t\t<\/h3>\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\t\u043d\u0430\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0445 \u0434\u043e \u0431\u043e\u0439\u043e\u0432\u0438\u0445 \u0437\u0430\u0432\u0434\u0430\u043d\u044c.\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-3a35387\" data-id=\"3a35387\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b0eb5d5 elementor-vertical-align-middle elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"b0eb5d5\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span class=\"elementor-icon elementor-animation-\" >\n\t\t\t\t<i aria-hidden=\"true\" class=\"fab fa-codepen\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t<span  >\n\t\t\t\t\t\t\u041f\u043e\u0440\u0438\u043d\u044c\u0442\u0435 \u0432 \u0441\u0443\u0447\u0430\u0441\u043d\u0456 \u043f\u0456\u0434\u0445\u043e\u0434\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0456\u0457\t\t\t\t\t<\/span>\n\t\t\t\t<\/h3>\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\t\u0456\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0456\u044f \u0437 CI\/CD, \u0440\u043e\u0431\u043e\u0442\u0430 \u0437 API\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-1988af9a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"1988af9a\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-514b48b4\" data-id=\"514b48b4\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7df2845a elementor-widget elementor-widget-heading\" data-id=\"7df2845a\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">16 \u0433\u0440\u0443\u0434\u043d\u044f \u0432 20:00<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-43a6cdbd elementor-widget elementor-widget-heading\" data-id=\"43a6cdbd\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u0441\u0442\u0430\u0440\u0442<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-35d2d420 elementor-widget elementor-widget-ha-gradient-heading happy-addon ha-gradient-heading\" data-id=\"35d2d420\" data-element_type=\"widget\" data-widget_type=\"ha-gradient-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"ha-gradient-heading\">\u041f\u043e\u0447\u0430\u0442\u043e\u043a \u0447\u0435\u0440\u0435\u0437<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2a925d8c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2a925d8c\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-40a8a353\" data-id=\"40a8a353\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7edc7263 ha-countdown-label-bottom elementor-widget elementor-widget-ha-countdown happy-addon ha-countdown happy-addon-pro\" data-id=\"7edc7263\" data-element_type=\"widget\" data-widget_type=\"ha-countdown.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"ha-countdown-wrap\">\n\t\t\t\t<div class=\"ha-countdown\" data-date=\"Dec 16 2024 20:00:00\" data-end-action=\"none\">\n\t\t\t\t\t<div class=\"ha-countdown-item ha-countdown-item-days\">\n\t\t\t\t\t\t<span data-days class=\"ha-countdown-time ha-countdown-days\">0<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"ha-countdown-label ha-countdown-label-days\">\u0414\u043d\u0456\u0432<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"ha-countdown-item ha-countdown-item-hours\">\n\t\t\t\t\t\t<span class=\"ha-countdown-time ha-countdown-hours\" data-hours>0<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"ha-countdown-label ha-countdown-label-hours\">\u0413\u043e\u0434\u0438\u043d<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"ha-countdown-item ha-countdown-item-minutes\">\n\t\t\t\t\t\t<span class=\"ha-countdown-time ha-countdown-minutes\" data-minutes>0<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"ha-countdown-label ha-countdown-label-minutes\">\u0425\u0432\u0438\u043b\u0438\u043d<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"ha-countdown-item ha-countdown-item-seconds\">\n\t\t\t\t\t\t<span class=\"ha-countdown-time ha-countdown-seconds\" data-seconds>0<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"ha-countdown-label ha-countdown-label-seconds\">\u0421\u0435\u043a\u0443\u043d\u0434<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<!--End action markup-->\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-ac99a9c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"ac99a9c\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-eed47f0\" data-id=\"eed47f0\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-377236e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"377236e\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-248723f\" data-id=\"248723f\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d687078 elementor-widget elementor-widget-heading\" data-id=\"d687078\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u0411\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u0456\u0437\u043d\u0430\u0442\u0438\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u043a\u0443\u0440\u0441?<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3903a23 elementor-align-center elementor-mobile-align-center elementor-widget elementor-widget-button\" data-id=\"3903a23\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/course_playwright\/\" target=\"_blank\" class=\"elementor-button-link elementor-button elementor-size-sm\" role=\"button\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t<span class=\"elementor-button-icon elementor-align-icon-right\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"hm hm-arrow-right\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"elementor-button-text\">\u0414\u0435\u0442\u0430\u043b\u044c\u043d\u0456\u0448\u0435<\/span>\n\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-60d5ce6 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"60d5ce6\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-feadee2\" data-id=\"feadee2\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ed7298c elementor-widget elementor-widget-template\" data-id=\"ed7298c\" data-element_type=\"widget\" data-widget_type=\"template.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-template\">\n\t\t\t\t\t<div data-elementor-type=\"section\" data-elementor-id=\"10286\" class=\"elementor elementor-10286\">\n\t\t\t\t\t<div class=\"elementor-section-wrap\">\n\t\t\t\t\t\t\t\t<footer class=\"elementor-section elementor-top-section elementor-element elementor-element-2ba2e5c4 elementor-section-stretched elementor-hidden-mobile elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2ba2e5c4\" data-element_type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;,&quot;background_background&quot;:&quot;classic&quot;,&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-6e0428dd\" data-id=\"6e0428dd\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-295e450d elementor-widget elementor-widget-text-editor\" data-id=\"295e450d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>\u041c\u0438 \u0442\u0430\u043a\u043e\u0436 \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u044f \u0432 \u0441\u043e\u0446\u0456\u0430\u043b\u044c\u043d\u0438\u0445 \u043c\u0435\u0440\u0435\u0436\u0430\u0445! \u041f\u0456\u0434\u043f\u0438\u0441\u0443\u0439\u0441\u044f \u043d\u0430 \u043d\u0430\u0441 \u0442\u0430 \u043e\u0442\u0440\u0438\u043c\u0443\u0439 \u043e\u0441\u0442\u0430\u043d\u043d\u0456 \u043d\u043e\u0432\u0438\u043d\u0438, \u0430\u043a\u0446\u0456\u0457, \u0437\u043d\u0438\u0436\u043a\u0438, \u0431\u0435\u0437\u043a\u043e\u0448\u0442\u043e\u0432\u043d\u0456 \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0438 \u0442\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u043c\u0430\u0440\u0430\u0444\u043e\u043d\u0430\u0445. <br \/><strong>\u0411\u0443\u0434\u0435\u043c\u043e \u0440\u0430\u0434\u0456 \u0431\u0430\u0447\u0438\u0442\u0438 \u0442\u0435\u0431\u0435 \u0443 \u043d\u0430\u0448\u0456\u0439 \u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0442\u0456!<\/strong><\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4195a124 elementor-shape-circle elementor-grid-0 elementor-widget elementor-widget-social-icons\" data-id=\"4195a124\" data-element_type=\"widget\" data-widget_type=\"social-icons.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-social-icons-wrapper elementor-grid\">\n\t\t\t\t\t\t\t<span class=\"elementor-grid-item\">\n\t\t\t\t\t<a class=\"elementor-icon elementor-social-icon elementor-social-icon-facebook-f elementor-repeater-item-3d4d16f\" href=\"https:\/\/www.facebook.com\/iqaengineercom\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-screen-only\">Facebook-f<\/span>\n\t\t\t\t\t\t<i class=\"fab fa-facebook-f\"><\/i>\t\t\t\t\t<\/a>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t\t<span class=\"elementor-grid-item\">\n\t\t\t\t\t<a class=\"elementor-icon elementor-social-icon elementor-social-icon-instagram elementor-repeater-item-b9433ea\" href=\"https:\/\/www.instagram.com\/iqaengineer\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-screen-only\">Instagram<\/span>\n\t\t\t\t\t\t<i class=\"fab fa-instagram\"><\/i>\t\t\t\t\t<\/a>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t\t<span class=\"elementor-grid-item\">\n\t\t\t\t\t<a class=\"elementor-icon elementor-social-icon elementor-social-icon-viber elementor-repeater-item-0484ffe\" href=\"https:\/\/invite.viber.com\/?g2=AQBRYlgPsqwMrlFfgsDXv6UZt4oaSNq4XDDfCCOGHu%2Fjs4uhYVCQXtMPAtNdw%2B3p\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-screen-only\">Viber<\/span>\n\t\t\t\t\t\t<i class=\"fab fa-viber\"><\/i>\t\t\t\t\t<\/a>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t\t<span class=\"elementor-grid-item\">\n\t\t\t\t\t<a class=\"elementor-icon elementor-social-icon elementor-social-icon-telegram elementor-repeater-item-dec58a2\" href=\"https:\/\/t.me\/iqaengineer\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-screen-only\">Telegram<\/span>\n\t\t\t\t\t\t<i class=\"fab fa-telegram\"><\/i>\t\t\t\t\t<\/a>\n\t\t\t\t<\/span>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-637dd5d elementor-widget elementor-widget-text-editor\" data-id=\"637dd5d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p><a href=\"https:\/\/iqaengineer.com\/ua\/oferta\/\" target=\"_blank\" rel=\"noopener\">\u041f\u0443\u0431\u043b\u0456\u0447\u043d\u0430 \u043e\u0444\u0435\u0440\u0442\u0430<\/a>. \u0410\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0435 \u043f\u0440\u0430\u0432\u043e \u00a9 2026 \u0428\u043a\u043e\u043b\u0430 \u043f\u0456\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043b\u044c\u043d\u0438\u043a\u0456\u0432<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-3322edb5\" data-id=\"3322edb5\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-647e9c60 elementor-widget elementor-widget-heading\" data-id=\"647e9c60\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">\u041a\u0443\u0440\u0441\u0438<\/h4>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-2445683b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2445683b\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-32dd0041\" data-id=\"32dd0041\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2f08a4e elementor-align-left elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"2f08a4e\" data-element_type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/beginner_level\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">\u041f\u043e\u0447\u0430\u0442\u043a\u043e\u0432\u0438\u0439 \u0440\u0456\u0432\u0435\u043d\u044c<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/advanced-testing-level\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">\u041f\u0440\u043e\u0441\u0443\u043d\u0443\u0442\u0438\u0439 \u0440\u0456\u0432\u0435\u043d\u044c<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/advanced_level_more_projects\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">\u041f\u0440\u043e\u0441\u0443\u043d\u0443\u0442\u0438\u0439 \u0440\u0456\u0432\u0435\u043d\u044c.\u0411\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0454\u043a\u0442\u0456\u0432<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/automation_testing\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0456\u044f<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/test_app_mobile\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">\u0422\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0438\u0445 \u0434\u043e\u0434\u0430\u0442\u043a\u0456\u0432<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-184fb16f\" data-id=\"184fb16f\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3b24d56 elementor-align-left elementor-widget__width-initial elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"3b24d56\" data-element_type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/api_testing\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">\u0422\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f REST API<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/sql\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0437 SQL<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/testing_jmeter\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">\u041d\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0443\u0432\u0430\u043b\u044c\u043d\u0435 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0437 Jmeter<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/testing_devtools\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">DevTools<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/testing_fiddler\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Fiddler<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/footer>\n\t\t\t\t<footer class=\"elementor-section elementor-top-section elementor-element elementor-element-b667a98 elementor-section-stretched elementor-hidden-desktop elementor-hidden-tablet elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b667a98\" data-element_type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;,&quot;background_background&quot;:&quot;classic&quot;,&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3192d85\" data-id=\"3192d85\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3bdf306 elementor-widget elementor-widget-text-editor\" data-id=\"3bdf306\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>\u041c\u0438 \u0442\u0430\u043a\u043e\u0436 \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u044f \u0432 \u0441\u043e\u0446\u0456\u0430\u043b\u044c\u043d\u0438\u0445 \u043c\u0435\u0440\u0435\u0436\u0430\u0445! \u041f\u0456\u0434\u043f\u0438\u0441\u0443\u0439\u0441\u044f \u043d\u0430 \u043d\u0430\u0441 \u0442\u0430 \u043e\u0442\u0440\u0438\u043c\u0443\u0439 \u043e\u0441\u0442\u0430\u043d\u043d\u0456 \u043d\u043e\u0432\u0438\u043d\u0438, \u0430\u043a\u0446\u0456\u0457, \u0437\u043d\u0438\u0436\u043a\u0438, \u0431\u0435\u0437\u043a\u043e\u0448\u0442\u043e\u0432\u043d\u0456 \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0438 \u0442\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u043c\u0430\u0440\u0430\u0444\u043e\u043d\u0430\u0445. <br \/><strong>\u0411\u0443\u0434\u0435\u043c\u043e \u0440\u0430\u0434\u0456 \u0431\u0430\u0447\u0438\u0442\u0438 \u0442\u0435\u0431\u0435 \u0443 \u043d\u0430\u0448\u0456\u0439 \u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0442\u0456!<\/strong><\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d410540 elementor-shape-circle elementor-grid-0 elementor-widget elementor-widget-social-icons\" data-id=\"d410540\" data-element_type=\"widget\" data-widget_type=\"social-icons.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-social-icons-wrapper elementor-grid\">\n\t\t\t\t\t\t\t<span class=\"elementor-grid-item\">\n\t\t\t\t\t<a class=\"elementor-icon elementor-social-icon elementor-social-icon-facebook-f elementor-repeater-item-3d4d16f\" href=\"https:\/\/www.facebook.com\/iqaengineercom\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-screen-only\">Facebook-f<\/span>\n\t\t\t\t\t\t<i class=\"fab fa-facebook-f\"><\/i>\t\t\t\t\t<\/a>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t\t<span class=\"elementor-grid-item\">\n\t\t\t\t\t<a class=\"elementor-icon elementor-social-icon elementor-social-icon-instagram elementor-repeater-item-b9433ea\" href=\"https:\/\/www.instagram.com\/iqaengineer\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-screen-only\">Instagram<\/span>\n\t\t\t\t\t\t<i class=\"fab fa-instagram\"><\/i>\t\t\t\t\t<\/a>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t\t<span class=\"elementor-grid-item\">\n\t\t\t\t\t<a class=\"elementor-icon elementor-social-icon elementor-social-icon-viber elementor-repeater-item-0484ffe\" href=\"https:\/\/invite.viber.com\/?g2=AQBRYlgPsqwMrlFfgsDXv6UZt4oaSNq4XDDfCCOGHu%2Fjs4uhYVCQXtMPAtNdw%2B3p\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-screen-only\">Viber<\/span>\n\t\t\t\t\t\t<i class=\"fab fa-viber\"><\/i>\t\t\t\t\t<\/a>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t\t<span class=\"elementor-grid-item\">\n\t\t\t\t\t<a class=\"elementor-icon elementor-social-icon elementor-social-icon-telegram elementor-repeater-item-dec58a2\" href=\"https:\/\/t.me\/iqaengineer\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-screen-only\">Telegram<\/span>\n\t\t\t\t\t\t<i class=\"fab fa-telegram\"><\/i>\t\t\t\t\t<\/a>\n\t\t\t\t<\/span>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dbaba89 elementor-widget elementor-widget-heading\" data-id=\"dbaba89\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">\u041a\u0443\u0440\u0441\u0438<\/h4>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1d52057 elementor-align-left elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"1d52057\" data-element_type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/beginner_level\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">\u041f\u043e\u0447\u0430\u0442\u043a\u043e\u0432\u0438\u0439 \u0440\u0456\u0432\u0435\u043d\u044c<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/advanced-testing-level\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">\u041f\u0440\u043e\u0441\u0443\u043d\u0443\u0442\u0438\u0439 \u0440\u0456\u0432\u0435\u043d\u044c<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/advanced_level_more_projects\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">\u041f\u0440\u043e\u0441\u0443\u043d\u0443\u0442\u0438\u0439 \u0440\u0456\u0432\u0435\u043d\u044c.\u0411\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0454\u043a\u0442\u0456\u0432<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/automation_testing\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0456\u044f<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/test_app_mobile\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">\u0422\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0438\u0445 \u0434\u043e\u0434\u0430\u0442\u043a\u0456\u0432<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b46ca9 elementor-align-left elementor-widget__width-initial elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"4b46ca9\" data-element_type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/api_testing\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">\u0422\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f REST API<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/sql\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0437 SQL<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/testing_jmeter\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">\u041d\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0443\u0432\u0430\u043b\u044c\u043d\u0435 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0437 Jmeter<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/testing_devtools\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">DevTools<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/iqaengineer.com\/ua\/testing_fiddler\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-caret-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Fiddler<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4a61000 elementor-widget elementor-widget-text-editor\" data-id=\"4a61000\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p><a href=\"https:\/\/iqaengineer.com\/ua\/oferta\/\" target=\"_blank\" rel=\"noopener\">\u041f\u0443\u0431\u043b\u0456\u0447\u043d\u0430 \u043e\u0444\u0435\u0440\u0442\u0430<\/a>. \u0410\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0435 \u043f\u0440\u0430\u0432\u043e \u00a9 2024 \u0428\u043a\u043e\u043b\u0430 \u043f\u0456\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043b\u044c\u043d\u0438\u043a\u0456\u0432<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/footer>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>\u041e \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u043c\u0435 \u041d\u0430 \u044d\u0442\u043e\u043c \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u0435 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 Playwright \u2014 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u044b \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b, \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u0435\u0440\u0435\u0434 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c\u0438 \u0438&hellip;<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v20.12) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u043c \u0437 Playwright \u043d\u0430 TypeScript \u0437\u0430 1 \u0434\u0435\u043d\u044c. \u041d\u0430\u0447\u0430\u043b\u043e - \u0428\u043a\u043e\u043b\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/iqaengineer.com\/ua\/begin_playwright_1day\/\" \/>\n<meta property=\"og:locale\" content=\"uk_UA\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u043c \u0437 Playwright \u043d\u0430 TypeScript \u0437\u0430 1 \u0434\u0435\u043d\u044c. \u041d\u0430\u0447\u0430\u043b\u043e\" \/>\n<meta property=\"og:description\" content=\"\u041e \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u043c\u0435 \u041d\u0430 \u044d\u0442\u043e\u043c \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u0435 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 Playwright \u2014 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u044b \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b, \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u0435\u0440\u0435\u0434 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c\u0438 \u0438&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/iqaengineer.com\/ua\/begin_playwright_1day\/\" \/>\n<meta property=\"og:site_name\" content=\"\u0428\u043a\u043e\u043b\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/iqaengineer\/\" \/>\n<meta property=\"article:modified_time\" content=\"2024-12-07T15:53:13+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u041f\u0440\u0438\u0431\u043b. \u0447\u0430\u0441 \u0447\u0438\u0442\u0430\u043d\u043d\u044f\" \/>\n\t<meta name=\"twitter:data1\" content=\"34 \u0445\u0432\u0438\u043b\u0438\u043d\u0438\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/iqaengineer.com\/begin_playwright_1day\/\",\"url\":\"https:\/\/iqaengineer.com\/begin_playwright_1day\/\",\"name\":\"\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u043c \u0437 Playwright \u043d\u0430 TypeScript \u0437\u0430 1 \u0434\u0435\u043d\u044c. \u041d\u0430\u0447\u0430\u043b\u043e - \u0428\u043a\u043e\u043b\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432\",\"isPartOf\":{\"@id\":\"https:\/\/iqaengineer.com\/#website\"},\"datePublished\":\"2024-11-25T12:06:59+00:00\",\"dateModified\":\"2024-12-07T15:53:13+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/iqaengineer.com\/begin_playwright_1day\/#breadcrumb\"},\"inLanguage\":\"uk\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/iqaengineer.com\/begin_playwright_1day\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/iqaengineer.com\/begin_playwright_1day\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\",\"item\":\"https:\/\/iqaengineer.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u043c \u0437 Playwright \u043d\u0430 TypeScript \u0437\u0430 1 \u0434\u0435\u043d\u044c. \u041d\u0430\u0447\u0430\u043b\u043e\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/iqaengineer.com\/#website\",\"url\":\"https:\/\/iqaengineer.com\/\",\"name\":\"\u0428\u043a\u043e\u043b\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432\",\"description\":\"\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445\",\"publisher\":{\"@id\":\"https:\/\/iqaengineer.com\/#organization\"},\"alternateName\":\"iQAEngineer: \u043a\u0443\u0440\u0441\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u041f\u041e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/iqaengineer.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"uk\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/iqaengineer.com\/#organization\",\"name\":\"\u0428\u043a\u043e\u043b\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432\",\"url\":\"https:\/\/iqaengineer.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"uk\",\"@id\":\"https:\/\/iqaengineer.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/iqaengineer.com\/wp-content\/uploads\/2020\/11\/logo_new.png\",\"contentUrl\":\"https:\/\/iqaengineer.com\/wp-content\/uploads\/2020\/11\/logo_new.png\",\"width\":250,\"height\":60,\"caption\":\"\u0428\u043a\u043e\u043b\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432\"},\"image\":{\"@id\":\"https:\/\/iqaengineer.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/iqaengineer\/\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u043c \u0437 Playwright \u043d\u0430 TypeScript \u0437\u0430 1 \u0434\u0435\u043d\u044c. \u041d\u0430\u0447\u0430\u043b\u043e - \u0428\u043a\u043e\u043b\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/iqaengineer.com\/ua\/begin_playwright_1day\/","og_locale":"uk_UA","og_type":"article","og_title":"\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u043c \u0437 Playwright \u043d\u0430 TypeScript \u0437\u0430 1 \u0434\u0435\u043d\u044c. \u041d\u0430\u0447\u0430\u043b\u043e","og_description":"\u041e \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u043c\u0435 \u041d\u0430 \u044d\u0442\u043e\u043c \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u0435 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 Playwright \u2014 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u044b \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b, \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u0435\u0440\u0435\u0434 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c\u0438 \u0438&hellip;","og_url":"https:\/\/iqaengineer.com\/ua\/begin_playwright_1day\/","og_site_name":"\u0428\u043a\u043e\u043b\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432","article_publisher":"https:\/\/www.facebook.com\/iqaengineer\/","article_modified_time":"2024-12-07T15:53:13+00:00","twitter_card":"summary_large_image","twitter_misc":{"\u041f\u0440\u0438\u0431\u043b. \u0447\u0430\u0441 \u0447\u0438\u0442\u0430\u043d\u043d\u044f":"34 \u0445\u0432\u0438\u043b\u0438\u043d\u0438"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/iqaengineer.com\/begin_playwright_1day\/","url":"https:\/\/iqaengineer.com\/begin_playwright_1day\/","name":"\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u043c \u0437 Playwright \u043d\u0430 TypeScript \u0437\u0430 1 \u0434\u0435\u043d\u044c. \u041d\u0430\u0447\u0430\u043b\u043e - \u0428\u043a\u043e\u043b\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432","isPartOf":{"@id":"https:\/\/iqaengineer.com\/#website"},"datePublished":"2024-11-25T12:06:59+00:00","dateModified":"2024-12-07T15:53:13+00:00","breadcrumb":{"@id":"https:\/\/iqaengineer.com\/begin_playwright_1day\/#breadcrumb"},"inLanguage":"uk","potentialAction":[{"@type":"ReadAction","target":["https:\/\/iqaengineer.com\/begin_playwright_1day\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/iqaengineer.com\/begin_playwright_1day\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/iqaengineer.com\/"},{"@type":"ListItem","position":2,"name":"\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u043c \u0437 Playwright \u043d\u0430 TypeScript \u0437\u0430 1 \u0434\u0435\u043d\u044c. \u041d\u0430\u0447\u0430\u043b\u043e"}]},{"@type":"WebSite","@id":"https:\/\/iqaengineer.com\/#website","url":"https:\/\/iqaengineer.com\/","name":"\u0428\u043a\u043e\u043b\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432","description":"\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445","publisher":{"@id":"https:\/\/iqaengineer.com\/#organization"},"alternateName":"iQAEngineer: \u043a\u0443\u0440\u0441\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u041f\u041e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/iqaengineer.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"uk"},{"@type":"Organization","@id":"https:\/\/iqaengineer.com\/#organization","name":"\u0428\u043a\u043e\u043b\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432","url":"https:\/\/iqaengineer.com\/","logo":{"@type":"ImageObject","inLanguage":"uk","@id":"https:\/\/iqaengineer.com\/#\/schema\/logo\/image\/","url":"https:\/\/iqaengineer.com\/wp-content\/uploads\/2020\/11\/logo_new.png","contentUrl":"https:\/\/iqaengineer.com\/wp-content\/uploads\/2020\/11\/logo_new.png","width":250,"height":60,"caption":"\u0428\u043a\u043e\u043b\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432"},"image":{"@id":"https:\/\/iqaengineer.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/iqaengineer\/"]}]}},"_links":{"self":[{"href":"https:\/\/iqaengineer.com\/ua\/wp-json\/wp\/v2\/pages\/22067"}],"collection":[{"href":"https:\/\/iqaengineer.com\/ua\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/iqaengineer.com\/ua\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/iqaengineer.com\/ua\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/iqaengineer.com\/ua\/wp-json\/wp\/v2\/comments?post=22067"}],"version-history":[{"count":79,"href":"https:\/\/iqaengineer.com\/ua\/wp-json\/wp\/v2\/pages\/22067\/revisions"}],"predecessor-version":[{"id":22179,"href":"https:\/\/iqaengineer.com\/ua\/wp-json\/wp\/v2\/pages\/22067\/revisions\/22179"}],"wp:attachment":[{"href":"https:\/\/iqaengineer.com\/ua\/wp-json\/wp\/v2\/media?parent=22067"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}