{"id":458026,"date":"2025-04-29T09:37:17","date_gmt":"2025-04-29T09:37:17","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=458026"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=458026","title":{"rendered":"<span>\u041a\u0430\u043a \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u044e\u0442 UI-\u0442\u0435\u0441\u0442\u044b \u2014 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0432\u044b \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u0435 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u2014 \u0438 \u0441\u0440\u0430\u0437\u0443 \u0432\u0438\u0434\u0438\u0442\u0435, \u043a\u0430\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b, \u0430 \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0431\u044b\u0442\u044b. \u041f\u0440\u044f\u043c\u043e, \u043a\u0430\u043a \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u043d\u0438\u0436\u0435:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/31f\/268\/330\/31f268330b3d6be75afccea73ae1e31c.png\" width=\"3024\" height=\"1516\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/31f\/268\/330\/31f268330b3d6be75afccea73ae1e31c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/31f\/268\/330\/31f268330b3d6be75afccea73ae1e31c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0410 \u043f\u043e\u0442\u043e\u043c\u2026 \u043f\u0440\u043e\u0441\u044b\u043f\u0430\u0435\u0442\u0435\u0441\u044c. \u041e\u043f\u044f\u0442\u044c \u0441\u043e\u043d. \u041c\u0435\u0447\u0442\u044b \u043e\u0431 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438.<\/p>\n<p>\u041d\u043e \u0441\u0442\u043e\u043f. \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u043d. \u042d\u0442\u043e \u043c\u043e\u0439 <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\">\u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442<\/a> \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f UI \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432. \u0413\u043e\u0442\u043e\u0432\u044c\u0442\u0435\u0441\u044c \u2014 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e.<\/p>\n<h2>\u041a\u043b\u0430\u0441\u0441\u0438\u043a\u0430 \u0436\u0430\u043d\u0440\u0430 \u2014 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435<\/h2>\n<p>\u041f\u0438\u0448\u0435\u043c \u043c\u044b, \u0437\u043d\u0430\u0447\u0438\u0442, UI-\u0442\u0435\u0441\u0442\u044b. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c. \u041e\u043d\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442, \u0447\u0442\u043e-\u0442\u043e \u043a\u043b\u0438\u043a\u0430\u044e\u0442, \u0438\u043d\u043e\u0433\u0434\u0430 \u0434\u0430\u0436\u0435 \u0431\u0430\u0433\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442. \u041d\u043e \u0432\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442? \u0418 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e?<\/p>\n<p>\u0410 \u043a\u043d\u043e\u043f\u043a\u0443 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u044e\u0437\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u043c\u043e\u0434\u0430\u043b\u043a\u0435?<br \/>\u0410 \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 \u043d\u0435\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u043a\u043d\u043e\u043f\u043a\u0430 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u0430?<br \/>\u0410 \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0441\u0442 \u043e\u0431\u0440\u0435\u0437\u0430\u043b\u0441\u044f \u0432 <a href=\"https:\/\/www.w3schools.com\/css\/css_navbar.asp\" rel=\"noopener noreferrer nofollow\">navbar-\u0440\u0435<\/a> \u2014 \u043a\u0442\u043e \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442?<\/p>\n<p>\u041f\u0430\u0440\u0430 \u0442\u0430\u043a\u0438\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u2014 \u0438 \u043b\u044e\u0431\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0442\u043e\u0440 \u0443\u0436\u0435 \u0432 \u043b\u0451\u0433\u043a\u043e\u043c \u0441\u0442\u0443\u043f\u043e\u0440\u0435. \u0418 \u0434\u0430, \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043a\u0438\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0442\u043d\u0438, \u0438 \u043e\u043d\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c.<\/p>\n<h3>\u041a\u0430\u043a \u043d\u0430 \u044d\u0442\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442?<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 API \u2014 \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u0431\u044b <a href=\"https:\/\/swagger.io\/\" rel=\"noopener noreferrer nofollow\">Swagger<\/a>, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0443. \u0410 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 UI?<\/p>\n<p>\u041d\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0447\u0435\u0441\u0442\u043d\u043e, \u043a\u0430\u043a \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 UI-\u0442\u0435\u0441\u0442\u043e\u0432?<\/p>\n<h4>\u041d\u0438\u043a\u0430\u043a<\/h4>\n<p>\u0414\u0430-\u0434\u0430. \u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0438\u043a\u0430\u043a. \u041e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 UI-\u0442\u0435\u0441\u0442\u043e\u0432 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u2014 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u043e, \u0430 \u0447\u0442\u043e \u043d\u0435\u0442 \u2014 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041e\u0442 \u0441\u043b\u043e\u0432\u0430 \u0441\u043e\u0432\u0441\u0435\u043c.<\/p>\n<h4>\u0427\u0435\u0440\u0435\u0437 \u0434\u0435\u0431\u0430\u0433<\/h4>\n<p>\u041c\u043e\u0436\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0443\u0433\u043b\u0443\u0431\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u0441\u0442\u044b, \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442. \u041d\u043e \u0435\u0441\u043b\u0438 \u0442\u0435\u0441\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u0441 \u043a\u0443\u0447\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u2014 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u0447\u0430\u0441. \u0410 \u0442\u043e \u0438 \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<h4>\u0420\u0443\u0447\u043a\u0430\u043c\u0438<\/h4>\n<p>\u041c\u043e\u0436\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0439, \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b \u0432 TMS. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0440\u0430\u0441\u0438\u0432\u043e. \u041d\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u2014 \u0432\u0441\u0451 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f. \u0418 \u0435\u0441\u043b\u0438 \u0432\u044b \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 UI \u2014 \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u043c.<\/p>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f<\/h3>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u043e UI-\u0442\u0435\u0441\u0442\u0430\u043c\u0438. \u041d\u043e&#8230; \u0422\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u0442\u044c.<\/p>\n<h3>\u0410 \u0435\u0441\u043b\u0438 \u0431\u044b&#8230;<\/h3>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435: \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0441\u0430\u0439\u0442\u0435, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442:<\/p>\n<ul>\n<li>\n<p>\u043a\u0430\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u044b \u0442\u0435\u0441\u0442\u0430\u043c\u0438<\/p>\n<\/li>\n<li>\n<p>\u043a\u0430\u043a\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043d\u0438\u043c\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c<\/p>\n<\/li>\n<li>\n<p>\u0438 \u0434\u0430\u0436\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u043e\u0433\u0434\u0430 \u0432\u0441\u0451 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0448\u044c \u043d\u0443\u0436\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u2192 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u0448\u044c \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u2192 \u0432\u0438\u0434\u0438\u0448\u044c \u0432\u0441\u044e \u043a\u0430\u0440\u0442\u0443 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f: \u0447\u0442\u043e \u043a\u043b\u0438\u043a\u0430\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0438, \u0430 \u0447\u0442\u043e \u2014 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438.<\/p>\n<p>\u0417\u0432\u0443\u0447\u0438\u0442, \u043a\u0430\u043a \u0447\u0442\u043e-\u0442\u043e \u0438\u0437 \u043c\u0438\u0440\u0430 \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u0439. \u0411\u0435\u0437 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439? \u0411\u0435\u0437 \u043c\u0430\u0433\u0438\u0438? \u0411\u0435\u0437 \u0448\u0430\u043c\u0430\u043d\u0441\u0442\u0432\u0430? \u0421 \u043b\u044e\u0431\u044b\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c? \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u0434\u0432\u0430 \u043a\u043b\u0438\u043a\u0430? \u0410\u0433\u0430. \u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<h2>\u0412\u0441\u0442\u0440\u0435\u0447\u0430\u0439\u0442\u0435: ui-coverage-tool<\/h2>\n<p><a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\">\u0418\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442<\/a> \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 UI-\u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438:<\/p>\n<ul>\n<li>\n<p>\u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432 \u043d\u0438 \u043f\u043e \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438, \u043d\u0438 \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0443<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043b\u044e\u0431\u044b\u043c\u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c\u0438<\/p>\n<\/li>\n<li>\n<p>\u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442<\/p>\n<\/li>\n<li>\n<p>\u0438 \u0434\u0430\u0451\u0442 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0439 UI \u043f\u0440\u044f\u043c\u043e \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435<\/p>\n<\/li>\n<\/ul>\n<p>\u041b\u0438\u0447\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u044e \u044d\u0442\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u043f\u0440\u043e\u0440\u044b\u0432\u043e\u043c \u0432 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438 UI-\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438. \u0418 \u0441\u0435\u0439\u0447\u0430\u0441 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c, \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u0432\u0441\u0451 \u043d\u0443\u0436\u043d\u043e \u2014 \u0438 \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0436\u0435 \u0441\u0435\u0433\u043e\u0434\u043d\u044f.<\/p>\n<h2>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043e\u0442\u0447\u0435\u0442\u0430<\/h2>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441\u0440\u0430\u0437\u0443 \u0441 \u043c\u0435\u0441\u0442\u0430 \u0432 \u043a\u0430\u0440\u044c\u0435\u0440. \u041a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\">ui-coverage-tool<\/a>? \u041a\u0430\u043a \u0435\u043c\u0443 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0442\u0430\u043a \u0433\u0438\u0431\u043a\u043e \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u044f\u043c\u043e \u043f\u043e\u0432\u0435\u0440\u0445 \u0436\u0438\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f?<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1b5\/9ce\/815\/1b59ce81528a03909ef06a0fbf02482f.jpg\" width=\"2468\" height=\"1620\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/1b5\/9ce\/815\/1b59ce81528a03909ef06a0fbf02482f.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1b5\/9ce\/815\/1b59ce81528a03909ef06a0fbf02482f.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0430 \u0441\u0445\u0435\u043c\u0435 \u0432\u044b\u0448\u0435 \u0432\u0438\u0434\u043d\u043e, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043e\u0442\u0447\u0451\u0442\u043e\u043c \u0438 \u0444\u0440\u0435\u0439\u043c\u043e\u043c. \u0418, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0442\u0443\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u2014 \u0438 \u0432 \u044d\u0442\u043e\u043c \u0435\u0451 \u0441\u0438\u043b\u0430.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e \u0448\u0430\u0433\u0430\u043c:<\/p>\n<ol>\n<li>\n<p>\u041d\u0430 \u0441\u0430\u0439\u0442, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u044c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435, \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u0438\u043f\u0442 \u0441 \u0430\u0433\u0435\u043d\u0442\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u042d\u0442\u043e\u0442 \u0441\u0430\u0439\u0442 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 iframe \u043f\u0440\u044f\u043c\u043e \u0432 \u043e\u0442\u0447\u0451\u0442\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u0447\u0451\u0442 \u0438 \u0430\u0433\u0435\u043d\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Web_Messaging\" rel=\"noopener noreferrer nofollow\">Web Messaging<\/a> (aka <a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/API\/Window\/postMessage\" rel=\"noopener noreferrer nofollow\">postMessage<\/a>).<\/p>\n<\/li>\n<li>\n<p>\u0410\u0433\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u0447\u0451\u0442\u0443, \u0430 \u043e\u0442\u0447\u0451\u0442 \u2014 \u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0430\u0433\u0435\u043d\u0442\u0443.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u0432\u0443\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c: \u043d\u0435 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442, \u043d\u0435 \u0441\u043d\u0430\u043f\u0448\u043e\u0442, \u0430 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0436\u0438\u0432\u043e\u0439 \u0441\u0430\u0439\u0442 \u043f\u0440\u044f\u043c\u043e \u0443 \u0432\u0430\u0441 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.<\/p>\n<h3>\u041a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435?<\/h3>\n<p>\u041f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>\u041e\u0442\u0447\u0451\u0442 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0430\u0433\u0435\u043d\u0442\u0443: <em>\u00ab\u041f\u043e\u0434\u0441\u0432\u0435\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043f\u043e\u043a\u0440\u044b\u0442 \u0442\u0435\u0441\u0442\u0430\u043c\u0438\u00bb<\/em><\/p>\n<\/li>\n<li>\n<p>\u0410\u0433\u0435\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0434\u0438\u0442 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0435\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u0432\u0441\u0451 \u044d\u0442\u043e \u2014 \u0431\u0435\u0437 \u0448\u0430\u043c\u0430\u043d\u0441\u0442\u0432\u0430, \u0431\u0435\u0437 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439, \u0441 \u043b\u044e\u0431\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\u0439 \u0438 \u0437\u0430 \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u044b.<\/p>\n<h3>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u0438\u0448\u043a\u0430 \u2014 \u043d\u0435 \u0432 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0435<\/h3>\n<p>\u0421\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0437\u0434\u0435\u0441\u044c \u2014 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0441\u0430\u043c\u0430 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0430 \u0434\u0432\u0438\u0436\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430 \u044d\u0442\u0438\u043c. \u041e\u043d:<\/p>\n<ul>\n<li>\n<p>\u043b\u0435\u0433\u043a\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043b\u044e\u0431\u043e\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435<\/p>\n<\/li>\n<li>\n<p>\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c, \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u043c, \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0442\u0447\u0451\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0433\u0434\u0435 \u0443\u0433\u043e\u0434\u043d\u043e \u2014 \u043e\u0442 CI \u0434\u043e \u043b\u043e\u043a\u0430\u043b\u043a\u0438, \u043e\u0442 <a href=\"https:\/\/pages.github.com\/\" rel=\"noopener noreferrer nofollow\">GitHub Pages<\/a> \u0434\u043e <a href=\"https:\/\/allurereport.org\/\" rel=\"noopener noreferrer nofollow\">Allure<\/a>.<\/p>\n<h3>\u0415\u0441\u0442\u044c \u043b\u0438 \u0443 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043b\u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438?<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0447\u0435\u0441\u0442\u043d\u043e \u2014 \u043d\u0435\u0442. \u0415\u0441\u043b\u0438 \u0438 \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u0442\u043e \u043d\u0435 \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435, \u0430 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043a\u0440\u0438\u0432\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430). \u041d\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u2014 \u043f\u043e\u0434\u0445\u043e\u0434 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432, \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c \u0438 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0441\u0440\u0435\u0434\u044b.<\/p>\n<h3>\u0410 \u0447\u0442\u043e \u0441 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430\u043c\u0438?<\/h3>\n<h4>1. \u0421\u043d\u0430\u043f\u0448\u043e\u0442\u044b (Playwright Trace, Cypress UI Coverage \u0438 \u0434\u0440\u0443\u0433\u0438\u0435)<\/h4>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0442\u0435\u0441\u0442\u0430 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u0430\u043f\u0448\u043e\u0442 \u0438 \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0433\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435. \u0422\u0430\u043a \u0434\u0435\u043b\u0430\u044e\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/playwright.dev\/python\/docs\/trace-viewer\" rel=\"noopener noreferrer nofollow\">Playwright Trace Viewer<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/www.cypress.io\/ui-coverage\" rel=\"noopener noreferrer nofollow\">Cypress UI Coverage<\/a>.<\/p>\n<p>\u041d\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441. \u0421\u043d\u0430\u043f\u0448\u043e\u0442\u044b \u2014 \u0442\u044f\u0436\u0451\u043b\u044b\u0435. \u041e\u0447\u0435\u043d\u044c \u0442\u044f\u0436\u0451\u043b\u044b\u0435.<\/p>\n<blockquote>\n<p>\u041e\u0434\u0438\u043d \u043e\u0442\u0447\u0451\u0442 \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0441\u0438\u0442\u044c \u0434\u0435\u0441\u044f\u0442\u043a\u0438, \u0430 \u0442\u043e \u0438 \u0441\u043e\u0442\u043d\u0438 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442<br \/>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0445\u043e\u0434\u044f\u0442 \u0434\u043e \u0433\u0438\u0433\u043e\u0432, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439<\/p>\n<\/blockquote>\n<p>\u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f: <a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a> \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439, \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438, UI, \u043a\u0430\u0440\u0442\u0430\u043c\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0438 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043e\u043c \u0432\u0435\u0441\u0438\u0442\u2026 <strong>~1.1 \u041c\u0411<\/strong><\/p>\n<p>\u0412\u0434\u0443\u043c\u0430\u0439\u0442\u0435\u0441\u044c. \u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u043e\u0442\u0447\u0451\u0442 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0432\u0430\u0448\u0430 \u0430\u0432\u0430\u0442\u0430\u0440\u043a\u0430 \u0432 Slack.<\/p>\n<h4>2. \u0411\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b<\/h4>\n<p>\u041a\u0442\u043e-\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c: <em>\u00ab\u0410 \u0434\u0430\u0432\u0430\u0439 \u044f \u0441\u0434\u0435\u043b\u0430\u044e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Chrome, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0441\u0451 \u043f\u043e\u043a\u0430\u0436\u0435\u0442!\u00bb. <\/em>\u0417\u0432\u0443\u0447\u0438\u0442 \u043e\u043a\u2026 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430:<\/p>\n<ul>\n<li>\n<p>\u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043e\u0442\u0447\u0451\u0442 \u0432 Safari<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0447\u0451\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c (<a href=\"https:\/\/pages.github.com\/\" rel=\"noopener noreferrer nofollow\">GitHub Pages<\/a>?)<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0432\u0448\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 UI \u043d\u0430 <a href=\"https:\/\/react.dev\/\" rel=\"noopener noreferrer nofollow\">React<\/a>\/<a href=\"https:\/\/vuejs.org\/\" rel=\"noopener noreferrer nofollow\">Vue<\/a>\/<a href=\"https:\/\/angular.dev\/\" rel=\"noopener noreferrer nofollow\">Angular<\/a><\/p>\n<\/li>\n<li>\n<p>\u043d\u0435 \u0432\u0441\u0442\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u0430 \u0438\u0434\u0435\u044f \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u043e\u0442\u0447\u0451\u0442 \u043a <a href=\"https:\/\/allurereport.org\/\" rel=\"noopener noreferrer nofollow\">Allure<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u0441\u0451 \u044d\u0442\u043e \u2014 \u043f\u043b\u0430\u0433\u0438\u043d \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f. \u0410 <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a> \u2014 \u043b\u0435\u0433\u043a\u043e. \u041e\u043d \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e HTML + JS + \u0434\u0430\u043d\u043d\u044b\u0435. \u0412\u0441\u0451 \u0441\u0430\u043c\u043e\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435, \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c\u043e\u0435, \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c\u043e\u0435, \u043a\u0440\u043e\u0441\u0441-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u043e\u0435.<\/p>\n<h4>3. \u0418\u043d\u044a\u0435\u043a\u0446\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0432 iframe<\/h4>\n<p>\u0415\u0441\u0442\u044c \u0438 \u0442\u0440\u0435\u0442\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u0430\u0439\u0442 \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0435 \u0438 \u0447\u0435\u0440\u0435\u0437 <code>iframe.contentWindow.document<\/code> \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c. \u041d\u043e \u0442\u0443\u0442 \u0432\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u0443\u043f\u0440\u0451\u0442\u0435\u0441\u044c \u0432 security hell:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Guides\/CORS\" rel=\"noopener noreferrer nofollow\">cross-origin<\/a> \u043e\u0448\u0438\u0431\u043a\u0438<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Guides\/CSP\" rel=\"noopener noreferrer nofollow\">Content-Security-Policy<\/a><\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Document_Object_Model\" rel=\"noopener noreferrer nofollow\">DOM<\/a><\/p>\n<\/li>\n<li>\n<p>\u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c\u0441\u044f \u0432 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Single-page_application\" rel=\"noopener noreferrer nofollow\">SPA<\/a> \u0431\u0435\u0437 \u0440\u0435\u043b\u043e\u0430\u0434\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u042f \u044d\u0442\u043e\u0442 \u043f\u0443\u0442\u044c \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435. \u0418 \u0431\u044b\u0441\u0442\u0440\u043e \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u2014 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e, \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 <a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a><strong> <\/strong>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/API\/Window\/postMessage\" rel=\"noopener noreferrer nofollow\">postMessage<\/a>, \u0430 \u044d\u0442\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439<strong>, <\/strong>\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439<strong> <\/strong>\u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043e\u043a\u043d\u0430\u043c\u0438.<\/p>\n<h3>\u0418 \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u043c\u0430\u0433\u0438\u044f\u2026<\/h3>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0435 \u0441\u043e \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u043c, \u0430 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0430\u0439\u0442\u043e\u043c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c:<\/p>\n<ul>\n<li>\n<p>\u0417\u0430\u0433\u043d\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043b\u044e\u0431\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043c\u043e\u0434\u0430\u043b\u043a\u0443, \u0432\u0432\u0435\u0441\u0442\u0438 \u0442\u0435\u043a\u0441\u0442, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0430\u0431)<\/p>\n<\/li>\n<li>\n<p>\u0418 \u0443\u0436\u0435 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u2014 \u043d\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0418 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0436\u0438\u0432\u0443\u044e, \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u044f\u043c\u043e \u043f\u043e \u0445\u043e\u0434\u0443 \u0442\u0435\u0441\u0442\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u2014 \u044d\u0442\u043e \u043d\u043e\u0432\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430\u0445.<\/p>\n<h3>\u0412\u0441\u0451 \u0433\u0435\u043d\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e<\/h3>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0435\u0441\u044c \u0441\u0435\u043a\u0440\u0435\u0442: \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 + \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043f\u043e\u043b\u044c\u0437\u044b \u0438 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438. <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a> \u2014 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0447\u0451\u0442, \u044d\u0442\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0438\u0441\u0430\u043b\u0438 UI-\u0442\u0435\u0441\u0442\u044b \u2014 \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e.<\/p>\n<h2>\u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442?<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0431\u043e\u0440 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0432 <a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a>. \u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u0432\u0441\u0451 \u0434\u043e \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e. \u0411\u0435\u0437 \u0442\u0430\u043d\u0446\u0435\u0432, \u0431\u0435\u0437 \u043c\u0430\u0433\u0438\u0438, \u0431\u0435\u0437 \u0431\u043e\u043b\u0438.<\/p>\n<h3>\u0428\u0430\u0433 1. \u0412\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0430\u0433\u0435\u043d\u0442\u0430<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u0430\u0433\u0435\u043d\u0442 \u0441\u043c\u043e\u0433 \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u2014 \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432 \u0441\u0430\u0439\u0442 \u0438\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f? \u0414\u0430 \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<pre><code class=\"python\">&lt;script src=\"https:\/\/nikita-filonov.github.io\/ui-coverage-report\/agent.global.js\"&gt;&lt;\/script&gt;<\/code><\/pre>\n<p>\u042d\u0442\u043e \u0432\u0435\u0441\u044c \u0441\u0435\u043a\u0440\u0435\u0442. \u041e\u0434\u0438\u043d \u0441\u043a\u0440\u0438\u043f\u0442 \u2014 \u0438 \u0432\u0430\u0448 \u0441\u0430\u0439\u0442 \u0443\u0436\u0435 \u0443\u043c\u0435\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u043e\u0442\u0447\u0451\u0442\u043e\u043c. \u0412\u0441\u0451. \u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<h3>\u0428\u0430\u0433 2. \u0410\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u2014 \u0442\u0440\u0435\u043a\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h3>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b, \u0432 \u0434\u0435\u043b\u043e \u0432\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0442\u0440\u0435\u043a\u0435\u0440 \u2014 \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u044c <a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool?tab=readme-ov-file#playwright\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0435\u0441\u0442\u044b.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 (\u0431\u0443\u0434\u044c \u0442\u043e <code>click<\/code>, <code>fill<\/code>, <code>assert visible<\/code>, <code>assert text<\/code> \u0438 \u0434\u0440\u0443\u0433\u0438\u0435), \u0442\u0440\u0435\u043a\u0435\u0440:<\/p>\n<ul>\n<li>\n<p>\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u0442\u0438\u043f (<a href=\"https:\/\/www.w3schools.com\/xml\/xpath_intro.asp\" rel=\"noopener noreferrer nofollow\">XPath<\/a>, <a href=\"https:\/\/www.w3schools.com\/css\/\" rel=\"noopener noreferrer nofollow\">CSS<\/a>)<\/p>\n<\/li>\n<li>\n<p>\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0441\u0430\u043c\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 (<code>click<\/code>, <code>fill<\/code>, <code>select<\/code>, <code>check<\/code>, \u0438 \u0434\u0440\u0443\u0433\u0438\u0435)<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 JSON-\u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0443 <code>coverage-results<\/code>.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438 \u0438\u0437 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432, \u0430 \u043d\u0435 &#171;\u0433\u0434\u0435-\u0442\u043e \u0442\u0430\u043c \u043c\u044b \u0432\u0440\u043e\u0434\u0435 \u043a\u043b\u0438\u043a\u0430\u043b\u0438, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u0447\u043d\u043e&#187;.<\/p>\n<h3>\u0428\u0430\u0433 3. \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043e\u0442\u0447\u0451\u0442<\/h3>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432, \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>ui-coverage-tool save-report<\/code><\/pre>\n<p>\u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435:<\/p>\n<p>HTML-\u043e\u0442\u0447\u0451\u0442 \u2014 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439, \u0436\u0438\u0432\u043e\u0439, \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439, \u0443\u0434\u043e\u0431\u043d\u044b\u0439. \u041c\u043e\u0436\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0442\u044c \u043a Allure<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u043d\u0430 GitHub\/GitLab Pages<\/p>\n<\/li>\n<li>\n<p>\u0448\u0430\u0440\u0438\u0442\u044c \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c \u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430\u043c<\/p>\n<\/li>\n<li>\n<p>\u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0438 \u043f\u043e\u0440\u0430\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f<\/p>\n<\/li>\n<\/ul>\n<p>JSON-\u043e\u0442\u0447\u0451\u0442 \u2014 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442, \u043d\u043e \u0432 \u043c\u0430\u0448\u0438\u043d\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u043e\u043c \u0432\u0438\u0434\u0435. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u0441\u043a\u043e\u0440\u043c\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0435<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u0432\u0435\u0441\u0442\u0438 summary \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 CI \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0438 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u0447\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u2014 \u0432\u0435\u0441\u044c <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\">HTML-\u043e\u0442\u0447\u0451\u0442<\/a> \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d \u0432 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b. \u041e\u0434\u0438\u043d \u0444\u0430\u0439\u043b, \u043e\u0434\u0438\u043d \u043a\u043b\u0438\u043a, \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<h3>\u0412\u044b \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u2014 \u0438 \u0432\u0441\u0451?<\/h3>\n<p>\u0414\u0430, \u0438 \u0432\u0441\u0451. \u0410 \u0447\u0442\u043e \u0435\u0449\u0435 \u043d\u0443\u0436\u043d\u043e? \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u043c\u0430\u0433\u0438\u0438, \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0431\u043e\u043b\u0438, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0442\u0430\u043d\u0446\u0435\u0432 \u0441 <code>inject_js<\/code>, <code>wait_for_selector<\/code> \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0412\u0441\u044f \u0444\u0438\u0448\u043a\u0430 <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a> \u2014 \u0432 \u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0435 \u0438 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h3>\u0410 \u0447\u0442\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c?<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\">\u041e\u0431\u0432\u044f\u0437\u043a\u0430 \u043d\u0430 Python<\/a>\/<a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool-js\" rel=\"noopener noreferrer nofollow\">\u041e\u0431\u0432\u044f\u0437\u043a\u0430 \u043d\u0430 TypeScript\/JavaScript<\/a><\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u0442 JSON-\u0447\u0438\u043a\u0438 \u043f\u043e \u0445\u043e\u0434\u0443 \u0442\u0435\u0441\u0442\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 (\u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435, \u043d\u043e \u0438 \u0432\u0441\u0451, \u0447\u0442\u043e \u0431\u044b\u043b\u043e)<\/p>\n<\/li>\n<li>\n<p>\u0410\u0433\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435<\/p>\n<\/li>\n<li>\n<p>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0442\u0447\u0451\u0442\u044b<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u0432\u0441\u0451 \u044d\u0442\u043e \u2014 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e, \u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e. \u0411\u0435\u0437 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439.<\/p>\n<h3>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0435\u0437\u0434\u0435<\/h3>\n<p>\u0425\u043e\u0442\u044c \u043d\u0430 <a href=\"https:\/\/playwright.dev\/python\/\" rel=\"noopener noreferrer nofollow\">Playwright<\/a>, \u0445\u043e\u0442\u044c \u043d\u0430 <a href=\"https:\/\/www.selenium.dev\/\" rel=\"noopener noreferrer nofollow\">Selenium<\/a>, \u0445\u043e\u0442\u044c \u043d\u0430 \u0447\u0451\u043c-\u0442\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u043c \u2014 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>\u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a> \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430. \u041e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 DOM \u0438 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0435\u043c\u0443 \u0434\u043e \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0438. \u0412\u043e\u0442 \u0438 \u0432\u0435\u0441\u044c \u0441\u0435\u043a\u0440\u0435\u0442. \u0412\u0441\u0451 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0435\u0437\u0443\u043c\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e.<\/p>\n<h2>\u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f<\/h2>\n<p><a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a> \u0441\u043e\u0437\u0434\u0430\u043d \u0441 \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u043d\u043e \u043c\u043e\u0449\u043d\u043e\u0439 \u0438\u0434\u0435\u0435\u0439 \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u0432\u0430\u0448\u0438 UI \u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u043b\u043e\u0432\u0430\u0445. \u041e\u043d \u0440\u0435\u0448\u0430\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0434\u0430\u0447:<\/p>\n<h3>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0431\u043e\u0440\u0430 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f<\/h3>\n<p>\u041e\u0434\u0438\u043d \u0440\u0430\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u2014 \u0438 \u0437\u0430\u0431\u044b\u043b\u0438. \u041f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432. \u0420\u0443\u0447\u043d\u043e\u0439 \u0442\u0440\u0443\u0434? \u041d\u0435\u0442, \u0441\u043f\u0430\u0441\u0438\u0431\u043e.<\/p>\n<h3>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u0436\u0438\u0432\u043e\u043c \u0441\u0430\u0439\u0442\u0435<\/h3>\n<p>\u042d\u0442\u043e \u043d\u0435 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u0438 \u043d\u0435 pdf\/html-\u0441\u043d\u0430\u043f\u0448\u043e\u0442\u044b. <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\">\u041e\u0442\u0447\u0435\u0442<\/a> \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0436\u0438\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435, \u043f\u0440\u044f\u043c\u043e \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u0425\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u043e \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435, \u043c\u043e\u0434\u0430\u043b\u043a\u0435 \u0438\u043b\u0438 \u0440\u0435\u0434\u043a\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430? \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u0441\u044c \u0432 \u043d\u0443\u0436\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0430\u0439\u0442\u0430 \u0438 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432, \u0443\u0441\u043b\u043e\u0432\u0438\u0439, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439.<\/p>\n<h3>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0432\u0441\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/h3>\n<p>\u041e\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 \u0434\u043e \u043f\u0440\u043e\u0434\u0436\u0435\u043a\u0442\u043e\u0432 \u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u0432 \u2014 \u0432\u0441\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043e\u0442\u0447\u0435\u0442 \u0438 \u0437\u0430 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043d\u0435 \u043f\u043e\u043a\u0440\u044b\u0442\u044b. \u0418 \u043f\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0442\u0430\u043a\u0438\u0445 \u0437\u043e\u043d \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f. \u0423\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u2014 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e: \u0432\u044b \u0432\u0434\u0440\u0443\u0433 \u0437\u0430\u043c\u0435\u0447\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442.<\/p>\n<h3>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c<\/h3>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043d\u0435 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442 \u0442\u0435\u0441\u0442\u044b \u0438 \u043d\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u044b \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u0432. \u041e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 JSON-\u0444\u0430\u0439\u043b\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430:<\/p>\n<pre><code class=\"json\">{   \"app\": \"ui-course\",   \"selector\": \"\/\/*[@data-testid='navigation-navbar-welcome-title-text']\",   \"action_type\": \"VISIBLE\",   \"selector_type\": \"XPATH\" }<\/code><\/pre>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432 \u0442\u0435\u0441\u0442\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u043b. \u0418 \u0432\u0441\u0451 \u2014 \u044d\u0442\u043e\u0433\u043e \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0447\u0435\u0442.<\/p>\n<h3>\u0427\u0442\u043e \u043d\u0430\u043c \u044d\u0442\u043e \u0434\u0430\u0451\u0442?<\/h3>\n<ul>\n<li>\n<p><strong>\u041e\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c.<\/strong> \u041f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c, \u0430 \u043d\u0435 &#171;\u0432\u0440\u043e\u0434\u0435 \u043c\u044b \u0442\u0430\u043c \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0438&#187;. \u041e\u043d\u043e \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u0438 \u044d\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u043f\u044b\u0445 \u0437\u043e\u043d.<\/strong> \u041e\u0442\u043a\u0440\u044b\u043b\u0438 \u043c\u043e\u0434\u0430\u043b\u043a\u0443 \u2014 \u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043f\u043e\u043b\u0435\u0439 \u0432 \u043d\u0435\u0439 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043f\u043e\u043a\u0440\u044b\u0442\u0430 \u0442\u0435\u0441\u0442\u0430\u043c\u0438. \u041d\u0438\u043a\u0442\u043e \u0431\u044b \u0438 \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b \u0431\u0435\u0437 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442 \u2014 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0430\u0433 \u0443\u0436\u0435 \u043f\u043e\u0434\u0436\u0438\u0434\u0430\u0435\u0442 \u0432 \u0442\u0435\u043d\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u042d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. <\/strong>\u041f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438 \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435? \u0422\u0430\u0431\u043b\u0438\u0446\u044b, \u0441\u0445\u0435\u043c\u044b, mind map&#8217;\u044b, wiki-\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0438? \u0412\u0441\u0451 \u044d\u0442\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0430\u0435\u0442, \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438 \u0441\u0442\u043e\u0438\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043a\u0443\u0447\u0443 \u0434\u0435\u043d\u0435\u0433 (\u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e). <a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a> \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438<strong>, <\/strong>\u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b?<\/h3>\n<p>\u0410 \u043a\u0430\u043a\u0438\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u0435\u0441\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b?<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/www.cypress.io\/ui-coverage\" rel=\"noopener noreferrer nofollow\">Cypress UI Coverage<\/a> \u2014 \u0434\u0430, \u043a\u0440\u0443\u0442\u043e\u0439, \u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 <a href=\"https:\/\/www.cypress.io\/\" rel=\"noopener noreferrer nofollow\">Cypress<\/a> \u0438 <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\" rel=\"noopener noreferrer nofollow\">JS<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.cypress.io\/pricing\" rel=\"noopener noreferrer nofollow\">\u043f\u043b\u0430\u0442\u043d\u044b\u0439<\/a><\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043d\u0430 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430\u0445, \u0430 \u043d\u0435 live view<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u0410 \u0435\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u044c <a href=\"https:\/\/playwright.dev\/python\/\" rel=\"noopener noreferrer nofollow\">Playwright<\/a> + <a href=\"https:\/\/playwright.dev\/python\/docs\/trace-viewer\" rel=\"noopener noreferrer nofollow\">Trace Viewer (\u0442\u0440\u0435\u0439\u0441\u0438\u043d\u0433)<\/a> + <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a> \u2014 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0435\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b <a href=\"https:\/\/www.cypress.io\/ui-coverage\" rel=\"noopener noreferrer nofollow\">Cypress UI Coverage<\/a>, \u043d\u043e <strong>\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e<\/strong>, \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043b\u044e\u0431\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432, \u0438 <strong>\u0431\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439.<\/strong><\/p>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0430\u0433\u0435\u043d\u0442\u0430<\/h2>\n<p>\u0427\u0442\u043e\u0431\u044b \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0441\u0430\u0439\u0442\u0435, \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-report\/agent.global.js\" rel=\"noopener noreferrer nofollow\">\u0441\u043a\u0440\u0438\u043f\u0442 \u0430\u0433\u0435\u043d\u0442\u0430<\/a> \u0432 HTML \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u043e \u2014 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 HTML \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<pre><code class=\"python\">&lt;script src=\"https:\/\/nikita-filonov.github.io\/ui-coverage-report\/agent.global.js\"&gt;&lt;\/script&gt;<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e:<\/p>\n<ul>\n<li>\n<p>\u0430\u0433\u0435\u043d\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u0430\u0439\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\"><strong>\u043e\u0442\u0447\u0435\u0442\u0430 ui-coverage-tool<\/strong><\/a><\/p>\n<\/li>\n<li>\n<p>\u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u044b \u0442\u0435\u0441\u0442\u0430\u043c\u0438, \u0430 \u043a\u0430\u043a\u0438\u0435 \u043d\u0435\u0442 \u2014 \u043f\u0440\u044f\u043c\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/p>\n<\/li>\n<\/ul>\n<h3>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u043b\u0438 \u044d\u0442\u043e?<\/h3>\n<p>\u0414\u0430, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e. \u0418 \u0432\u043e\u0442 \u043f\u043e\u0447\u0435\u043c\u0443:<\/p>\n<ul>\n<li>\n<p><strong>\u042d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430.<\/strong> \u0415\u0441\u043b\u0438 \u0432\u044b \u043a\u043e\u0433\u0434\u0430-\u043b\u0438\u0431\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442 Google Analytics, UI-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438\u043b\u0438, \u0441\u043a\u0430\u0436\u0435\u043c, \u0440\u0435\u043a\u043b\u0430\u043c\u0443 \u0447\u0435\u0440\u0435\u0437 Google Ads \u2014 \u0432\u044b \u0443\u0436\u0435 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b. \u0410\u0433\u0435\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435: \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e Open Source.<\/strong> \u0412\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435: <a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-report\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-report<\/strong><\/a>. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0430\u0433\u0435\u043d\u0442, \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0442\u0430\u043c \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0410 \u0447\u0442\u043e \u043d\u0430\u0441\u0447\u0451\u0442 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d\u0430?<\/h3>\n<p>\u0425\u043e\u0442\u044f \u0430\u0433\u0435\u043d\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d, \u043d\u0430 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d \u044f \u0431\u044b \u0432\u0441\u0451 \u0436\u0435 \u043d\u0435 \u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u043b \u0435\u0433\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c:<\/p>\n<ul>\n<li>\n<p>\u044d\u0442\u043e \u043b\u0438\u0448\u043d\u0438\u0439 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u043f\u0443\u0441\u0442\u044c \u0438 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439<\/p>\n<\/li>\n<li>\n<p>\u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (\u0445\u043e\u0442\u044f \u0438 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f)<\/p>\n<\/li>\n<li>\n<p>\u0434\u0430 \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u0442\u0430\u043c, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0431\u043e\u0435\u0432\u043e\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u0442\u0447\u0451\u0442\u044b?<\/p>\n<\/li>\n<\/ul>\n<p>\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430: <code>dev<\/code>, <code>staging<\/code>, <code>test<\/code> \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043d\u0435\u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0443\u0440\u0430\u0445.<\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430<\/h2>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u00a0<a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\">ui-coverage-tool<\/a>, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443:<\/p>\n<pre><code class=\"bash\">pip install ui-coverage-tool<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043a\u0430\u043a \u0432 \u043a\u043e\u0434\u0435, \u0442\u0430\u043a \u0438 \u0447\u0435\u0440\u0435\u0437\u00a0<a href=\"https:\/\/ru.wikipedia.org\/wiki\/CLI\" rel=\"noopener noreferrer nofollow\"><strong>CLI-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (Command Line Interface)<\/strong>.<\/a><\/p>\n<h4>\u0418\u043c\u043f\u043e\u0440\u0442 \u0432 \u043a\u043e\u0434\u0435<\/h4>\n<pre><code class=\"python\">from ui_coverage_tool import UICoverageTracker, SelectorType, ActionType<\/code><\/pre>\n<h4>CLI-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/h4>\n<p>\u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430:<\/p>\n<pre><code>ui-coverage-tool --help<\/code><\/pre>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c CLI \u2014 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool?tab=readme-ov-file#command-save-report\" rel=\"noopener noreferrer nofollow\"><strong>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043e\u0442\u0447\u0451\u0442\u0430.<\/strong><\/a><strong>\u00a0<\/strong><code>ui-coverage-tool save-report<\/code>\u00a0\u2014 \u044d\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0441\u0435 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u00a0<a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\">HTML<\/a>\u00a0\u0438 JSON-\u043e\u0442\u0447\u0451\u0442\u044b.\u00a0<a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\">HTML-\u043e\u0442\u0447\u0451\u0442<\/a>\u00a0\u2014 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0441\u0430\u043c\u043e\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0438 \u0441\u0440\u0430\u0437\u0443 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool?tab=readme-ov-file#command-print-config\" rel=\"noopener noreferrer nofollow\"><strong>\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.<\/strong><\/a>\u00a0<code>ui-coverage-tool print-config<\/code>\u00a0\u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c. \u041f\u043e\u043b\u0435\u0437\u043d\u043e, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u043b\u0438\u0441\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0438 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043d\u0430\u0434\u043e.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0412\u0430\u0436\u043d\u043e: \u0437\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043c\u0430\u043d\u0434<\/h4>\n<p>\u0412\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a> \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0440\u043e\u0433\u043e \u0438\u0437 \u043a\u043e\u0440\u043d\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041d\u0435 \u0438\u0437 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u0442\u0435\u0441\u0442\u0430\u043c\u0438, \u043d\u0435 \u0438\u0437 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0438, \u043d\u0435 &#171;\u0432\u044b\u0448\u0435&#187; \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u0433\u0434\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0441\u0430\u043c\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u0431\u0443\u0434\u0435\u0442 \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u2014 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u043c: \u0447\u0430\u0441\u0442\u044c \u043f\u0443\u0442\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c\u0441\u044f, \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u2014 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c\u0441\u044f, \u0430 \u043e\u0442\u0447\u0451\u0442 \u2014 \u043d\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438<\/h2>\n<p>\u0414\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b\u00a0<a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\">ui-coverage-tool<\/a>\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\n<p><code>.env<\/code>\u00a0\u0444\u0430\u0439\u043b \u2014 \u0434\u043b\u044f \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f.\u00a0<a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\/blob\/main\/docs\/configs\/.env.example\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0438\u043c\u0435\u0440 .env<\/a><\/p>\n<\/li>\n<li>\n<p><code>ui_coverage_config.yaml<\/code>\u00a0\u2014 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0432 YAML-\u0444\u0430\u0439\u043b\u0435.\u00a0<a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\/blob\/main\/docs\/configs\/ui_coverage_config.yaml\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0438\u043c\u0435\u0440 YAML<\/a><\/p>\n<\/li>\n<li>\n<p><code>ui_coverage_config.json<\/code>\u00a0\u2014 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0432 JSON-\u0444\u0430\u0439\u043b\u0435.\u00a0<a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\/blob\/main\/docs\/configs\/ui_coverage_config.json\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0438\u043c\u0435\u0440 JSON<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u0432\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442. \u041d\u0438\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 YAML.<\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440\u00a0<\/strong><code><strong>ui_coverage_config.yaml<\/strong><\/code><\/p>\n<pre><code class=\"yaml\">services:   - key: \"my-ui-app\"  # (\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e) \u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f     url: \"https:\/\/my-ui-app.com\/login\"  # (\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e) URL-\u0430\u0434\u0440\u0435\u0441 \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043b\u043e\u0433\u0438\u043d\u0430     name: \"My UI App\"  # (\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e) \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0442\u0447\u0451\u0442\u0435     tags: [ \"UI\", \"PRODUCTION\" ]  # (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) \u041c\u0435\u0442\u043a\u0438 \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438\/\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0438     repository: \"https:\/\/github.com\/my-ui-app\"  # (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u043a\u043e\u0434\u043e\u043c  results_dir: \".\/coverage-results\"  # (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) \u041f\u0430\u043f\u043a\u0430, \u043a\u0443\u0434\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f  history_file: \".\/coverage-history.json\"  # (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) \u041f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u0441 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f history_retention_limit: 30  # (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c  html_report_file: \".\/index.html\"  # (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) \u041f\u0443\u0442\u044c \u043a \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u043c\u0443 HTML-\u043e\u0442\u0447\u0451\u0442\u0443 json_report_file: \".\/coverage-report.json\"  # (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) \u041f\u0443\u0442\u044c \u043a \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u043c\u0443 JSON-\u043e\u0442\u0447\u0451\u0442\u0443<\/code><\/pre>\n<p>\u0427\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c:<\/p>\n<ul>\n<li>\n<p><code><strong>apps<\/strong><\/code><strong>\u00a0\u2014\u00a0<\/strong>\u044d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0438\u0437 \u043e\u0442\u0447\u0435\u0442\u043e\u0432, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435\u00a0<code>null<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:\u00a0<code>html_report_file: null<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>json_report_file: null<\/code><\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u0440\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u043b\u0438 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u043e\u0442\u043a\u0443\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f CLI\/\u0442\u0435\u0441\u0442\u044b.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0437\u0430\u0434\u0430\u043d\u044b \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0433\u043e\u0442\u043e\u0432\u0430 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e, \u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435.<\/p>\n<h4>\u0412\u0430\u0436\u043d\u043e: \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432<\/h4>\n<p>\u0412\u0441\u0435 <a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\/tree\/main\/docs\/configs\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b ui-coverage-tool<\/a> \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u0440\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041d\u0435 \u0432 \u043f\u0430\u043f\u043a\u0435 <code>.config<\/code>, \u043d\u0435 \u0432 <code>tests\/ui\/config<\/code>, \u043d\u0435 \u0433\u0434\u0435-\u0442\u043e &#171;\u0440\u044f\u0434\u043e\u043c&#187;, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438. \u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u043d\u0435 \u043a\u043e\u0440\u043d\u044f \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u043d\u0430\u0439\u0442\u0438 \u0438\u0445, \u0438\u043b\u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u043d\u0435\u043f\u043e\u043b\u043d\u043e\u0439 \u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435.<\/p>\n<p><strong>\u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e:<\/strong> \u0432\u0441\u0451, \u0447\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a> \u2014 \u0436\u0438\u0432\u0451\u0442 \u0432 \u043a\u043e\u0440\u043d\u0435.<\/p>\n<h2>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p>\u041d\u0430\u0447\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a> \u2014 \u043f\u0440\u043e\u0449\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e. \u0412\u0441\u0451 \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u0438 \u0433\u0438\u0431\u043a\u043e. \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f <a href=\"https:\/\/playwright.dev\/python\/\" rel=\"noopener noreferrer nofollow\">Playwright<\/a>, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 <a href=\"https:\/\/www.selenium.dev\/\" rel=\"noopener noreferrer nofollow\">Selenium<\/a> \u2014 \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0430\u043a \u0436\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441.<\/p>\n<p>\u0412\u043e\u0442 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 \u0441 \u0442\u0440\u0435\u043a\u0435\u0440\u043e\u043c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f:<\/p>\n<pre><code class=\"python\">from playwright.sync_api import sync_playwright  # \u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430: # - UICoverageTracker \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0442\u0440\u0435\u043a\u0438\u043d\u0433\u0430 # - SelectorType \u2014 \u0442\u0438\u043f \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430 (CSS, XPATH \u0438 \u0434\u0440\u0443\u0433\u0438\u0435) # - ActionType \u2014 \u0442\u0438\u043f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f (CLICK, FILL, CHECK_VISIBLE \u0438 \u0434\u0440\u0443\u0433\u0438\u0435) from ui_coverage_tool import UICoverageTracker, SelectorType, ActionType  # \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0442\u0440\u0435\u043a\u0435\u0440\u0430.  # \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 `app` \u2014 \u044d\u0442\u043e \u043a\u043b\u044e\u0447 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u043a\u043b\u044e\u0447\u043e\u043c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 UI_COVERAGE_APPS) tracker = UICoverageTracker(app=\"my-ui-app\")  with sync_playwright() as playwright:     browser = playwright.chromium.launch()     page = browser.new_page()     page.goto(\"https:\/\/my-ui-app.com\/login\")      # \u0412\u0432\u043e\u0434\u0438\u043c \u043b\u043e\u0433\u0438\u043d     username_input = page.locator(\"#username-input\")     username_input.fill('user@example.com')      # \u0424\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432 \u0442\u0440\u0435\u043a\u0435\u0440\u0435     tracker.track_coverage(         selector='#username-input',  # CSS-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440         action_type=ActionType.FILL,  # \u0422\u0438\u043f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f: \u0432\u0432\u043e\u0434 \u0442\u0435\u043a\u0441\u0442\u0430 (FILL)         selector_type=SelectorType.CSS  # \u0422\u0438\u043f \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430: CSS     )      # \u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u0432\u0445\u043e\u0434\u0430     login_button = page.locator('\/\/button[@id=\"login-button\"]')     login_button.click()      # \u0418 \u0441\u043d\u043e\u0432\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435     tracker.track_coverage(         selector='\/\/button[@id=\"login-button\"]',  # XPath-\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440         action_type=ActionType.CLICK,  # \u0422\u0438\u043f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f: \u043a\u043b\u0438\u043a         selector_type=SelectorType.XPATH  # \u0422\u0438\u043f \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430: XPath     ) <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 <code>tracker.track_coverage(...)<\/code>:<\/p>\n<ul>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 JSON-\u0444\u0430\u0439\u043b \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e\u0431 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438<\/p>\n<\/li>\n<li>\n<p>\u0444\u0430\u0439\u043b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0443 <code>.\/coverage-results<\/code><\/p>\n<\/li>\n<li>\n<p>\u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u2014 \u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430, \u0438 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0433\u043e \u043e\u0442\u0447\u0451\u0442\u0430<\/p>\n<\/li>\n<\/ul>\n<h4>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0438 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c\u0438 \u0438\u043b\u0438 \u0434\u043e\u043c\u0435\u043d\u0430\u043c\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>admin<\/code> \u0438 <code>student<\/code>), \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0435\u043a\u0435\u0440\u043e\u0432:<\/p>\n<pre><code class=\"python\">admin_app_tracker = UICoverageTracker(app=\"admin-app\") student_app_tracker = UICoverageTracker(app=\"student-app\")<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043d\u0443\u0436\u043d\u044b\u0439 \u0442\u0440\u0435\u043a\u0435\u0440 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u2014 \u0438 \u0432\u0441\u0451 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043e \u043f\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c.<\/p>\n<h4>\u0427\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435?<\/h4>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b \u2014 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043e\u0442\u0447\u0451\u0442\u0430. \u041e\u043d \u0441\u043e\u0431\u0435\u0440\u0451\u0442 \u0432\u0441\u0435 JSON-\u0444\u0430\u0439\u043b\u044b \u0438\u0437 <code>coverage-results<\/code>, \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u0438\u0445, \u0438 \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435:<\/p>\n<ul>\n<li>\n<p>\u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043e\u0442\u0447\u0451\u0442<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0435 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b<\/p>\n<\/li>\n<li>\n<p>\u0441\u043f\u0438\u0441\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043f\u043e\u043a\u0440\u044b\u0442\u044b \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0432\u043e\u043e\u0431\u0449\u0435<\/p>\n<\/li>\n<\/ul>\n<h2>Real Work Example: \u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 PageFactory<\/h2>\n<p>\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u0432\u0430\u043b\u0438 <code>tracker.track_coverage(...)<\/code> \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u2014 \u0438 \u0434\u0430, \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u043e \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 UI \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u043d\u0435 \u043d\u0430 \u0433\u043e\u043b\u043e\u043c Playwright \u0438\u043b\u0438 Selenium, \u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c PageObject, \u0430 \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0437\u0440\u0435\u043b\u044b\u0439 \u2014 \u0442\u043e \u0438 \u0441 PageComponent \u0438 PageFactory.<\/p>\n<p>\u0418 \u0442\u0443\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435: \u043a\u0430\u043a \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0440\u0435\u043a\u0438\u043d\u0433 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u043e, \u0431\u0435\u0437 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043b\u0435\u0437\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0435\u0441\u0442 \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u044b \u0442\u0440\u0435\u043a\u0435\u0440\u0430?<\/p>\n<p>\u041e\u0442\u0432\u0435\u0442: \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u0440\u044f\u043c\u043e \u0432 PageFactory \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u2014 \u0438 \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0430\u043c\u043e.<\/p>\n<h4>\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442: BaseElement<\/h4>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <code>BaseElement<\/code>, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 (<code>Input<\/code>, <code>Button<\/code>, <code>Icon<\/code>, \u0438 \u0434\u0440\u0443\u0433\u0438\u0435) \u2014 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0443\u0434\u0430 \u0441\u0431\u043e\u0440 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f.<\/p>\n<pre><code class=\"python\">import allure from playwright.sync_api import Page, Locator, expect from ui_coverage_tool import ActionType, SelectorType  from coverage import tracker  # \u043d\u0430\u0448 \u0442\u0440\u0435\u043a\u0435\u0440 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f from tools.logger import get_logger  logger = get_logger(\"BASE_ELEMENT\")   class BaseElement:     def __init__(self, page: Page, locator: str, name: str):         self.page = page         self.name = name         self.locator = locator      @property     def type_of(self) -&gt; str:         return \"base element\"      def get_locator(self, nth: int = 0, **kwargs) -&gt; Locator:         # \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c playwright-\u043b\u043e\u043a\u0430\u0442\u043e\u0440 \u043f\u043e data-testid         locator = self.locator.format(**kwargs)         step = f'Getting locator with \"data-testid={locator}\" at index \"{nth}\"'          with allure.step(step):             logger.info(step)             return self.page.get_by_test_id(locator).nth(nth)      def get_raw_locator(self, **kwargs) -&gt; str:         # \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c XPath \u043b\u043e\u043a\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0442\u0440\u0435\u043a\u0438\u043d\u0433\u0430         return f\"\/\/*[@data-testid='{self.locator.format(**kwargs)}']\"      def track_coverage(self, action_type: ActionType, **kwargs):         # \u0421\u0430\u043c \u043c\u0435\u0442\u043e\u0434 \u0442\u0440\u0435\u043a\u0438\u043d\u0433\u0430         # \u041e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0432 \u043c\u0435\u0442\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f         tracker.track_coverage(             selector=self.get_raw_locator(**kwargs),  # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043b\u043e\u043a\u0430\u0442\u043e\u0440             action_type=action_type,  # \u0422\u0438\u043f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f: CLICK, FILL \u0438 \u0434\u0440\u0443\u0433\u0438\u0435             selector_type=SelectorType.XPATH  # \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e XPath         )      def click(self, nth: int = 0, **kwargs):         # \u041c\u0435\u0442\u043e\u0434 \u043a\u043b\u0438\u043a\u0430, \u0441 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u0442\u0440\u0435\u043a\u0438\u043d\u0433\u043e\u043c         step = f'Clicking {self.type_of} \"{self.name}\"'          with allure.step(step):             locator = self.get_locator(nth, **kwargs)             logger.info(step)             locator.click()          # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435         self.track_coverage(ActionType.CLICK, **kwargs)<\/code><\/pre>\n<h4>\u0414\u0430\u043b\u0435\u0435 \u2014 \u0434\u0435\u043b\u043e \u0442\u0435\u0445\u043d\u0438\u043a\u0438<\/h4>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044f <code>type_of<\/code> \u0438, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u0443\u044f \u043b\u043e\u043a\u0430\u0442\u043e\u0440\u044b:<\/p>\n<pre><code class=\"python\">class Input(BaseElement):     @property     def type_of(self) -&gt; str:         return \"input\"      def get_locator(self, nth: int = 0, **kwargs) -&gt; Locator:         # \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 &lt;input&gt; \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430         return super().get_locator(nth, **kwargs).locator('input')      def get_raw_locator(self, **kwargs) -&gt; str:         # \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e: \u0434\u043b\u044f XPath \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 input         return f'{super().get_raw_locator(**kwargs)}\/\/input' <\/code><\/pre>\n<p><strong>\u0412\u0430\u0436\u043d\u043e!<\/strong> \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <code>track_coverage<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>get_raw_locator()<\/code> \u2014 \u043c\u044b \u043b\u0435\u0433\u043a\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0435\u043c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0432 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435.<\/p>\n<h4>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c PageFactory \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u0445<\/h4>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0430\u0448\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0437\u043d\u0430\u044e\u0442 \u043e \u0441\u0431\u043e\u0440\u0435 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f. \u0412\u0441\u0451 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0441\u0447\u0451\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<pre><code class=\"python\">class LoginFormComponent(BaseComponent):     def __init__(self, page: Page):         super().__init__(page)          self.username_input = Input(page, \"username-input\", \"Username\")      def fill(self, username: str):         # \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c fill \u2014 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u0441\u043e\u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 Input         self.username_input.fill(username) <\/code><\/pre>\n<h4>\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e?<\/h4>\n<ul>\n<li>\n<p>\u0412\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0435 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445 \u2014 \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 PageFactory<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u0451 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e<\/p>\n<\/li>\n<li>\n<p>\u041e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0438 \u0441\u043e\u0442\u043d\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0418 \u044d\u0442\u043e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e 15 \u043c\u0438\u043d\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0432\u043e \u0432\u0441\u0435\u0445 \u0442\u0435\u0441\u0442\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/p>\n<\/li>\n<\/ul>\n<h4>\u041d\u0443\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435?<\/h4>\n<p>\u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438, \u0433\u0434\u0435 \u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043f\u0440\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a PageFactory \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432. \u041f\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435, \u0443\u0432\u0435\u0440\u0435\u043d \u2014 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/708932\/\" rel=\"noopener noreferrer nofollow\">\u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c UI \u0430\u0432\u0442\u043e \u0442\u0435\u0441\u0442\u044b \u043d\u0430 Python<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/896936\/\" rel=\"noopener noreferrer nofollow\">UI \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b \u043d\u0430 Python \u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043d\u0430 CI\/CD \u0438 Allure \u043e\u0442\u0447\u0435\u0442\u043e\u043c. PageObject, PageComponent, PageFactory<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/712084\/\" rel=\"noopener noreferrer nofollow\">\u041f\u0438\u0448\u0435\u043c UI \u0430\u0432\u0442\u043e \u0442\u0435\u0441\u0442\u044b \u043d\u0430 TypeScript \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Page Object, Page Factory<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u2014 \u0432\u044b \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a. \u0425\u043e\u0442\u0438\u0442\u0435 \u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0439\u0442\u0435 <code>track_coverage<\/code> \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0433\u0434\u0435 \u043d\u0443\u0436\u043d\u043e, \u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0445\u0443\u043a\u0438, \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0439\u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0432\u0430\u043c.<\/p>\n<p>\u041d\u043e \u043f\u043e\u0434\u0445\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 PageFactory \u2014 \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 &#171;\u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e&#187;. \u041f\u0440\u043e\u0441\u0442\u043e \u0438 \u0433\u0435\u043d\u0438\u0430\u043b\u044c\u043d\u043e.<\/p>\n<h2>\u041e\u0442\u0447\u0435\u0442<\/h2>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0442\u0435\u0441\u0442\u043e\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0431\u0435\u0440\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u0445 \u0432 \u043f\u0430\u043f\u043a\u0443\u00a0<code>coverage-results<\/code>. \u042d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0442\u0447\u0435\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u0447\u0435\u0442, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code>ui-coverage-tool save-report<\/code><\/pre>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430\u00a0<code>save-report<\/code>\u00a0\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432:<\/p>\n<ol>\n<li>\n<p><code><strong>index.html<\/strong><\/code>\u00a0\u2014 HTML \u043e\u0442\u0447\u0435\u0442 \u0432 \u0432\u0438\u0434\u0435 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430. \u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u00a0<a href=\"https:\/\/pages.github.com\/\" rel=\"noopener noreferrer nofollow\">GitHub Pages<\/a>,\u00a0<a href=\"https:\/\/docs.gitlab.com\/user\/project\/pages\/\" rel=\"noopener noreferrer nofollow\">GitLab Pages<\/a>\u00a0\u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c\u0438.\u00a0<a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0438\u043c\u0435\u0440 HTML \u043e\u0442\u0447\u0435\u0442\u0430.<\/a><\/p>\n<\/li>\n<li>\n<p><code><strong>coverage-report.json<\/strong><\/code>\u00a0\u2014 JSON \u043e\u0442\u0447\u0435\u0442, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438. \u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u043a\u0440\u0430\u0442\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0438\u043b\u0438 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<\/li>\n<li>\n<p><code><strong>coverage-history.json<\/strong><\/code>\u00a0\u2014 \u0424\u0430\u0439\u043b \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0441 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0442\u043e \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043e\u0442\u0447\u0435\u0442\u0430 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d. \u041e\u043d \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u2014 \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043d\u0435\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0444\u0430\u0439\u043b \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0443\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u0432\u00a0<a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool?tab=readme-ov-file#configuration-reference\" rel=\"noopener noreferrer nofollow\">\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435<\/a>\u00a0<code>history_file<\/code>.<\/p>\n<\/li>\n<\/ol>\n<h2>HTML-\u043e\u0442\u0447\u0451\u0442: \u041d\u0430\u0433\u043b\u044f\u0434\u043d\u043e. \u0411\u044b\u0441\u0442\u0440\u043e. \u041f\u043e\u043b\u0435\u0437\u043d\u043e.<\/h2>\n<p>\u0418 \u0432\u043e\u0442 \u043c\u044b \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u043a \u0441\u0430\u043c\u043e\u043c\u0443 \u0432\u043a\u0443\u0441\u043d\u043e\u043c\u0443 \u2014 <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\">HTML-\u043e\u0442\u0447\u0451\u0442\u0443<\/a>, \u0442\u043e\u043c\u0443 \u0441\u0430\u043c\u043e\u043c\u0443, \u0440\u0430\u0434\u0438 \u0447\u0435\u0433\u043e \u0432\u0441\u0451 \u044d\u0442\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u043e\u0441\u044c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0435\u0433\u043e \u043f\u043e \u0447\u0430\u0441\u0442\u044f\u043c.<\/p>\n<h4>Config \u2014 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043e\u0442\u0447\u0451\u0442\u0430<\/h4>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u2014 \u0431\u043b\u043e\u043a \u0441 \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439:<\/p>\n<ul>\n<li>\n<p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u043e\u043d\u043e \u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0438\u0437\u0443 \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0435)<\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0442\u0447\u0451\u0442\u0430<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u0433\u0438, environment, \u0430\u0432\u0442\u043e\u0440 \u0438 \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0442\u0443\u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c<\/p>\n<\/li>\n<\/ul>\n<h4>Total number of elements \/ Total number of actions<\/h4>\n<p>\u0421\u043b\u0435\u0434\u043e\u043c \u0438\u0434\u0443\u0442 \u0434\u0432\u0430 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445 \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u0430:<\/p>\n<ul>\n<li>\n<p><strong>Total number of elements<\/strong> \u2014 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0431\u044b\u043b\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u0441\u0435\u0445 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432. \u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0440\u043e\u0441\u0442 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043f\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>Total number of actions<\/strong> \u2014 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0435\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0431\u044b\u043b\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043e: \u043a\u043b\u0438\u043a\u043e\u0432, \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u0432\u0432\u043e\u0434\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445.<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u2014 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0430\u043b\u0438 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435, \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0440\u043e\u0441\u0442 \u0441 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0442\u0435\u0441\u0442\u043e\u0432. \u042d\u0442\u043e \u043f\u0440\u044f\u043c \u043c\u043e\u0449\u043d\u044b\u0439 \u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c77\/7b1\/26c\/c777b126c9b1bef80b3e115f627a1735.png\" width=\"3022\" height=\"1508\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c77\/7b1\/26c\/c777b126c9b1bef80b3e115f627a1735.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c77\/7b1\/26c\/c777b126c9b1bef80b3e115f627a1735.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h4>\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439: \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0430 \u043f\u043e \u0442\u0438\u043f\u0430\u043c<\/h4>\n<p>\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u043e\u0442\u0447\u0451\u0442\u0430 \u2014 stacked bar chart, \u0433\u0434\u0435:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u2014 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u043f\u043e \u0434\u0430\u0442\u0435\/\u0432\u0440\u0435\u043c\u0435\u043d\u0438)<\/p>\n<\/li>\n<li>\n<p>\u0426\u0432\u0435\u0442\u043e\u0432\u044b\u0435 \u0437\u043e\u043d\u044b \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u2014 \u0442\u0438\u043f\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439: <code>click<\/code>, <code>check visible<\/code>, <code>check text<\/code>, <code>fill<\/code>, \u0438 \u0434\u0440\u0443\u0433\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0427\u0435\u043c \u0432\u044b\u0448\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u2014 \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440: \u0432\u044b \u0437\u0430\u043c\u0435\u0447\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (<code>check visible<\/code>). \u0412\u043d\u043e\u0441\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u043a\u0438 \u0432 \u0442\u0435\u0441\u0442\u044b \u2014 \u0438 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043e\u0442\u0447\u0451\u0442\u0435 \u044d\u0442\u0430 \u0437\u043e\u043d\u0430 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0441\u0442\u0438. \u041a\u0440\u0430\u0441\u043e\u0442\u0430.<\/p>\n<p>\u042d\u0442\u043e \u043f\u0440\u044f\u043c\u043e \u0444\u0438\u0434\u0431\u0435\u043a-\u043f\u0435\u0442\u043b\u044f \u043c\u0435\u0436\u0434\u0443 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8ff\/d09\/ff1\/8ffd09ff1a8a715288aea91c74e406c9.png\" width=\"3024\" height=\"1004\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/8ff\/d09\/ff1\/8ffd09ff1a8a715288aea91c74e406c9.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8ff\/d09\/ff1\/8ffd09ff1a8a715288aea91c74e406c9.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h4>\u0424\u0440\u0435\u0439\u043c \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c: \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0435 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435<\/h4>\n<p>\u0418 \u0432\u043e\u0442 \u043e\u043d\u0430, \u0432\u0438\u0448\u0435\u043d\u043a\u0430 \u043d\u0430 \u0442\u043e\u0440\u0442\u0435 \u2014 \u0444\u0440\u0435\u0439\u043c \u0441 \u0432\u0430\u0448\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c:<\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\/\u0441\u0430\u0439\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432 \u043e\u0442\u0447\u0451\u0442\u0435<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0433\u043e \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043a\u0440\u044b\u0442\u044b \u0442\u0435\u0441\u0442\u0430\u043c\u0438<\/p>\n<\/li>\n<li>\n<p>\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u0435\u0439\u0434\u0436 \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0442\u0438\u043f\u043e\u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u201c\u043f\u043e\u0432\u0435\u0440\u0445\u201d \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u0412\u0438\u0434\u043d\u043e \u0432\u0441\u0451: \u0447\u0442\u043e \u043a\u043b\u0438\u043a\u0430\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0438, \u0433\u0434\u0435 \u0442\u0435\u043a\u0441\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f \u0438 \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<h4>\u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442?<\/h4>\n<p>\u0424\u043b\u043e\u0443 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439:<\/p>\n<ol>\n<li>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0435 \u043e\u0442\u0447\u0451\u0442<strong>. <\/strong>\u0412\u0438\u0434\u0438\u0442\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u0444\u0440\u0435\u0439\u043c \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438 \u043d\u0435\u0442.<strong> <\/strong>\u0427\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 Refresh \u043d\u0430 \u0442\u0443\u043b\u0431\u0430\u0440\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0448\u043b\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u2014 \u0441\u043d\u043e\u0432\u0430 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 Refresh.<strong> <\/strong>\u041f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u0434 \u043d\u043e\u0432\u0443\u044e DOM-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443.<\/p>\n<\/li>\n<li>\n<p>\u041c\u043e\u0434\u0430\u043b\u043a\u0430\/\u043f\u043e\u043f\u0430\u043f \u2014 \u0442\u0435 \u0436\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430. \u041e\u0442\u043a\u0440\u044b\u043b\u0438 \u043c\u043e\u0434\u0430\u043b\u043a\u0443 \u2192 \u043d\u0430\u0436\u0430\u043b\u0438 Refresh \u2192 \u0437\u0430\u043a\u0440\u044b\u043b\u0438 \u2192 \u0441\u043d\u043e\u0432\u0430 Refresh, \u0435\u0441\u043b\u0438 \u0431\u0435\u0439\u0434\u0436\u0438 \u201c\u0437\u0430\u0432\u0438\u0441\u043b\u0438\u201d. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, DOM \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c.<\/p>\n<\/li>\n<\/ol>\n<p><strong>\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435:<\/strong> \u201c\u0432 \u043b\u044e\u0431\u043e\u0439 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u2014 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 Refresh\u201d. \u041e\u043d \u043f\u0435\u0440\u0435\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\u0439<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/96a\/4ea\/565\/96a4ea5651c9730c0fed8181e719d26e.png\" width=\"3024\" height=\"1516\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/96a\/4ea\/565\/96a4ea5651c9730c0fed8181e719d26e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/96a\/4ea\/565\/96a4ea5651c9730c0fed8181e719d26e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u044b<\/h4>\n<ul>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 \u0434\u043b\u044f \u0431\u0435\u0439\u0434\u0436\u0435\u0439 \u0438 \u0440\u0430\u043c\u043e\u043a. \u0415\u0441\u043b\u0438 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c UI \u043f\u043b\u043e\u0445\u043e \u0432\u0438\u0434\u043d\u043e \u2014 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u2014 \u0445\u043e\u0442\u0438\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e <code>click<\/code> \u0438\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e <code>check text<\/code>? \u041d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u043e \u0433\u0440\u0443\u043f\u043f\u0430\u043c \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0435 \u201c\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438\u201d (<code>check visible<\/code>, <code>check text<\/code>, <code>check hidden<\/code>, <code>check disabled<\/code> \u0438 \u0434\u0440\u0443\u0433\u0438\u0435)<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u2014 \u043c\u043e\u0436\u043d\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0435\u0433\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/185\/6de\/abe\/1856deabe96a611046db5cb9b36c58a7.png\" width=\"3022\" height=\"1492\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/185\/6de\/abe\/1856deabe96a611046db5cb9b36c58a7.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/185\/6de\/abe\/1856deabe96a611046db5cb9b36c58a7.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b5b\/7a2\/e00\/b5b7a2e00280be8c1e3efdcbc2402716.png\" width=\"3024\" height=\"1498\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b5b\/7a2\/e00\/b5b7a2e00280be8c1e3efdcbc2402716.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b5b\/7a2\/e00\/b5b7a2e00280be8c1e3efdcbc2402716.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h4>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0448\u0430\u044e\u0442: \u043c\u043e\u0434\u0430\u043b\u043a\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430<\/h4>\n<p>\u041d\u043e \u0438 \u044d\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0432\u0441\u0451. \u0415\u0441\u043b\u0438 \u043a\u043b\u0438\u043a\u043d\u0443\u0442\u044c \u043d\u0430 \u0431\u0435\u0439\u0434\u0436 \u0440\u044f\u0434\u043e\u043c \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0435 \u2014 \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u043d\u043e \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e\u0431 \u044d\u0442\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435. \u041f\u0440\u044f\u043c\u043e \u043a\u0430\u043a \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u0435\u0435 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435. \u0412\u043e\u0442 \u0447\u0442\u043e \u0432\u044b \u0442\u0430\u043c \u0443\u0432\u0438\u0434\u0438\u0442\u0435:<\/p>\n<p>\u0421\u0435\u043b\u0435\u043a\u0442\u043e\u0440: \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c<\/p>\n<ul>\n<li>\n<p>\u0422\u0438\u043f \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>xpath<\/code>,  <code>css<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0421\u0430\u043c\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u043b\u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043d \u0432\u0437\u044f\u043b\u0441\u044f \u0438 \u043a\u0430\u043a \u0434\u043e \u043d\u0435\u0433\u043e \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f.<\/p>\n<h4>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439: \u043a\u0442\u043e, \u043a\u043e\u0433\u0434\u0430 \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e<\/h4>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0451\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u043b\u0438\u0441\u044c (<code>click<\/code>, <code>check visible<\/code>, <code>fill<\/code>, \u0438 \u0434\u0440\u0443\u0433\u0438\u0435)<\/p>\n<\/li>\n<li>\n<p>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043a\u0430\u0436\u0434\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0431\u044b\u043b\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435, \u0430 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044f. \u041c\u043e\u0436\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0447\u0430\u0449\u0435, \u043a\u0430\u043a\u0438\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f, \u0438 \u0433\u0434\u0435 \u0442\u0435\u0441\u0442\u044b \u201c\u0445\u0430\u043b\u0442\u0443\u0440\u044f\u0442\u201d.<\/p>\n<h4>\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430: \u0432\u0441\u0451, \u043a\u0430\u043a \u0431\u044b\u043b\u043e<\/h4>\n<p>\u041d\u0438\u0436\u0435 \u2014 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u0442\u0435\u0441\u0442\u043e\u0432. \u042d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u0438\u043b\u043b\u0435\u0440-\u0444\u0438\u0447\u0430.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<blockquote>\n<p>\u0420\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u0432\u0441\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u043a\u043b\u0438\u043a\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0430 enabled.<\/p>\n<p>\u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0438 \u0432\u0438\u0434\u0438\u043c:<br \/> \u2014 \u0440\u0430\u043d\u044c\u0448\u0435 \u0431\u044b\u043b \u0442\u043e\u043b\u044c\u043a\u043e <code>click<\/code>,<br \/> \u2014 \u0442\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u0442\u044c \u0438 <code>check enabled<\/code> \u043f\u0435\u0440\u0435\u0434 \u043d\u0438\u043c.<\/p>\n<\/blockquote>\n<p>\u0412\u043e\u0442 \u043e\u043d \u2014 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430. \u0418 \u0432\u0441\u0451 \u044d\u0442\u043e \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443. \u042d\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c UI-\u0440\u0435\u043f\u043e\u0440\u0442\u0435.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d80\/818\/e02\/d80818e025d0a78dc9c3017db7efd299.png\" width=\"3024\" height=\"1518\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d80\/818\/e02\/d80818e025d0a78dc9c3017db7efd299.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d80\/818\/e02\/d80818e025d0a78dc9c3017db7efd299.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h4>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u043e\u0432: \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u043e \u0432\u0441\u0435\u043c\u0443<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440, \u043d\u043e \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0441\u043a\u0430\u0442\u044c \u0435\u0433\u043e \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438. \u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0440\u0435\u0432\u044c\u044e, \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a27\/ef6\/a49\/a27ef6a4979e24160b1c560bb1b4c7b8.png\" width=\"3024\" height=\"1444\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a27\/ef6\/a49\/a27ef6a4979e24160b1c560bb1b4c7b8.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a27\/ef6\/a49\/a27ef6a4979e24160b1c560bb1b4c7b8.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h4>\u041c\u0443\u043b\u044c\u0442\u0438\u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u043e\u0434\u0438\u043d \u043e\u0442\u0447\u0451\u0442 \u2014 \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/h4>\n<p>\u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043a\u0430\u0436\u0434\u044b\u0439 \u043d\u0430 \u0441\u0432\u043e\u0451\u043c \u0434\u043e\u043c\u0435\u043d\u0435? \u0412\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430.<\/p>\n<ul>\n<li>\n<p>\u0412\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432 \u043e\u0434\u0438\u043d \u043e\u0442\u0447\u0451\u0442<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u2014 \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u0447\u0451\u0442 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<\/ul>\n<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u201c10 \u0432\u043a\u043b\u0430\u0434\u043e\u043a \u2014 10 \u043e\u0442\u0447\u0451\u0442\u043e\u0432\u201d. \u0412\u0441\u0451 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0438 \u0443\u0434\u043e\u0431\u043d\u043e.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d5f\/11d\/e33\/d5f11de334124c973be76a5374f9b41e.png\" width=\"3024\" height=\"602\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d5f\/11d\/e33\/d5f11de334124c973be76a5374f9b41e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d5f\/11d\/e33\/d5f11de334124c973be76a5374f9b41e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h4>\u0422\u0435\u043c\u043d\u0430\u044f \u0442\u0435\u043c\u0430<\/h4>\n<p>\u041d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u2014 \u0442\u0435\u043c\u043d\u0430\u044f \u0442\u0435\u043c\u0430. \u0413\u043b\u0430\u0437\u0430 \u043d\u0435 \u0442\u0435\u043a\u0443\u0442, \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u0438\u044f\u0442\u043d\u043e. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u043a\u043b\u0438\u043a.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/28a\/839\/96a\/28a83996a9dff3180d1e7e4ff9ce916a.png\" width=\"3024\" height=\"1498\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/28a\/839\/96a\/28a83996a9dff3180d1e7e4ff9ce916a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/28a\/839\/96a\/28a83996a9dff3180d1e7e4ff9ce916a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h4>\u0418\u0442\u043e\u0433: \u041e\u0434\u0438\u043d HTML \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043f\u043e\u043b\u044c\u0437\u044b<\/h4>\n<p>\u0412\u0441\u0451, \u0447\u0442\u043e \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f UI-\u0442\u0435\u0441\u0442\u043e\u0432, \u0442\u0435\u043f\u0435\u0440\u044c \u0432 \u043e\u0434\u043d\u043e\u043c HTML-\u0444\u0430\u0439\u043b\u0435:<\/p>\n<ul>\n<li>\n<p>\u041d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0435 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u0414\u0438\u043d\u0430\u043c\u0438\u043a\u0430 \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0413\u043b\u0443\u0431\u043e\u043a\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u043f\u043e\u0438\u0441\u043a\u0430<\/p>\n<\/li>\n<li>\n<p>\u041c\u0443\u043b\u044c\u0442\u0438\u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u044c<\/p>\n<\/li>\n<li>\n<p>\u0411\u044b\u0441\u0442\u0440\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/li>\n<\/ul>\n<p>\u0421 \u0442\u0430\u043a\u0438\u043c \u043e\u0442\u0447\u0451\u0442\u043e\u043c \u0432\u044b \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e<strong> <\/strong>\u201c\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b\u201d, \u0430 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0435 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0443 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435. \u041f\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u0433\u0430\u0434\u0430\u0442\u044c \u2014 \u043f\u043e\u043a\u0440\u044b\u0442\u043e \u0438\u043b\u0438 \u043d\u0435\u0442. \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u0432\u0438\u0434\u043d\u043e. \u041f\u043e\u043d\u044f\u0442\u043d\u043e. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u043e.<\/p>\n<h2>\u0413\u0434\u0435 \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f?<\/h2>\n<h3>1. \u041a\u043e\u0433\u0434\u0430 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u044c: \u201c\u0410 \u0432\u043e\u043e\u0431\u0449\u0435 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043a\u0440\u044b\u0442\u043e?\u201d<\/h3>\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u043b \u0442\u0435\u0441\u0442\u044b. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b. \u0412\u0441\u0451 \u0437\u0435\u043b\u0451\u043d\u043e\u0435. \u041d\u0443 \u0432\u0440\u043e\u0434\u0435 \u043c\u043e\u043b\u043e\u0434\u0435\u0446? \u0410 \u043f\u043e\u0442\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0448\u044c \u043e\u0442\u0447\u0451\u0442 \u2014 \u0438 \u0432\u0438\u0434\u0438\u0448\u044c, \u0447\u0442\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0442\u0440\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0438 \u043e\u0434\u0438\u043d <code>h1<\/code>. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 \u0433\u0443\u043b\u044f\u0435\u0442. \u0410 \u0442\u044b \u0434\u0443\u043c\u0430\u043b, \u0443 \u0442\u0435\u0431\u044f &#171;\u0432\u0441\u0451 \u043f\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u043c&#187;.<\/p>\n<p>\u0421 \u043e\u0442\u0447\u0451\u0442\u043e\u043c \u0441\u0440\u0430\u0437\u0443 \u0432\u0438\u0434\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u043a\u0430\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0442\u0440\u043e\u0433\u0430\u043b\u0438;<\/p>\n<\/li>\n<li>\n<p>\u043a\u0430\u043a\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0430\u0434 \u043d\u0438\u043c\u0438 \u0431\u044b\u043b\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0431\u044b\u043b\u043e \u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u0432\u0440\u043e\u0434\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u044b\u043a\u0430\u043b\u0438 \u0438 \u0437\u0430\u0431\u044b\u043b\u0438.<\/p>\n<\/li>\n<\/ul>\n<h3>2. \u0420\u0435\u0432\u044c\u044e \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432 \u0431\u0435\u0437 \u044d\u043a\u0441\u0442\u0440\u0430\u0441\u0435\u043d\u0441\u043e\u0440\u0438\u043a\u0438<\/h3>\n<p>\u041f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0442\u0435\u0431\u0435 MR \u0441 \u0442\u0435\u0441\u0442\u0430\u043c\u0438. \u041d\u043e\u0432\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b. \u0413\u043b\u0430\u0437\u0430\u043c\u0438 \u0447\u0438\u0442\u0430\u0442\u044c? \u041d\u0443 \u043c\u043e\u0436\u043d\u043e. \u041d\u043e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u043d\u044f\u0442\u044c: \u0442\u0435\u0441\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0438\u0434?<\/p>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0448\u044c \u043e\u0442\u0447\u0451\u0442 \u2014 \u0438 \u0432\u0441\u0451 \u0432\u0438\u0434\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u0435\u0441\u0442\u044c \u043b\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043b\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\/\u0442\u0435\u043a\u0441\u0442\u044b;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0438\u0447\u0435\u0433\u043e \u043b\u0438 \u0432\u0430\u0436\u043d\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u044d\u0442\u043e \u043d\u0435 \u201c\u0447\u0443\u0432\u0441\u0442\u0432\u0443\u044e, \u0447\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u201d \u2014 \u044d\u0442\u043e \u0447\u0451\u0442\u043a\u043e \u0432\u0438\u0434\u043d\u043e \u0433\u043b\u0430\u0437\u0430\u043c\u0438. \u041a\u0430\u043a \u0440\u0435\u043d\u0442\u0433\u0435\u043d, \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0435\u0437 \u0438\u0437\u043b\u0443\u0447\u0435\u043d\u0438\u044f.<\/p>\n<h3>3. \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447, \u043a\u0430\u043a \u0432\u0437\u0440\u043e\u0441\u043b\u044b\u0435 \u043b\u044e\u0434\u0438<\/h3>\n<p>\u201c\u0410 \u043a\u0430\u043a\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 UI \u0443 \u043d\u0430\u0441 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043f\u043e\u043a\u0440\u044b\u0442\u044b \u0442\u0435\u0441\u0442\u0430\u043c\u0438?\u201d \u2014 \u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0430. \u0421 \u044d\u0442\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0442\u043a\u043d\u0443\u0442\u044c \u0432 \u043e\u0442\u0447\u0451\u0442 \u0438 \u0441\u043a\u0430\u0437\u0430\u0442\u044c:<\/p>\n<ul>\n<li>\n<p>\u0432\u043e\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0432\u043e\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043b\u0438\u043a\u0430\u044e\u0442, \u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442;<\/p>\n<\/li>\n<li>\n<p>\u0430 \u0442\u0443\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 UI-\u043f\u0440\u0438\u0437\u0440\u0430\u043a \u2014 \u0435\u0433\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0432\u0438\u0434\u0438\u0442.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e: \u043e\u0444\u043e\u0440\u043c\u043b\u044f\u0435\u0448\u044c \u0437\u0430\u0434\u0430\u0447\u0438, \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0448\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442, \u0443\u043a\u0440\u0435\u043f\u043b\u044f\u0435\u0448\u044c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435. \u0412\u0441\u0451 \u043a\u0430\u043a \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<h3>4. \u041f\u043e\u043a\u0430\u0436\u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0434\u0430\u043a\u0442\u0443 \u2014 \u0438 \u043f\u0443\u0441\u0442\u044c \u043e\u0442\u0441\u0442\u0430\u043d\u0435\u0442<\/h3>\n<p>\u041f\u0440\u043e\u0434\u0430\u043a\u0442 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442:<\/p>\n<blockquote>\n<p>\u201c\u0410 \u043f\u043e\u0438\u0441\u043a \u0442\u043e\u0447\u043d\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f?\u201d<br \/> \u0418 \u0442\u044b \u0442\u0430\u043a\u043e\u0439: \u201c\u041d\u0443, \u044d\u044d\u044d&#8230; \u0432\u0440\u043e\u0434\u0435 \u0434\u0430&#8230; \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0439\u0434\u0443 \u0432 \u043a\u043e\u0434\u0435&#8230;\u201d<\/p>\n<\/blockquote>\n<p>\u041d\u0435\u0442. \u0422\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0448\u044c \u043e\u0442\u0447\u0451\u0442, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0448\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u2014 \u0438 \u0432\u0438\u0434\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u0435\u0441\u0442\u044c \u043b\u0438 \u044d\u0442\u043e\u0442 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440;<\/p>\n<\/li>\n<li>\n<p>\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u043b\u0438 \u043e\u043d;<\/p>\n<\/li>\n<li>\n<p>\u0447\u0442\u043e \u0441 \u043d\u0438\u043c \u0434\u0435\u043b\u0430\u043b\u0438 (\u043a\u043b\u0438\u043a\u0430\u043b\u0438, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0438, \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438).<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u0438\u043d\u0438\u043c\u0443\u043c \u0441\u043b\u043e\u0432 \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043f\u043e\u043b\u044c\u0437\u044b. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0445\u043e\u0447\u0435\u0448\u044c \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0438\u0442\u044c \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c\u0438 \u0432 Excel.<\/p>\n<h3>5. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u043e\u0432 (\u0435\u0441\u043b\u0438 \u0442\u044b \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u201c\u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0438 \u0437\u0430\u0431\u044b\u043b\u201d)<\/h3>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0448\u044c \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u043e, \u0430 \u0447\u0442\u043e \u2014 \u043d\u0435\u0442, \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u0441\u0443\u043f\u0435\u0440\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c: \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u0443\u0434\u0430 \u0432\u0441\u0451 \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f.<\/p>\n<ul>\n<li>\n<p>\u0411\u044b\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043b\u0438\u043a \u2192 \u0441\u0442\u0430\u043b\u043e \u0435\u0449\u0451 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0411\u044b\u043b\u0430 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u2192 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p>\u0410 \u0433\u0434\u0435-\u0442\u043e, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0447\u0442\u043e-\u0442\u043e \u043e\u0442\u0432\u0430\u043b\u0438\u043b\u043e\u0441\u044c \u0438 \u0441\u0442\u0430\u043b\u043e \u0445\u0443\u0436\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0442\u044b \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u201c\u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0442\u0435\u0441\u0442\u043e\u0432 \u0441\u0442\u0430\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u201d, \u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0432\u0438\u0434\u0438\u0448\u044c, \u0433\u0434\u0435 \u0441\u0442\u0430\u043b\u043e \u043b\u0443\u0447\u0448\u0435, \u0430 \u0433\u0434\u0435 \u043d\u0430\u0434\u043e \u043f\u043d\u0443\u0442\u044c.<\/p>\n<h3>6. \u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u043f\u043e-\u0432\u0437\u0440\u043e\u0441\u043b\u043e\u043c\u0443<\/h3>\n<p>\u0412 \u043e\u0442\u0447\u0451\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0440\u044b\u0442\u044c \u0438\u043d\u0441\u0430\u0439\u0442\u044b:<\/p>\n<ul>\n<li>\n<p>\u0443 \u043d\u0430\u0441 \u0432\u043e\u043e\u0431\u0449\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438?<\/p>\n<\/li>\n<li>\n<p>\u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c <code>disabled<\/code> \u0443 \u043a\u043d\u043e\u043f\u043e\u043a \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0436\u043c\u0451\u043c \u043d\u0430 \u0432\u0441\u0451 \u043f\u043e\u0434\u0440\u044f\u0434?<\/p>\n<\/li>\n<li>\n<p>\u043c\u043e\u0436\u0435\u0442, \u0443 \u043d\u0430\u0441 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u0433\u0434\u0435 <code>input<\/code>&#8216;\u044b \u043d\u0435 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0442\u0441\u044f?<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u201c\u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0430\u0440\u0443 \u0442\u0435\u0441\u0442\u043e\u0432\u201d, \u0430 \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0447\u0435\u0441\u0442\u043d\u043e \u0438 \u043f\u043e \u043f\u0443\u043d\u043a\u0442\u0430\u043c: <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a><strong> <\/strong>\u2014 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u042d\u0442\u043e \u043d\u043e\u0432\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c.<\/p>\n<h4>\u041f\u043e\u0447\u0435\u043c\u0443 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435?<\/h4>\n<ol>\n<li>\n<p><strong>\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u0445 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432. <\/strong>\u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u2014 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0430\u043b\u0441\u044f \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0443 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a <a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a>. \u042d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u043b\u0430\u0441\u0442\u043e\u0447\u043a\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f \u0432 UI-\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u0418\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u044f \u0431\u0435\u0437 \u043c\u0430\u0433\u0438\u0438. <\/strong>\u0417\u0432\u0443\u0447\u0438\u0442 \u043a\u0430\u043a \u043c\u0430\u0433\u0438\u044f: \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435, \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0430, \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f&#8230; \u041d\u043e \u0432\u043d\u0443\u0442\u0440\u0438<strong> <\/strong>\u2014 \u0447\u0438\u0441\u0442\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0448\u0430\u043c\u0430\u043d\u0441\u0442\u0432\u0430. \u0412\u0441\u0451 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u043d\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435, \u043b\u0435\u0433\u043a\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043b\u044e\u0431\u043e\u0439 \u044f\u0437\u044b\u043a \u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a.<\/p>\n<\/li>\n<li>\n<p><strong>\u0411\u0435\u0437 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439. <\/strong>\u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0445\u0430\u043a\u043e\u0432, \u043e\u0431\u0445\u043e\u0434\u043e\u0432 \u0438\u043b\u0438 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u0412\u0441\u0451 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0447\u0438\u0441\u0442\u043e, \u0441 \u043d\u0443\u043b\u044f, \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043d\u043d\u043e \u0438 \u0441 \u0430\u043a\u0446\u0435\u043d\u0442\u043e\u043c \u043d\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u043e\u0441\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u043e\u0441\u0442\u0430\u044f, \u043d\u043e \u043c\u043e\u0449\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430. <\/strong>\u0412 \u043e\u0441\u043d\u043e\u0432\u0435 \u2014 \u043b\u0451\u0433\u043a\u0430\u044f, \u043d\u043e \u0433\u0438\u0431\u043a\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043d\u0430 <a href=\"https:\/\/react.dev\/\" rel=\"noopener noreferrer nofollow\">React<\/a> + <a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/API\/Window\/postMessage\" rel=\"noopener noreferrer nofollow\">PostMessage<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043b\u044e\u0431\u044b\u0435 \u043d\u0443\u0436\u0434\u044b.<\/p>\n<\/li>\n<li>\n<p><strong>\u041b\u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438? \u041f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b. <\/strong>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0431\u043e\u0435\u0432\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445, \u0438 \u043f\u043e\u043a\u0430 \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e\u0439 \u043b\u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438 \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u043e. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e, \u043a\u0430\u043a \u0448\u0432\u0435\u0439\u0446\u0430\u0440\u0441\u043a\u0438\u0435 \u0447\u0430\u0441\u044b.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c. <\/strong>\u0425\u043e\u0447\u0435\u0448\u044c \u043d\u043e\u0432\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a? \u0424\u0438\u043b\u044c\u0442\u0440? \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f <a href=\"https:\/\/redux.js.org\/\" rel=\"noopener noreferrer nofollow\">Redux<\/a>? \u0414\u0430 \u043b\u0435\u0433\u043a\u043e. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f <a href=\"https:\/\/react.dev\/\" rel=\"noopener noreferrer nofollow\">React<\/a> \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0451 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u0438 \u043a\u0443\u0434\u0430 \u0443\u0433\u043e\u0434\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p><strong> \u041b\u0451\u0433\u043a\u0438\u0439 \u043a\u0430\u043a \u043f\u0435\u0440\u044b\u0448\u043a\u043e. <\/strong>\u041e\u0442\u0447\u0451\u0442 \u0432\u0435\u0441\u0438\u0442 \u0432\u0441\u0435\u0433\u043e ~1MB \u2014 \u0441 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439, \u0444\u0440\u0435\u0439\u043c\u043e\u043c, \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c\u0438 \u0438 \u0432\u0441\u0435\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u0439. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442:<\/p>\n<ol>\n<li>\n<p>\u041c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0438\u0441\u044c\u043c\u0435<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0432 <a href=\"https:\/\/allurereport.org\/\" rel=\"noopener noreferrer nofollow\">Allure<\/a><\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0430 <a href=\"https:\/\/pages.github.com\/\" rel=\"noopener noreferrer nofollow\">GitHub Pages<\/a><\/p>\n<\/li>\n<li>\n<p>\u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0438\u0445 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u0432 \u0438\u043b\u0438 HTML\/PDF \u043d\u0430 100MB.<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p><strong>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u0430 \u043d\u0435 \u043a\u043e\u043f\u0438\u0435\u0439. <\/strong>\u0412\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 \u0436\u0438\u0432\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0435. \u041c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438 \u0441\u0440\u0430\u0437\u0443 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043d\u0435 \u0440\u0435\u043f\u043b\u0435\u0439, \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c. <\/strong>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043d\u0435 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442 \u0442\u0435\u0441\u0442\u044b \u0438 \u043d\u0435 \u0433\u0440\u0443\u0437\u0438\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443. \u0421\u043b\u043e\u0439 \u0441\u0431\u043e\u0440\u0430 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u2014 \u0442\u043e\u043d\u043a\u0438\u0439 \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u0439. \u041e\u0442\u0447\u0451\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430.<\/strong> \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u2014 \u044d\u0442\u043e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e:<\/p>\n<ol>\n<li>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0441\u043a\u0440\u0438\u043f\u0442<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0431\u0440\u0430\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435<\/p>\n<\/li>\n<li>\n<p>\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043e\u0442\u0447\u0451\u0442<\/p>\n<\/li>\n<li>\n<p>\u0413\u043e\u0442\u043e\u0432\u043e. \u041c\u0438\u043d\u0438\u043c\u0443\u043c \u0443\u0441\u0438\u043b\u0438\u0439 \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043f\u043e\u043b\u044c\u0437\u044b.<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p><strong>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u2014 \u0443\u0440\u043e\u0432\u0435\u043d\u044c next. <\/strong>\u041c\u044b \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0438\u0448\u0435\u043c \u0442\u0435\u0441\u0442\u044b, \u043c\u044b \u0432\u0438\u0434\u0438\u043c<strong>, <\/strong>\u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0413\u0434\u0435 \u043a\u043b\u0438\u043a\u043d\u0443\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438, \u0433\u0434\u0435 \u0437\u0430\u0431\u044b\u043b\u0438 \u2014 \u0432\u0441\u0451 \u043f\u0435\u0440\u0435\u0434 \u0433\u043b\u0430\u0437\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/strong> \u041c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0434\u043e\u043c\u0435\u043d\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u0425\u043e\u0442\u0438\u0442\u0435 \u2014 \u043e\u0434\u0438\u043d \u043e\u0442\u0447\u0451\u0442, \u0445\u043e\u0442\u0438\u0442\u0435 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435. \u0413\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>\u041b\u0435\u0433\u043a\u0430\u044f \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044f \u043f\u043e\u0434 \u043b\u044e\u0431\u043e\u0439 \u0441\u0442\u0435\u043a.<\/strong> \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0439, \u0447\u0442\u043e \u0435\u0433\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043d\u0430 \u043b\u044e\u0431\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443. \u0412\u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 <a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\">Python<\/a> \u2014 \u0430 \u0432\u043e\u0442 \u043d\u0430 <a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool-js\" rel=\"noopener noreferrer nofollow\">TypeScript\/JavaScript<\/a>. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u043e\u0432\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u2014 \u0432\u043e\u043f\u0440\u043e\u0441 \u0436\u0435\u043b\u0430\u043d\u0438\u044f, \u0430 \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<\/ol>\n<blockquote>\n<p><a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a><strong> <\/strong>\u2014 \u044d\u0442\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043f\u0440\u043e\u0440\u044b\u0432 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 UI-\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438. \u042d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u0430 \u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e.<\/p>\n<\/blockquote>\n<p>\u0420\u0435\u0430\u043b\u044c\u043d\u043e. \u041e\u043d:<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u0432\u044b\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c<\/p>\n<\/li>\n<li>\n<p>\u0414\u0435\u043b\u0430\u0435\u0442 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u043c<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b<\/p>\n<\/li>\n<li>\n<p>\u0418, \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430<\/p>\n<\/li>\n<\/ul>\n<h4>\u041e\u0447\u0435\u043d\u044c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c<\/h4>\n<p>\u0412 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u0432\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u043a\u0430\u043a\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0432\u0430\u0448\u0438\u0445 UI \u0442\u0435\u0441\u0442\u0430\u0445. \u0412 \u043b\u0443\u0447\u0448\u0435\u043c \u2014 \u0432\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u043e\u0441\u043c\u044b\u0441\u043b\u0438\u0442\u0435, \u043a\u0430\u043a \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u0435 \u043a UI-\u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044e.<\/p>\n<p>\u0412\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u043c\u043e\u0435\u043c\u00a0<a href=\"https:\/\/github.com\/Nikita-Filonov\" rel=\"noopener noreferrer nofollow\">GitHub<\/a>:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\">ui-coverage-tool<\/a> \u2014 \u0434\u043b\u044f Python<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool-js\" rel=\"noopener noreferrer nofollow\">ui-coverage-tool-js<\/a> \u2014 \u0434\u043b\u044f TypeScript\/JavaScript<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-report\" rel=\"noopener noreferrer nofollow\">ui-coverage-report<\/a> \u2014 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f \u043e\u0442\u0447\u0435\u0442\u0430<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0438\u043c\u0435\u0440 HTML \u043e\u0442\u0447\u0435\u0442\u0430<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/901656\/\"> https:\/\/habr.com\/ru\/articles\/901656\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0432\u044b \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u0435 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u2014 \u0438 \u0441\u0440\u0430\u0437\u0443 \u0432\u0438\u0434\u0438\u0442\u0435, \u043a\u0430\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b, \u0430 \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0431\u044b\u0442\u044b. \u041f\u0440\u044f\u043c\u043e, \u043a\u0430\u043a \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u043d\u0438\u0436\u0435:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0410 \u043f\u043e\u0442\u043e\u043c\u2026 \u043f\u0440\u043e\u0441\u044b\u043f\u0430\u0435\u0442\u0435\u0441\u044c. \u041e\u043f\u044f\u0442\u044c \u0441\u043e\u043d. \u041c\u0435\u0447\u0442\u044b \u043e\u0431 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438.<\/p>\n<p>\u041d\u043e \u0441\u0442\u043e\u043f. \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u043d. \u042d\u0442\u043e \u043c\u043e\u0439 <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\">\u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442<\/a> \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f UI \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432. \u0413\u043e\u0442\u043e\u0432\u044c\u0442\u0435\u0441\u044c \u2014 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e.<\/p>\n<h2>\u041a\u043b\u0430\u0441\u0441\u0438\u043a\u0430 \u0436\u0430\u043d\u0440\u0430 \u2014 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435<\/h2>\n<p>\u041f\u0438\u0448\u0435\u043c \u043c\u044b, \u0437\u043d\u0430\u0447\u0438\u0442, UI-\u0442\u0435\u0441\u0442\u044b. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c. \u041e\u043d\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442, \u0447\u0442\u043e-\u0442\u043e \u043a\u043b\u0438\u043a\u0430\u044e\u0442, \u0438\u043d\u043e\u0433\u0434\u0430 \u0434\u0430\u0436\u0435 \u0431\u0430\u0433\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442. \u041d\u043e \u0432\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442? \u0418 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e?<\/p>\n<p>\u0410 \u043a\u043d\u043e\u043f\u043a\u0443 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u044e\u0437\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u043c\u043e\u0434\u0430\u043b\u043a\u0435?<br \/>\u0410 \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 \u043d\u0435\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u043a\u043d\u043e\u043f\u043a\u0430 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u0430?<br \/>\u0410 \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0441\u0442 \u043e\u0431\u0440\u0435\u0437\u0430\u043b\u0441\u044f \u0432 <a href=\"https:\/\/www.w3schools.com\/css\/css_navbar.asp\" rel=\"noopener noreferrer nofollow\">navbar-\u0440\u0435<\/a> \u2014 \u043a\u0442\u043e \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442?<\/p>\n<p>\u041f\u0430\u0440\u0430 \u0442\u0430\u043a\u0438\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u2014 \u0438 \u043b\u044e\u0431\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0442\u043e\u0440 \u0443\u0436\u0435 \u0432 \u043b\u0451\u0433\u043a\u043e\u043c \u0441\u0442\u0443\u043f\u043e\u0440\u0435. \u0418 \u0434\u0430, \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043a\u0438\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0442\u043d\u0438, \u0438 \u043e\u043d\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c.<\/p>\n<h3>\u041a\u0430\u043a \u043d\u0430 \u044d\u0442\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442?<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 API \u2014 \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u0431\u044b <a href=\"https:\/\/swagger.io\/\" rel=\"noopener noreferrer nofollow\">Swagger<\/a>, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0443. \u0410 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 UI?<\/p>\n<p>\u041d\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0447\u0435\u0441\u0442\u043d\u043e, \u043a\u0430\u043a \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 UI-\u0442\u0435\u0441\u0442\u043e\u0432?<\/p>\n<h4>\u041d\u0438\u043a\u0430\u043a<\/h4>\n<p>\u0414\u0430-\u0434\u0430. \u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0438\u043a\u0430\u043a. \u041e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 UI-\u0442\u0435\u0441\u0442\u043e\u0432 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u2014 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u043e, \u0430 \u0447\u0442\u043e \u043d\u0435\u0442 \u2014 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041e\u0442 \u0441\u043b\u043e\u0432\u0430 \u0441\u043e\u0432\u0441\u0435\u043c.<\/p>\n<h4>\u0427\u0435\u0440\u0435\u0437 \u0434\u0435\u0431\u0430\u0433<\/h4>\n<p>\u041c\u043e\u0436\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0443\u0433\u043b\u0443\u0431\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u0441\u0442\u044b, \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442. \u041d\u043e \u0435\u0441\u043b\u0438 \u0442\u0435\u0441\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u0441 \u043a\u0443\u0447\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u2014 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u0447\u0430\u0441. \u0410 \u0442\u043e \u0438 \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<h4>\u0420\u0443\u0447\u043a\u0430\u043c\u0438<\/h4>\n<p>\u041c\u043e\u0436\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0439, \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b \u0432 TMS. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0440\u0430\u0441\u0438\u0432\u043e. \u041d\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u2014 \u0432\u0441\u0451 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f. \u0418 \u0435\u0441\u043b\u0438 \u0432\u044b \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 UI \u2014 \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u043c.<\/p>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f<\/h3>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u043e UI-\u0442\u0435\u0441\u0442\u0430\u043c\u0438. \u041d\u043e&#8230; \u0422\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u0442\u044c.<\/p>\n<h3>\u0410 \u0435\u0441\u043b\u0438 \u0431\u044b&#8230;<\/h3>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435: \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0441\u0430\u0439\u0442\u0435, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442:<\/p>\n<ul>\n<li>\n<p>\u043a\u0430\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u044b \u0442\u0435\u0441\u0442\u0430\u043c\u0438<\/p>\n<\/li>\n<li>\n<p>\u043a\u0430\u043a\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043d\u0438\u043c\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c<\/p>\n<\/li>\n<li>\n<p>\u0438 \u0434\u0430\u0436\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u043e\u0433\u0434\u0430 \u0432\u0441\u0451 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0448\u044c \u043d\u0443\u0436\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u2192 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u0448\u044c \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u2192 \u0432\u0438\u0434\u0438\u0448\u044c \u0432\u0441\u044e \u043a\u0430\u0440\u0442\u0443 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f: \u0447\u0442\u043e \u043a\u043b\u0438\u043a\u0430\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0438, \u0430 \u0447\u0442\u043e \u2014 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438.<\/p>\n<p>\u0417\u0432\u0443\u0447\u0438\u0442, \u043a\u0430\u043a \u0447\u0442\u043e-\u0442\u043e \u0438\u0437 \u043c\u0438\u0440\u0430 \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u0439. \u0411\u0435\u0437 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439? \u0411\u0435\u0437 \u043c\u0430\u0433\u0438\u0438? \u0411\u0435\u0437 \u0448\u0430\u043c\u0430\u043d\u0441\u0442\u0432\u0430? \u0421 \u043b\u044e\u0431\u044b\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c? \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u0434\u0432\u0430 \u043a\u043b\u0438\u043a\u0430? \u0410\u0433\u0430. \u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<h2>\u0412\u0441\u0442\u0440\u0435\u0447\u0430\u0439\u0442\u0435: ui-coverage-tool<\/h2>\n<p><a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\">\u0418\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442<\/a> \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 UI-\u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438:<\/p>\n<ul>\n<li>\n<p>\u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432 \u043d\u0438 \u043f\u043e \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438, \u043d\u0438 \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0443<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043b\u044e\u0431\u044b\u043c\u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c\u0438<\/p>\n<\/li>\n<li>\n<p>\u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442<\/p>\n<\/li>\n<li>\n<p>\u0438 \u0434\u0430\u0451\u0442 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0439 UI \u043f\u0440\u044f\u043c\u043e \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435<\/p>\n<\/li>\n<\/ul>\n<p>\u041b\u0438\u0447\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u044e \u044d\u0442\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u043f\u0440\u043e\u0440\u044b\u0432\u043e\u043c \u0432 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438 UI-\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438. \u0418 \u0441\u0435\u0439\u0447\u0430\u0441 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c, \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u0432\u0441\u0451 \u043d\u0443\u0436\u043d\u043e \u2014 \u0438 \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0436\u0435 \u0441\u0435\u0433\u043e\u0434\u043d\u044f.<\/p>\n<h2>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043e\u0442\u0447\u0435\u0442\u0430<\/h2>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441\u0440\u0430\u0437\u0443 \u0441 \u043c\u0435\u0441\u0442\u0430 \u0432 \u043a\u0430\u0440\u044c\u0435\u0440. \u041a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\">ui-coverage-tool<\/a>? \u041a\u0430\u043a \u0435\u043c\u0443 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0442\u0430\u043a \u0433\u0438\u0431\u043a\u043e \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u044f\u043c\u043e \u043f\u043e\u0432\u0435\u0440\u0445 \u0436\u0438\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f?<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041d\u0430 \u0441\u0445\u0435\u043c\u0435 \u0432\u044b\u0448\u0435 \u0432\u0438\u0434\u043d\u043e, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043e\u0442\u0447\u0451\u0442\u043e\u043c \u0438 \u0444\u0440\u0435\u0439\u043c\u043e\u043c. \u0418, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0442\u0443\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u2014 \u0438 \u0432 \u044d\u0442\u043e\u043c \u0435\u0451 \u0441\u0438\u043b\u0430.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e \u0448\u0430\u0433\u0430\u043c:<\/p>\n<ol>\n<li>\n<p>\u041d\u0430 \u0441\u0430\u0439\u0442, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u044c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435, \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u0438\u043f\u0442 \u0441 \u0430\u0433\u0435\u043d\u0442\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u042d\u0442\u043e\u0442 \u0441\u0430\u0439\u0442 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 iframe \u043f\u0440\u044f\u043c\u043e \u0432 \u043e\u0442\u0447\u0451\u0442\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u0447\u0451\u0442 \u0438 \u0430\u0433\u0435\u043d\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Web_Messaging\" rel=\"noopener noreferrer nofollow\">Web Messaging<\/a> (aka <a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/API\/Window\/postMessage\" rel=\"noopener noreferrer nofollow\">postMessage<\/a>).<\/p>\n<\/li>\n<li>\n<p>\u0410\u0433\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u0447\u0451\u0442\u0443, \u0430 \u043e\u0442\u0447\u0451\u0442 \u2014 \u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0430\u0433\u0435\u043d\u0442\u0443.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u0432\u0443\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c: \u043d\u0435 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442, \u043d\u0435 \u0441\u043d\u0430\u043f\u0448\u043e\u0442, \u0430 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0436\u0438\u0432\u043e\u0439 \u0441\u0430\u0439\u0442 \u043f\u0440\u044f\u043c\u043e \u0443 \u0432\u0430\u0441 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.<\/p>\n<h3>\u041a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435?<\/h3>\n<p>\u041f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>\u041e\u0442\u0447\u0451\u0442 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0430\u0433\u0435\u043d\u0442\u0443: <em>\u00ab\u041f\u043e\u0434\u0441\u0432\u0435\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043f\u043e\u043a\u0440\u044b\u0442 \u0442\u0435\u0441\u0442\u0430\u043c\u0438\u00bb<\/em><\/p>\n<\/li>\n<li>\n<p>\u0410\u0433\u0435\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0434\u0438\u0442 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0435\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u0432\u0441\u0451 \u044d\u0442\u043e \u2014 \u0431\u0435\u0437 \u0448\u0430\u043c\u0430\u043d\u0441\u0442\u0432\u0430, \u0431\u0435\u0437 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439, \u0441 \u043b\u044e\u0431\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\u0439 \u0438 \u0437\u0430 \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u044b.<\/p>\n<h3>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u0438\u0448\u043a\u0430 \u2014 \u043d\u0435 \u0432 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0435<\/h3>\n<p>\u0421\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0437\u0434\u0435\u0441\u044c \u2014 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0441\u0430\u043c\u0430 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0430 \u0434\u0432\u0438\u0436\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430 \u044d\u0442\u0438\u043c. \u041e\u043d:<\/p>\n<ul>\n<li>\n<p>\u043b\u0435\u0433\u043a\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043b\u044e\u0431\u043e\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435<\/p>\n<\/li>\n<li>\n<p>\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c, \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u043c, \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0442\u0447\u0451\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0433\u0434\u0435 \u0443\u0433\u043e\u0434\u043d\u043e \u2014 \u043e\u0442 CI \u0434\u043e \u043b\u043e\u043a\u0430\u043b\u043a\u0438, \u043e\u0442 <a href=\"https:\/\/pages.github.com\/\" rel=\"noopener noreferrer nofollow\">GitHub Pages<\/a> \u0434\u043e <a href=\"https:\/\/allurereport.org\/\" rel=\"noopener noreferrer nofollow\">Allure<\/a>.<\/p>\n<h3>\u0415\u0441\u0442\u044c \u043b\u0438 \u0443 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043b\u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438?<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0447\u0435\u0441\u0442\u043d\u043e \u2014 \u043d\u0435\u0442. \u0415\u0441\u043b\u0438 \u0438 \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u0442\u043e \u043d\u0435 \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435, \u0430 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043a\u0440\u0438\u0432\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430). \u041d\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u2014 \u043f\u043e\u0434\u0445\u043e\u0434 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432, \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c \u0438 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0441\u0440\u0435\u0434\u044b.<\/p>\n<h3>\u0410 \u0447\u0442\u043e \u0441 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430\u043c\u0438?<\/h3>\n<h4>1. \u0421\u043d\u0430\u043f\u0448\u043e\u0442\u044b (Playwright Trace, Cypress UI Coverage \u0438 \u0434\u0440\u0443\u0433\u0438\u0435)<\/h4>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0442\u0435\u0441\u0442\u0430 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u0430\u043f\u0448\u043e\u0442 \u0438 \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0433\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435. \u0422\u0430\u043a \u0434\u0435\u043b\u0430\u044e\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/playwright.dev\/python\/docs\/trace-viewer\" rel=\"noopener noreferrer nofollow\">Playwright Trace Viewer<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/www.cypress.io\/ui-coverage\" rel=\"noopener noreferrer nofollow\">Cypress UI Coverage<\/a>.<\/p>\n<p>\u041d\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441. \u0421\u043d\u0430\u043f\u0448\u043e\u0442\u044b \u2014 \u0442\u044f\u0436\u0451\u043b\u044b\u0435. \u041e\u0447\u0435\u043d\u044c \u0442\u044f\u0436\u0451\u043b\u044b\u0435.<\/p>\n<blockquote>\n<p>\u041e\u0434\u0438\u043d \u043e\u0442\u0447\u0451\u0442 \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0441\u0438\u0442\u044c \u0434\u0435\u0441\u044f\u0442\u043a\u0438, \u0430 \u0442\u043e \u0438 \u0441\u043e\u0442\u043d\u0438 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442<br \/>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0445\u043e\u0434\u044f\u0442 \u0434\u043e \u0433\u0438\u0433\u043e\u0432, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439<\/p>\n<\/blockquote>\n<p>\u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f: <a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a> \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439, \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438, UI, \u043a\u0430\u0440\u0442\u0430\u043c\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0438 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043e\u043c \u0432\u0435\u0441\u0438\u0442\u2026 <strong>~1.1 \u041c\u0411<\/strong><\/p>\n<p>\u0412\u0434\u0443\u043c\u0430\u0439\u0442\u0435\u0441\u044c. \u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u043e\u0442\u0447\u0451\u0442 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0432\u0430\u0448\u0430 \u0430\u0432\u0430\u0442\u0430\u0440\u043a\u0430 \u0432 Slack.<\/p>\n<h4>2. \u0411\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b<\/h4>\n<p>\u041a\u0442\u043e-\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c: <em>\u00ab\u0410 \u0434\u0430\u0432\u0430\u0439 \u044f \u0441\u0434\u0435\u043b\u0430\u044e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Chrome, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0441\u0451 \u043f\u043e\u043a\u0430\u0436\u0435\u0442!\u00bb. <\/em>\u0417\u0432\u0443\u0447\u0438\u0442 \u043e\u043a\u2026 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430:<\/p>\n<ul>\n<li>\n<p>\u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043e\u0442\u0447\u0451\u0442 \u0432 Safari<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0447\u0451\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c (<a href=\"https:\/\/pages.github.com\/\" rel=\"noopener noreferrer nofollow\">GitHub Pages<\/a>?)<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0432\u0448\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 UI \u043d\u0430 <a href=\"https:\/\/react.dev\/\" rel=\"noopener noreferrer nofollow\">React<\/a>\/<a href=\"https:\/\/vuejs.org\/\" rel=\"noopener noreferrer nofollow\">Vue<\/a>\/<a href=\"https:\/\/angular.dev\/\" rel=\"noopener noreferrer nofollow\">Angular<\/a><\/p>\n<\/li>\n<li>\n<p>\u043d\u0435 \u0432\u0441\u0442\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u0430 \u0438\u0434\u0435\u044f \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u043e\u0442\u0447\u0451\u0442 \u043a <a href=\"https:\/\/allurereport.org\/\" rel=\"noopener noreferrer nofollow\">Allure<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u0441\u0451 \u044d\u0442\u043e \u2014 \u043f\u043b\u0430\u0433\u0438\u043d \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f. \u0410 <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a> \u2014 \u043b\u0435\u0433\u043a\u043e. \u041e\u043d \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e HTML + JS + \u0434\u0430\u043d\u043d\u044b\u0435. \u0412\u0441\u0451 \u0441\u0430\u043c\u043e\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435, \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c\u043e\u0435, \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c\u043e\u0435, \u043a\u0440\u043e\u0441\u0441-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u043e\u0435.<\/p>\n<h4>3. \u0418\u043d\u044a\u0435\u043a\u0446\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0432 iframe<\/h4>\n<p>\u0415\u0441\u0442\u044c \u0438 \u0442\u0440\u0435\u0442\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u0430\u0439\u0442 \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0435 \u0438 \u0447\u0435\u0440\u0435\u0437 <code>iframe.contentWindow.document<\/code> \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c. \u041d\u043e \u0442\u0443\u0442 \u0432\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u0443\u043f\u0440\u0451\u0442\u0435\u0441\u044c \u0432 security hell:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Guides\/CORS\" rel=\"noopener noreferrer nofollow\">cross-origin<\/a> \u043e\u0448\u0438\u0431\u043a\u0438<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Guides\/CSP\" rel=\"noopener noreferrer nofollow\">Content-Security-Policy<\/a><\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Document_Object_Model\" rel=\"noopener noreferrer nofollow\">DOM<\/a><\/p>\n<\/li>\n<li>\n<p>\u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c\u0441\u044f \u0432 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Single-page_application\" rel=\"noopener noreferrer nofollow\">SPA<\/a> \u0431\u0435\u0437 \u0440\u0435\u043b\u043e\u0430\u0434\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u042f \u044d\u0442\u043e\u0442 \u043f\u0443\u0442\u044c \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435. \u0418 \u0431\u044b\u0441\u0442\u0440\u043e \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u2014 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e, \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 <a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a><strong> <\/strong>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/API\/Window\/postMessage\" rel=\"noopener noreferrer nofollow\">postMessage<\/a>, \u0430 \u044d\u0442\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439<strong>, <\/strong>\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439<strong> <\/strong>\u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043e\u043a\u043d\u0430\u043c\u0438.<\/p>\n<h3>\u0418 \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u043c\u0430\u0433\u0438\u044f\u2026<\/h3>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0435 \u0441\u043e \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u043c, \u0430 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0430\u0439\u0442\u043e\u043c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c:<\/p>\n<ul>\n<li>\n<p>\u0417\u0430\u0433\u043d\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043b\u044e\u0431\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043c\u043e\u0434\u0430\u043b\u043a\u0443, \u0432\u0432\u0435\u0441\u0442\u0438 \u0442\u0435\u043a\u0441\u0442, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0430\u0431)<\/p>\n<\/li>\n<li>\n<p>\u0418 \u0443\u0436\u0435 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u2014 \u043d\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0418 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0436\u0438\u0432\u0443\u044e, \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u044f\u043c\u043e \u043f\u043e \u0445\u043e\u0434\u0443 \u0442\u0435\u0441\u0442\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u2014 \u044d\u0442\u043e \u043d\u043e\u0432\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430\u0445.<\/p>\n<h3>\u0412\u0441\u0451 \u0433\u0435\u043d\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e<\/h3>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0435\u0441\u044c \u0441\u0435\u043a\u0440\u0435\u0442: \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 + \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043f\u043e\u043b\u044c\u0437\u044b \u0438 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438. <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a> \u2014 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0447\u0451\u0442, \u044d\u0442\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0438\u0441\u0430\u043b\u0438 UI-\u0442\u0435\u0441\u0442\u044b \u2014 \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e.<\/p>\n<h2>\u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442?<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0431\u043e\u0440 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0432 <a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a>. \u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u0432\u0441\u0451 \u0434\u043e \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e. \u0411\u0435\u0437 \u0442\u0430\u043d\u0446\u0435\u0432, \u0431\u0435\u0437 \u043c\u0430\u0433\u0438\u0438, \u0431\u0435\u0437 \u0431\u043e\u043b\u0438.<\/p>\n<h3>\u0428\u0430\u0433 1. \u0412\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0430\u0433\u0435\u043d\u0442\u0430<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u0430\u0433\u0435\u043d\u0442 \u0441\u043c\u043e\u0433 \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u2014 \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432 \u0441\u0430\u0439\u0442 \u0438\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f? \u0414\u0430 \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<pre><code class=\"python\">&lt;script src=\"https:\/\/nikita-filonov.github.io\/ui-coverage-report\/agent.global.js\"&gt;&lt;\/script&gt;<\/code><\/pre>\n<p>\u042d\u0442\u043e \u0432\u0435\u0441\u044c \u0441\u0435\u043a\u0440\u0435\u0442. \u041e\u0434\u0438\u043d \u0441\u043a\u0440\u0438\u043f\u0442 \u2014 \u0438 \u0432\u0430\u0448 \u0441\u0430\u0439\u0442 \u0443\u0436\u0435 \u0443\u043c\u0435\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u043e\u0442\u0447\u0451\u0442\u043e\u043c. \u0412\u0441\u0451. \u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<h3>\u0428\u0430\u0433 2. \u0410\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u2014 \u0442\u0440\u0435\u043a\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h3>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b, \u0432 \u0434\u0435\u043b\u043e \u0432\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0442\u0440\u0435\u043a\u0435\u0440 \u2014 \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u044c <a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool?tab=readme-ov-file#playwright\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0435\u0441\u0442\u044b.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 (\u0431\u0443\u0434\u044c \u0442\u043e <code>click<\/code>, <code>fill<\/code>, <code>assert visible<\/code>, <code>assert text<\/code> \u0438 \u0434\u0440\u0443\u0433\u0438\u0435), \u0442\u0440\u0435\u043a\u0435\u0440:<\/p>\n<ul>\n<li>\n<p>\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u0442\u0438\u043f (<a href=\"https:\/\/www.w3schools.com\/xml\/xpath_intro.asp\" rel=\"noopener noreferrer nofollow\">XPath<\/a>, <a href=\"https:\/\/www.w3schools.com\/css\/\" rel=\"noopener noreferrer nofollow\">CSS<\/a>)<\/p>\n<\/li>\n<li>\n<p>\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0441\u0430\u043c\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 (<code>click<\/code>, <code>fill<\/code>, <code>select<\/code>, <code>check<\/code>, \u0438 \u0434\u0440\u0443\u0433\u0438\u0435)<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 JSON-\u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0443 <code>coverage-results<\/code>.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438 \u0438\u0437 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432, \u0430 \u043d\u0435 &#171;\u0433\u0434\u0435-\u0442\u043e \u0442\u0430\u043c \u043c\u044b \u0432\u0440\u043e\u0434\u0435 \u043a\u043b\u0438\u043a\u0430\u043b\u0438, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u0447\u043d\u043e&#187;.<\/p>\n<h3>\u0428\u0430\u0433 3. \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043e\u0442\u0447\u0451\u0442<\/h3>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432, \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>ui-coverage-tool save-report<\/code><\/pre>\n<p>\u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435:<\/p>\n<p>HTML-\u043e\u0442\u0447\u0451\u0442 \u2014 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439, \u0436\u0438\u0432\u043e\u0439, \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439, \u0443\u0434\u043e\u0431\u043d\u044b\u0439. \u041c\u043e\u0436\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0442\u044c \u043a Allure<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u043d\u0430 GitHub\/GitLab Pages<\/p>\n<\/li>\n<li>\n<p>\u0448\u0430\u0440\u0438\u0442\u044c \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c \u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430\u043c<\/p>\n<\/li>\n<li>\n<p>\u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0438 \u043f\u043e\u0440\u0430\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f<\/p>\n<\/li>\n<\/ul>\n<p>JSON-\u043e\u0442\u0447\u0451\u0442 \u2014 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442, \u043d\u043e \u0432 \u043c\u0430\u0448\u0438\u043d\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u043e\u043c \u0432\u0438\u0434\u0435. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u0441\u043a\u043e\u0440\u043c\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0435<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u0432\u0435\u0441\u0442\u0438 summary \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 CI \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0438 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u0447\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u2014 \u0432\u0435\u0441\u044c <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\">HTML-\u043e\u0442\u0447\u0451\u0442<\/a> \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d \u0432 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b. \u041e\u0434\u0438\u043d \u0444\u0430\u0439\u043b, \u043e\u0434\u0438\u043d \u043a\u043b\u0438\u043a, \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<h3>\u0412\u044b \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u2014 \u0438 \u0432\u0441\u0451?<\/h3>\n<p>\u0414\u0430, \u0438 \u0432\u0441\u0451. \u0410 \u0447\u0442\u043e \u0435\u0449\u0435 \u043d\u0443\u0436\u043d\u043e? \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u043c\u0430\u0433\u0438\u0438, \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0431\u043e\u043b\u0438, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0442\u0430\u043d\u0446\u0435\u0432 \u0441 <code>inject_js<\/code>, <code>wait_for_selector<\/code> \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0412\u0441\u044f \u0444\u0438\u0448\u043a\u0430 <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a> \u2014 \u0432 \u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0435 \u0438 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h3>\u0410 \u0447\u0442\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c?<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\">\u041e\u0431\u0432\u044f\u0437\u043a\u0430 \u043d\u0430 Python<\/a>\/<a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool-js\" rel=\"noopener noreferrer nofollow\">\u041e\u0431\u0432\u044f\u0437\u043a\u0430 \u043d\u0430 TypeScript\/JavaScript<\/a><\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u0442 JSON-\u0447\u0438\u043a\u0438 \u043f\u043e \u0445\u043e\u0434\u0443 \u0442\u0435\u0441\u0442\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 (\u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435, \u043d\u043e \u0438 \u0432\u0441\u0451, \u0447\u0442\u043e \u0431\u044b\u043b\u043e)<\/p>\n<\/li>\n<li>\n<p>\u0410\u0433\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435<\/p>\n<\/li>\n<li>\n<p>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0442\u0447\u0451\u0442\u044b<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u0432\u0441\u0451 \u044d\u0442\u043e \u2014 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e, \u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e. \u0411\u0435\u0437 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439.<\/p>\n<h3>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0435\u0437\u0434\u0435<\/h3>\n<p>\u0425\u043e\u0442\u044c \u043d\u0430 <a href=\"https:\/\/playwright.dev\/python\/\" rel=\"noopener noreferrer nofollow\">Playwright<\/a>, \u0445\u043e\u0442\u044c \u043d\u0430 <a href=\"https:\/\/www.selenium.dev\/\" rel=\"noopener noreferrer nofollow\">Selenium<\/a>, \u0445\u043e\u0442\u044c \u043d\u0430 \u0447\u0451\u043c-\u0442\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u043c \u2014 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>\u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <a href=\"https:\/\/github.com\/Nikita-Filonov\/ui-coverage-tool\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a> \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430. \u041e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 DOM \u0438 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0435\u043c\u0443 \u0434\u043e \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0438. \u0412\u043e\u0442 \u0438 \u0432\u0435\u0441\u044c \u0441\u0435\u043a\u0440\u0435\u0442. \u0412\u0441\u0451 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0435\u0437\u0443\u043c\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e.<\/p>\n<h2>\u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f<\/h2>\n<p><a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\"><strong>ui-coverage-tool<\/strong><\/a> \u0441\u043e\u0437\u0434\u0430\u043d \u0441 \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u043d\u043e \u043c\u043e\u0449\u043d\u043e\u0439 \u0438\u0434\u0435\u0435\u0439 \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u0432\u0430\u0448\u0438 UI \u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u043b\u043e\u0432\u0430\u0445. \u041e\u043d \u0440\u0435\u0448\u0430\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0434\u0430\u0447:<\/p>\n<h3>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0431\u043e\u0440\u0430 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f<\/h3>\n<p>\u041e\u0434\u0438\u043d \u0440\u0430\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u2014 \u0438 \u0437\u0430\u0431\u044b\u043b\u0438. \u041f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432. \u0420\u0443\u0447\u043d\u043e\u0439 \u0442\u0440\u0443\u0434? \u041d\u0435\u0442, \u0441\u043f\u0430\u0441\u0438\u0431\u043e.<\/p>\n<h3>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u0436\u0438\u0432\u043e\u043c \u0441\u0430\u0439\u0442\u0435<\/h3>\n<p>\u042d\u0442\u043e \u043d\u0435 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u0438 \u043d\u0435 pdf\/html-\u0441\u043d\u0430\u043f\u0448\u043e\u0442\u044b. <a href=\"https:\/\/nikita-filonov.github.io\/ui-coverage-tool\/\" rel=\"noopener noreferrer nofollow\">\u041e\u0442\u0447\u0435\u0442<\/a> \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0436\u0438\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435, \u043f\u0440\u044f\u043c\u043e \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u0425\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u043e \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-458026","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/458026","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=458026"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/458026\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=458026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=458026"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=458026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}