{"id":2315,"date":"2022-01-26T10:11:27","date_gmt":"2022-01-26T10:11:27","guid":{"rendered":"https:\/\/lvboard.infostore.in.ua\/?p=2315"},"modified":"2022-09-02T15:03:11","modified_gmt":"2022-09-02T15:03:11","slug":"e2e-%d1%82%d0%b5%d1%81%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d0%b2-react-native-%d0%b7-%d0%b2%d0%b8%d0%ba%d0%be%d1%80%d0%b8%d1%81%d1%82%d0%b0%d0%bd%d0%bd%d1%8f%d0%bc-appium-%d1%82%d0%b0-jest","status":"publish","type":"post","link":"https:\/\/lvboard.infostore.in.ua\/?p=2315","title":{"rendered":"E2E-\u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0432 React Native \u0437 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f\u043c Appium \u0442\u0430 Jest"},"content":{"rendered":"\n<p>\u0423&nbsp;\u0441\u0442\u0430\u0442\u0442\u0456 \u044f&nbsp;\u043f\u043e\u0434\u0456\u043b\u044e\u0441\u044c \u0446\u0456\u043a\u0430\u0432\u0438\u043c \u0432\u0438\u043f\u0430\u0434\u043a\u043e\u043c \u0437&nbsp;\u043d\u0430\u0448\u043e\u0457 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438, \u0430&nbsp;\u0441\u0430\u043c\u0435: \u044f\u043a&nbsp;\u043c\u0438&nbsp;\u0432\u043f\u0440\u043e\u0432\u0430\u0434\u0438\u043b\u0438 \u04152\u0415-\u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f, \u044f\u043a&nbsp;\u0442\u0430&nbsp;\u0447\u043e\u043c\u0443 \u0434\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u043b\u0438 Appium \u0442\u0430&nbsp;Jest.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2>\u0421\u0443\u0442\u044c \u043f\u0438\u0442\u0430\u043d\u043d\u044f<\/h2>\n\n\n\n<p>\u0414\u043b\u044f \u043d\u0430\u0448\u043e\u0433\u043e \u043f\u0440\u043e\u0454\u043a\u0442\u0443 \u043c\u0438&nbsp;\u0432\u0438\u0440\u0456\u0448\u0438\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0438 \u04152\u0415-\u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f, \u0449\u043e\u0431 \u0432&nbsp;\u043f\u043e\u0432\u043d\u043e\u043c\u0443 \u043e\u0431\u0441\u044f\u0437\u0456 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u044f\u0442\u0438 \u043f\u043e\u0432\u0435\u0434\u0456\u043d\u043a\u0443 \u0442\u0430&nbsp;\u0432\u0437\u0430\u0454\u043c\u043e\u0434\u0456\u044e \u0434\u043e\u0434\u0430\u0442\u043a\u0443 \u043d\u0430&nbsp;\u0440\u0456\u0437\u043d\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u0442\u0430&nbsp;\u0441\u0435\u0440\u0435\u0434\u043e\u0432\u0438\u0449\u0430\u0445. \u041f\u0438\u0441\u0430\u0442\u0438 \u0442\u0430\u043a\u0456 \u0442\u0435\u0441\u0442\u0438 \u043d\u0435&nbsp;\u0441\u043a\u043b\u0430\u0434\u043d\u043e, \u0430\u043b\u0435 \u043a\u043e\u043b\u0435\u0433\u0430\u043c \u0431\u0443\u043b\u043e \u0432\u0430\u0436\u043a\u043e \u0440\u043e\u0437\u0456\u0431\u0440\u0430\u0442\u0438\u0441\u044f, \u044f\u043a&nbsp;\u0441\u0430\u043c\u0435 \u0432\u043f\u0440\u043e\u0432\u0430\u0434\u0438\u0442\u0438 \u0446\u0435&nbsp;\u0440\u0456\u0448\u0435\u043d\u043d\u044f, \u0430\u0434\u0436\u0435 \u043d\u0456\u0434\u0435 \u043d\u0435\u043c\u0430\u0454 \u0440\u043e\u0437\u0433\u043e\u0440\u043d\u0443\u0442\u0438\u0445 \u0433\u0430\u0439\u0434\u0456\u0432, \u044f\u043a&nbsp;\u0446\u0435&nbsp;\u0437\u0440\u043e\u0431\u0438\u0442\u0438.<\/p>\n\n\n\n<p>\u041c\u0438&nbsp;\u043f\u043e\u0447\u0430\u043b\u0438 \u0448\u0443\u043a\u0430\u0442\u0438, \u044f\u043a&nbsp;\u043d\u0430\u043c \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u044f\u0442\u0438 \u0440\u043e\u0431\u043e\u0442\u0443 \u0434\u043e\u0434\u0430\u0442\u043a\u0443, \u043f\u0440\u0438 \u0446\u044c\u043e\u043c\u0443 \u043d\u0435&nbsp;\u0443\u043f\u043e\u0432\u0456\u043b\u044c\u043d\u044e\u044e\u0447\u0438 \u0441\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441 \u0440\u043e\u0437\u0440\u043e\u0431\u043a\u0438, \u0449\u043e\u0431 \u043f\u0430\u0440\u0430\u043b\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u0438 \u04152\u0415-\u0442\u0435\u0441\u0442\u0438 \u0456&nbsp;\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u0442\u0438 \u043d\u0430\u0434 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u043c. \u041e\u0441\u043a\u0456\u043b\u044c\u043a\u0438 \u043d\u0430&nbsp;\u043f\u0440\u043e\u0454\u043a\u0442\u0456 \u0432\u0441\u0456 \u044e\u043d\u0456\u0442-\u0442\u0435\u0441\u0442\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0456 \u0437\u0430&nbsp;\u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e Jest, \u0442\u043e&nbsp;\u043c\u0438&nbsp;\u0432\u0438\u0440\u0456\u0448\u0438\u043b\u0438 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u0442\u0438 \u0439\u043e\u0433\u043e \u0456&nbsp;\u0434\u043b\u044f \u04152\u0415-\u0442\u0435\u0441\u0442\u0456\u0432. \u041f\u0440\u043e\u0442\u0435 \u0440\u043e\u0437\u0431\u0435\u0440\u0435\u043c\u043e\u0441\u044f \u0434\u043e\u043a\u043b\u0430\u0434\u043d\u0456\u0448\u0435, \u0434\u043e&nbsp;\u0447\u043e\u0433\u043e&nbsp;\u0436 \u0442\u0443\u0442 Appium.<\/p>\n\n\n\n<h2>\u0429\u043e&nbsp;\u0442\u0430\u043a\u0435 Appium<\/h2>\n\n\n\n<p>Appium&nbsp;\u2014 \u0446\u0435&nbsp;\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0437&nbsp;\u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0438\u043c \u043a\u043e\u0434\u043e\u043c, \u044f\u043a\u0438\u0439 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u043e\u0432\u0430\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0443&nbsp;\u043a\u0440\u043e\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0456\u0439 \u0442\u0430&nbsp;\u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0456\u0439 \u0440\u043e\u0437\u0440\u043e\u0431\u0446\u0456. \u0426\u0435&nbsp;\u0447\u0443\u0434\u043e\u0432\u0438\u0439 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f UI&nbsp;\u0443 React Native. \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0456&nbsp;\u0433\u0456\u0431\u0440\u0438\u0434\u043d\u043e\u0457, \u0456&nbsp;\u0432\u0435\u0431\u0430\u043f\u043b\u0456\u043a\u0430\u0446\u0456\u0457, Appium \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0439 \u043d\u0430&nbsp;\u0432\u0435\u0431\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0456 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0456\u0457 \u0440\u0456\u0437\u043d\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0456\u0432 \u0437\u0430\u0441\u0442\u043e\u0441\u0443\u043d\u043a\u0443. \u041c\u0438&nbsp;\u043e\u0431\u0440\u0430\u043b\u0438 Appium \u0434\u043b\u044f \u043d\u0430\u0448\u043e\u0433\u043e \u043f\u0440\u043e\u0454\u043a\u0442\u0443, \u043e\u0441\u043a\u0456\u043b\u044c\u043a\u0438 \u0432\u0456\u043d \u043c\u0430\u0454 \u0448\u0438\u0440\u0448\u0456 \u043c\u043e\u0436\u043b\u0438\u0432\u043e\u0441\u0442\u0456 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f, \u043e\u0441\u043e\u0431\u043b\u0438\u0432\u043e \u0443&nbsp;\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0456 WebView, \u044f\u043a\u0438\u0439 \u043c\u0438&nbsp;\u0442\u0430\u043a\u043e\u0436 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u043c\u043e.<\/p>\n\n\n\n<p>\u0422\u0430\u043a\u043e\u0436 \u0454&nbsp;\u043f\u043e\u0448\u0438\u0440\u0435\u043d\u0438\u043c <a href=\"https:\/\/github.com\/wix\/Detox\" target=\"_blank\" rel=\"noreferrer noopener\">Detox<\/a>-\u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f end-to-end \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f, \u0440\u043e\u0437\u0440\u043e\u0431\u043b\u0435\u043d\u0438\u0439 Wix. Detox \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u00abgray box\u00bb \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f, \u0449\u043e&nbsp;\u0432\u0456\u0434\u0440\u0456\u0437\u043d\u044f\u0454 \u0439\u043e\u0433\u043e \u0432\u0456\u0434 Appium, \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u00abblack box\u00bb.<\/p>\n\n\n\n<p>Appium \u0441\u0442\u0430\u043d\u0435 \u0443&nbsp;\u043d\u0430\u0433\u043e\u0434\u0456 \u0443&nbsp;\u0442\u0430\u043a\u0438\u0445 \u0432\u0438\u043f\u0430\u0434\u043a\u0430\u0445:<\/p>\n\n\n\n<ul><li>\u044f\u043a\u0449\u043e \u0442\u0435\u0441\u0442\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0456 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u044e QA-\u0456\u043d\u0436\u0435\u043d\u0435\u0440\u0456\u0432, \u0430&nbsp;\u043d\u0435&nbsp;\u0441\u0430\u043c\u0438\u043c\u0438 \u0440\u043e\u0437\u0440\u043e\u0431\u043d\u0438\u043a\u0430\u043c\u0438;<\/li><li>\u044f\u043a\u0449\u043e \u0432\u0438&nbsp;\u043f\u043b\u0430\u043d\u0443\u0454\u0442\u0435 \u043f\u0438\u0441\u0430\u0442\u0438 \u0442\u0435\u0441\u0442\u0438 \u043d\u0435&nbsp;\u043d\u0430&nbsp;JavaScript, \u0430&nbsp;\u043d\u0430&nbsp;\u0456\u043d\u0448\u0456\u0439 \u043c\u043e\u0432\u0456 (\u0431\u043e&nbsp;Detox \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u044e \u0441\u0430\u043c\u0435 JavaScript);<\/li><li>\u044f\u043a\u0449\u043e \u0432\u0438&nbsp;\u043f\u043b\u0430\u043d\u0443\u0454\u0442\u0435 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u0442\u0438 \u0437\u0430\u0441\u0442\u043e\u0441\u0443\u043d\u043e\u043a \u043d\u0430&nbsp;\u0440\u0435\u0430\u043b\u044c\u043d\u0438\u0445 \u0434\u0435\u0432\u0430\u0439\u0441\u0430\u0445;<\/li><li>\u044f\u043a\u0449\u043e \u0432\u0438&nbsp;\u043d\u0435&nbsp;\u0437\u0431\u0438\u0440\u0430\u0454\u0442\u0435\u0441\u044c (\u0430\u0431\u043e \u0437\u0430&nbsp;\u044f\u043a\u0438\u043c\u043e\u0441\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c\u0438 \u043d\u0435&nbsp;\u043c\u043e\u0436\u0435\u0442\u0435) \u0437\u043c\u0456\u043d\u044e\u0432\u0430\u0442\u0438 \u0437\u0430\u0441\u0442\u043e\u0441\u0443\u043d\u043e\u043a \u0442\u0430&nbsp;\u0432\u0431\u0443\u0434\u043e\u0432\u0430\u043d\u0456 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0456 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438 (\u0446\u0435&nbsp;\u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u043f\u0440\u0438 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u0456 Detox).<\/li><\/ul>\n\n\n\n<p>\u042f\u043a\u0449\u043e \u0432\u0438&nbsp;React Native \u0440\u043e\u0437\u0440\u043e\u0431\u043d\u0438\u043a \u0456&nbsp;\u0437\u0430\u0439\u043c\u0430\u0454\u0442\u0435\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044f\u043c \u0442\u0435\u0441\u0442\u0456\u0432 \u0441\u0430\u043c\u043e\u0442\u0443\u0436\u043a\u0438, \u043c\u043e\u0436\u043d\u0430 \u0441\u043c\u0456\u043b\u0438\u0432\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 Detox, \u0431\u043e&nbsp;\u0432\u0456\u043d \u043c\u0430\u0454 \u0433\u0430\u0440\u043d\u0443 \u0456\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0456\u044e \u0442\u0430&nbsp;\u0432\u0438\u0441\u043e\u043a\u0443 \u0448\u0432\u0438\u0434\u043a\u0456\u0441\u0442\u044c \u0432\u0438\u043a\u043e\u043d\u0430\u043d\u043d\u044f \u0442\u0435\u0441\u0442\u0456\u0432.<\/p>\n\n\n\n<h2>\u0427\u0438\u043c \u043a\u043e\u0440\u0438\u0441\u043d\u0438\u0439 Jest<\/h2>\n\n\n\n<p><a href=\"https:\/\/jestjs.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Jest<\/a>&nbsp;\u2014 \u0446\u0435&nbsp;\u0442\u0435\u0441\u0442\u0438\u043d\u0433\u043e\u0432\u0438\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a JavaScript, \u044f\u043a\u0438\u0439 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0438 \u0431\u0443\u0434\u044c-\u044f\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0443 JavaScript. \u0417&nbsp;\u0439\u043e\u0433\u043e \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u0432\u0438&nbsp;\u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0442\u0432\u043e\u0440\u044e\u0432\u0430\u0442\u0438 \u0442\u0435\u0441\u0442\u0438 \u0437&nbsp;\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u043c, \u0437\u0440\u043e\u0437\u0443\u043c\u0456\u043b\u0438\u043c \u0442\u0430&nbsp;\u0431\u0430\u0433\u0430\u0442\u043e\u0444\u0443\u043d\u043a\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u0438\u043c API&nbsp;\u0456 \u043e\u0442\u0440\u0438\u043c\u0443\u0432\u0430\u0442\u0438 \u0448\u0432\u0438\u0434\u043a\u0456 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0438. \u0414\u043b\u044f React Native, \u043f\u043e\u0447\u0438\u043d\u0430\u044e\u0447\u0438 \u0437&nbsp;\u0432\u0435\u0440\u0441\u0456\u0457 React Native v.&nbsp;0.38, Jest \u0454&nbsp;\u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u043c \u0437\u0430&nbsp;\u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c.<\/p>\n\n\n\n<h3>\u0420\u043e\u0437\u0431\u0438\u0440\u0430\u0454\u043c\u043e\u0441\u044f \u043d\u0430&nbsp;\u043f\u0440\u0430\u043a\u0442\u0438\u0446\u0456<\/h3>\n\n\n\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043f\u0440\u043e\u0431\u0443\u0454\u043c\u043e \u0441\u043a\u043e\u043c\u0431\u0456\u043d\u0443\u0432\u0430\u0442\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0456 \u0432\u0438\u0449\u0435 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438 \u0442\u0430&nbsp;\u043f\u043e\u0447\u0430\u0442\u0438 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0457\u0445&nbsp;\u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044f end-to-end \u0442\u0435\u0441\u0442\u0456\u0432 \u0443&nbsp;React Native \u0437\u0430\u0441\u0442\u043e\u0441\u0443\u043d\u043a\u0430\u0445.<\/p>\n\n\n\n<h4>Prerequisite<\/h4>\n\n\n\n<ul><li>React Native &gt;=0.64<\/li><\/ul>\n\n\n\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0449\u043e\u0431 \u043d\u0435&nbsp;\u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>accessebilityLabel<\/code> \u0434\u043b\u044f \u0437\u043d\u0430\u0445\u043e\u0434\u0436\u0435\u043d\u043d\u044f \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456\u0432 \u0432&nbsp;\u043f\u0440\u043e\u0446\u0435\u0441\u0456 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f, \u043c\u0438&nbsp;\u043c\u043e\u0436\u0435\u043c\u043e \u0432\u0438\u0437\u043d\u0430\u0447\u0438\u0442\u0438 \u0442\u0430&nbsp;\u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 <code>testID<\/code>, \u043f\u043e\u0447\u0438\u043d\u0430\u044e\u0447\u0438 \u0437&nbsp;\u0446\u0456\u0454\u0457 \u0432\u0435\u0440\u0441\u0456\u0457 React Native \u0434\u043b\u044f Android.<\/p>\n\n\n\n<h4>Setup a&nbsp;new project<\/h4>\n\n\n\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0442\u0432\u043e\u0440\u0438\u043c\u043e \u043d\u043e\u0432\u0438\u0439 React Native \u043f\u0440\u043e\u0454\u043a\u0442:<\/p>\n\n\n\n<p><code>npx&nbsp;react-native&nbsp;init&nbsp;AppiumTest<\/code><\/p>\n\n\n\n<p>\u0422\u0435\u043f\u0435\u0440 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u043e \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0438 Appium \u0447\u0435\u0440\u0435\u0437 npm:<\/p>\n\n\n\n<p><code>npm&nbsp;i&nbsp;appium&nbsp;--save-dev<\/code><\/p>\n\n\n\n<p>\u0422\u0430\u043a\u043e\u0436, \u043c\u0438&nbsp;\u0431\u0443\u0434\u0435\u043c\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u0438\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a WebdriverIO \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u0442\u0435\u0441\u0442\u0456\u0432, \u0442\u043e\u043c\u0443 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0454\u043c\u043e \u0456&nbsp;\u0439\u043e\u0433\u043e:<\/p>\n\n\n\n<p><code>npm&nbsp;i&nbsp;webdriverio&nbsp;--save-dev<\/code><\/p>\n\n\n\n<p>\u0414\u0430\u043b\u0456 \u0441\u0442\u0432\u043e\u0440\u044e\u0454\u043c\u043e \u043a\u043e\u0440\u0435\u043d\u0435\u0432\u0443 \u043f\u0430\u043f\u043a\u0443 \u043f\u0440\u043e\u0454\u043a\u0442\u0443, \u0434\u0435&nbsp;\u0431\u0443\u0434\u0435 \u0432\u0456\u0434\u0431\u0443\u0432\u0430\u0442\u0438\u0441\u044f \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f <code>jest<\/code>&nbsp;\u0442\u0430 \u0431\u0443\u0434\u0443\u0442\u044c \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0438\u0441\u044f \u0432\u0441\u0456 \u0442\u0435\u0441\u0442\u0438. \u041d\u0430\u0437\u0432\u0435\u043c\u043e \u0457\u0457&nbsp;e2e.<\/p>\n\n\n\n<h4>Appium and Jest setup<\/h4>\n\n\n\n<p>\u041c\u0438&nbsp;\u0445\u043e\u0447\u0435\u043c\u043e \u0432\u0438\u043a\u043e\u043d\u0443\u0432\u0430\u0442\u0438 \u0442\u0435\u0441\u0442\u0438 \u043d\u0430&nbsp;\u043e\u0431\u043e\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445, Android \u0442\u0430&nbsp;iOS, \u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0442\u0432\u043e\u0440\u0438\u043c\u043e <code>jest.config.js<\/code> \u0444\u0430\u0439\u043b \u0437&nbsp;\u0434\u0432\u043e\u043c\u0430 \u043f\u0440\u043e\u0454\u043a\u0442\u0430\u043c \u0434\u043b\u044f \u0446\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c, \u0430\u043b\u0435 \u0437&nbsp;\u043e\u0434\u043d\u0430\u043a\u043e\u0432\u0438\u043c\u0438 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f\u043c\u0438.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const&nbsp;defaultOptions&nbsp;=&nbsp;{&nbsp;\n&nbsp;&nbsp;testEnvironment:&nbsp;'.\/jest.environment.js',&nbsp;\n&nbsp;&nbsp;globalSetup:&nbsp;'.\/jest.global-setup.js',&nbsp;\n&nbsp;&nbsp;globalTeardown:&nbsp;'.\/jest.global-teardown.js',&nbsp;\n};&nbsp;\nmodule.exports&nbsp;=&nbsp;{&nbsp;\n&nbsp;&nbsp;projects:&nbsp;[&nbsp;\n\t{displayName:&nbsp;'Android',&nbsp;...defaultOptions},&nbsp;\n\t{displayName:&nbsp;'iOS',&nbsp;...defaultOptions},&nbsp;\n&nbsp;&nbsp;],&nbsp;\n};&nbsp;\n<\/pre>\n\n\n\n<p>\u0421\u0435\u0440\u0432\u0435\u0440 Appium \u0431\u0443\u0434\u0435 \u0441\u0442\u0430\u0440\u0442\u0443\u0432\u0430\u0442\u0438 \u043f\u0435\u0440\u0435\u0434 \u0432\u0441\u0456\u043c\u0430 \u0442\u0435\u0441\u0442\u0430\u043c\u0438. \u0422\u043e\u0436 \u0432\u0438\u0437\u043d\u0430\u0447\u0438\u043c\u043e \u0446\u0435&nbsp;\u0443&nbsp;\u0444\u0430\u0439\u043b\u0456 <code>jest.global-setup.js<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const&nbsp;appium&nbsp;=&nbsp;require('appium');&nbsp;\nconst&nbsp;startAppiumServer&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{&nbsp;\n&nbsp;&nbsp;return&nbsp;appium.main({loglevel:&nbsp;'none'});&nbsp;\n};&nbsp;\nconst&nbsp;jestSetup&nbsp;=&nbsp;async&nbsp;()&nbsp;=&gt;&nbsp;{&nbsp;\n&nbsp;&nbsp;global.appium&nbsp;=&nbsp;await&nbsp;startAppiumServer();&nbsp;\n};&nbsp;\nmodule.exports&nbsp;=&nbsp;jestSetup;&nbsp;\n<\/pre>\n\n\n\n<p>\u0412\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u043d\u043e, \u0432\u0456\u043d \u0431\u0443\u0434\u0435 \u0437\u0443\u043f\u0438\u043d\u0435\u043d\u0438\u0439 \u043f\u0456\u0441\u043b\u044f \u0432\u0438\u043a\u043e\u043d\u0430\u043d\u043d\u044f \u0442\u0435\u0441\u0442\u0456\u0432. \u041d\u0430\u0448 <code>jest.global-teardown.js<\/code> \u0444\u0430\u0439\u043b \u0431\u0443\u0434\u0435 \u043c\u0430\u0442\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0439 \u0432\u0438\u0433\u043b\u044f\u0434:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const&nbsp;stopAppiumServer&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{&nbsp;\n&nbsp;&nbsp;if&nbsp;(global.appium)&nbsp;{&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;global.appium.close();&nbsp;\n&nbsp;&nbsp;}&nbsp;\n};&nbsp;\nconst&nbsp;jestTeardown&nbsp;=&nbsp;async&nbsp;()&nbsp;=&gt;&nbsp;{&nbsp;\n&nbsp;&nbsp;await&nbsp;stopAppiumServer();&nbsp;\n&nbsp;&nbsp;process.exit(0);&nbsp;\n};&nbsp;\nmodule.exports&nbsp;=&nbsp;jestTeardown;&nbsp;\n<\/pre>\n\n\n\n<p>\u041f\u043e\u0442\u0456\u043c \u0441\u0442\u0432\u043e\u0440\u044e\u0454\u043c\u043e \u0456\u043d\u0434\u0438\u0432\u0456\u0434\u0443\u0430\u043b\u044c\u043d\u0435 \u0441\u0435\u0440\u0435\u0434\u043e\u0432\u0438\u0449\u0435, \u0432&nbsp;\u044f\u043a\u043e\u043c\u0443 \u043c\u0438&nbsp;\u0431\u0443\u0434\u0435\u043c\u043e \u0456\u043d\u0456\u0446\u0456\u044e\u0432\u0430\u0442\u0438 web driver:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const&nbsp;NodeEnvironment&nbsp;=&nbsp;require('jest-environment-node');&nbsp;\nconst&nbsp;wdio&nbsp;=&nbsp;require('webdriverio');&nbsp;\nconst&nbsp;wdioOptions&nbsp;=&nbsp;{&nbsp;\n&nbsp;&nbsp;path:&nbsp;'\/wd\/hub\/',&nbsp;\n&nbsp;&nbsp;port:&nbsp;4723,&nbsp;\n};&nbsp;\nclass&nbsp;CustomEnvironment&nbsp;extends&nbsp;NodeEnvironment&nbsp;{&nbsp;\n&nbsp;&nbsp;constructor(config,&nbsp;context)&nbsp;{&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;super(config,&nbsp;context);&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;this.platform&nbsp;=&nbsp;config.displayName.name;&nbsp;\n&nbsp;&nbsp;}&nbsp;\n&nbsp;&nbsp;async&nbsp;setup()&nbsp;{&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;await&nbsp;super.setup();&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;capabilities&nbsp;=&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.platform&nbsp;===&nbsp;'Android'&nbsp;?&nbsp;androidCapabilities&nbsp;:&nbsp;iOSCapabilities;&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;options&nbsp;=&nbsp;{...wdioOptions,&nbsp;capabilities};&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;driver&nbsp;=&nbsp;await&nbsp;wdio.remote(options);&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;this.global.driver&nbsp;=&nbsp;driver;&nbsp;\n&nbsp;&nbsp;}&nbsp;\n&nbsp;&nbsp;async&nbsp;teardown()&nbsp;{&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;await&nbsp;super.teardown();&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this.global.driver)&nbsp;{&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;await&nbsp;this.global.driver.deleteSession();&nbsp;\n\t}&nbsp;\n&nbsp;&nbsp;}&nbsp;\n}&nbsp;\nmodule.exports&nbsp;=&nbsp;CustomEnvironment;&nbsp;\n<\/pre>\n\n\n\n<p>\u042f\u043a&nbsp;\u043c\u0438&nbsp;\u0431\u0430\u0447\u0438\u043c\u043e, \u043d\u0430\u0448 web driver \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454 \u043f\u0435\u0432\u043d\u0456 \u0440\u0435\u0441\u0443\u0440\u0441\u0438 \u0432&nbsp;\u0437\u0430\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u0456 \u0432\u0456\u0434 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0438. \u0429\u043e\u0431 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0438 \u0442\u0435\u0441\u0442\u0438 \u0432&nbsp;Android-\u0435\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0456, \u0434\u043e\u0434\u0430\u0439\u0442\u0435 \u0446\u044e&nbsp;\u0437\u043c\u0456\u043d\u043d\u0443 \u0443&nbsp;\u0444\u0430\u0439\u043b:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const&nbsp;androidCapabilities&nbsp;=&nbsp;{&nbsp;\n&nbsp;&nbsp;platformName:&nbsp;'Android',&nbsp;\n&nbsp;&nbsp;platformVersion:&nbsp;'10',&nbsp;\n&nbsp;&nbsp;deviceName:&nbsp;'Pixel&nbsp;4',&nbsp;\n&nbsp;&nbsp;avd:&nbsp;'Pixel_4_API_29',&nbsp;\/\/&nbsp;avd&nbsp;id&nbsp;\n&nbsp;&nbsp;app:&nbsp;'.\/android\/app\/build\/outputs\/apk\/release\/app-release.apk',&nbsp;\/\/&nbsp;relative&nbsp;to&nbsp;the&nbsp;project&nbsp;root&nbsp;\n&nbsp;&nbsp;appPackage:&nbsp;'com.appiumtest',&nbsp;\n&nbsp;&nbsp;appWaitActivity:&nbsp;'com.appiumtest.MainActivity',&nbsp;\n};&nbsp;\n<\/pre>\n\n\n\n<p>\u0414\u043b\u044f iOS-\u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const&nbsp;iOSCapabilities&nbsp;=&nbsp;{&nbsp;\n&nbsp;&nbsp;platformName:&nbsp;'iOS',&nbsp;\n&nbsp;&nbsp;platformVersion:&nbsp;'14.5',&nbsp;\n&nbsp;&nbsp;deviceName:&nbsp;'iPhone&nbsp;12',&nbsp;\n&nbsp;&nbsp;app:&nbsp;'.\/ios\/build\/Build\/Products\/Release-iphonesimulator\/AppiumTest.app',&nbsp;\/\/&nbsp;relative&nbsp;to&nbsp;the&nbsp;project&nbsp;root&nbsp;\n};&nbsp;\n<\/pre>\n\n\n\n<p>\u0422\u0430\u043a\u043e\u0436 \u043c\u0438&nbsp;\u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u043c\u043e \u0440\u0435\u043b\u0456\u0437 \u0431\u0456\u043b\u0434\u0443 \u0434\u043b\u044f \u043e\u0431\u043e\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c. \u0412\u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442\u044c \u0437\u0433\u0435\u043d\u0435\u0440\u043e\u0432\u0430\u043d\u0456 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043d\u0430\u0448\u0438\u0445 \u0442\u0435\u0441\u0442\u0456\u0432. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0456\u0434\u043a\u0440\u0438\u0454\u043c\u043e package.json \u0444\u0430\u0439\u043b \u0442\u0430&nbsp;\u0437\u0430\u0437\u043d\u0430\u0447\u0438\u043c\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0438 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u0442\u0435\u0441\u0442\u0456\u0432:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\"scripts\":&nbsp;{&nbsp;\n&nbsp;&nbsp;\"pree2e:android\":&nbsp;\"cd&nbsp;android&nbsp;&amp;&amp;&nbsp;.\/gradlew&nbsp;assembleRelease\",&nbsp;\n&nbsp;&nbsp;\"e2e:android\":&nbsp;\"jest&nbsp;-i&nbsp;--selectProjects&nbsp;Android&nbsp;--config=\\\".\/e2e\/jest.config.js\\\"\",&nbsp;\n&nbsp;&nbsp;\"pree2e:ios\":&nbsp;\"xcodebuild&nbsp;-workspace&nbsp;.\/ios\/AppiumTest.xcworkspace&nbsp;-configuration&nbsp;Release&nbsp;-scheme&nbsp;AppiumTest&nbsp;-sdk&nbsp;iphonesimulator&nbsp;-derivedDataPath&nbsp;.\/ios\/build\",&nbsp;\n&nbsp;&nbsp;\"e2e:ios\":&nbsp;\"jest&nbsp;-i&nbsp;--selectProjects&nbsp;iOS&nbsp;--config=\\\".\/e2e\/jest.config.js\\\"\"&nbsp;\n}&nbsp;\n<\/pre>\n\n\n\n<h4>Actual test<\/h4>\n\n\n\n<p>\u042f\u043a&nbsp;\u043c\u0438&nbsp;\u0432\u043a\u0430\u0437\u0443\u0432\u0430\u043b\u0438 \u0440\u0430\u043d\u0456\u0448\u0435, \u043f\u043e\u0447\u0438\u043d\u0430\u044e\u0447\u0438 \u0437&nbsp;\u0432\u0435\u0440\u0441\u0456\u0457 0.64 React Native, \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>testID<\/code>&nbsp;\u0454 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u043c \u0434\u043b\u044f Android-\u0431\u0456\u043b\u0434\u0456\u0432, \u0442\u043e\u0436 \u043c\u0438&nbsp;\u0431\u0443\u0434\u0435\u043c\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0439\u043e\u0433\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0449\u043e\u0431 \u0442\u0435\u0433\u0430\u0442\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438. \u041c\u0438&nbsp;\u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u043c\u043e Appium, \u0434\u0435&nbsp;\u0432\u0438\u043c\u043e\u0433\u043e\u044e \u0454&nbsp;\u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f package name \u044f\u043a&nbsp;\u0447\u0430\u0441\u0442\u0438\u043d\u0438 resource&nbsp;id. \u041c\u0438&nbsp;\u043c\u0430\u0454\u043c\u043e \u0446\u0435&nbsp;\u0432\u0440\u0430\u0445\u043e\u0432\u0443\u0432\u0430\u0442\u0438, \u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0442\u0432\u043e\u0440\u0438\u043c\u043e helper \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f testIDs.<\/p>\n\n\n\n<p>\u0414\u043b\u044f \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f package name \u043c\u0438&nbsp;\u043c\u043e\u0436\u0435\u043c\u043e \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0438 \u0446\u044e&nbsp;\u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0443:<\/p>\n\n\n\n<p><code>npm&nbsp;i&nbsp;react-native-device-info<\/code><\/p>\n\n\n\n<p>\u0424\u0443\u043d\u043a\u0446\u0456\u044f helper \u0431\u0443\u0434\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u044e:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import&nbsp;{Platform}&nbsp;from&nbsp;'react-native';&nbsp;\nimport&nbsp;{getBundleId}&nbsp;from&nbsp;'react-native-device-info';&nbsp;\nconst&nbsp;packageName&nbsp;=&nbsp;getBundleId();&nbsp;\nexport&nbsp;const&nbsp;tid&nbsp;=&nbsp;value&nbsp;=&gt;&nbsp;\n&nbsp;&nbsp;Platform.select({&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;android:&nbsp;`${packageName}:id\/${value}`,&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;ios:&nbsp;value,&nbsp;\n&nbsp;&nbsp;});&nbsp;\n<\/pre>\n\n\n\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u0454\u043c\u043e \u0446\u0435&nbsp;\u0432&nbsp;\u043a\u043e\u0434\u0456. \u0412\u0456\u0434\u043a\u0440\u0438\u0432\u0430\u0454\u043c\u043e App.js \u0444\u0430\u0439\u043b \u0442\u0430&nbsp;\u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0454\u043c\u043e <code>testID<\/code> \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0437&nbsp;<code>view<\/code>. \u041d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import&nbsp;{tid}&nbsp;from&nbsp;'.\/tid';&nbsp;\n...&nbsp;\n&lt;SafeAreaView&nbsp;testID={tid('App')}&gt;&nbsp;\n...&nbsp;\n<\/pre>\n\n\n\n<p>\u0422\u0430\u043a\u043e\u0436 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u043e \u0434\u043e\u0434\u0430\u0442\u0438 \u0442\u043e\u0439 \u0441\u0430\u043c\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u0443&nbsp;\u0441\u0435\u0440\u0435\u0434\u043e\u0432\u0438\u0449\u0435 jest \u0434\u043b\u044f \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u0439\u043e\u0433\u043e \u0443&nbsp;\u0442\u0435\u0441\u0442\u0430\u0445. \u0414\u043e\u0434\u0430\u0454\u043c\u043e \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0456 \u0440\u044f\u0434\u043a\u0438 \u0443&nbsp;\u0444\u0430\u0439\u043b jest.environment.js:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">constructor(config,&nbsp;context)&nbsp;{&nbsp;\n&nbsp;&nbsp;...&nbsp;\n&nbsp;&nbsp;this.tid&nbsp;=&nbsp;this.tid.bind(this);&nbsp;\n}&nbsp;\ntid(value)&nbsp;{&nbsp;\n&nbsp;&nbsp;if&nbsp;(!this.global.driver)&nbsp;{&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;Error('Appium&nbsp;driver&nbsp;is&nbsp;not&nbsp;initialized');&nbsp;\n&nbsp;&nbsp;}&nbsp;\n&nbsp;&nbsp;return&nbsp;this.global.driver.isAndroid&nbsp;\n\t?&nbsp;`${this.global.driver.capabilities.appPackage}:id\/${value}`&nbsp;\n\t:&nbsp;value;&nbsp;\n}&nbsp;\nasync&nbsp;setup()&nbsp;{&nbsp;\n&nbsp;&nbsp;...&nbsp;\n&nbsp;&nbsp;this.global.tid&nbsp;=&nbsp;this.tid;&nbsp;\n}&nbsp;\n...&nbsp;\n<\/pre>\n\n\n\n<p>\u0414\u0430\u043b\u0456, \u0441\u0442\u0432\u043e\u0440\u044e\u0454\u043c\u043e \u0442\u0435\u043a\u0443 __tests__ \u0443&nbsp;e2e \u0437&nbsp;App.spec.js \u0442\u0435\u0441\u0442-\u0444\u0430\u0439\u043b\u043e\u043c \u0442\u0430&nbsp;\u0434\u043e\u0434\u0430\u0454\u043c\u043e \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0439 \u043a\u043e\u0434:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/*&nbsp;global&nbsp;driver,&nbsp;tid&nbsp;*\/&nbsp;\ntest('The&nbsp;App&nbsp;screen&nbsp;should&nbsp;be&nbsp;displayed',&nbsp;async&nbsp;()&nbsp;=&gt;&nbsp;{&nbsp;\n&nbsp;&nbsp;const&nbsp;screen&nbsp;=&nbsp;await&nbsp;driver.$(`id=${tid('App')}`);&nbsp;\n&nbsp;&nbsp;const&nbsp;isExisting&nbsp;=&nbsp;await&nbsp;screen.isExisting();&nbsp;\n&nbsp;&nbsp;expect(isExisting).toBeTruthy();&nbsp;\n});&nbsp;\n<\/pre>\n\n\n\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u0438\u043c\u043e \u0440\u043e\u0431\u043e\u0442\u0443 \u043d\u0430&nbsp;Android:<\/p>\n\n\n\n<p><code>npm&nbsp;run&nbsp;e2e:android<\/code><\/p>\n\n\n\n<p>\u041e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/s.dou.ua\/storage-files\/pngbase6428bd4b4200fa3eea.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>\u0422\u0435\u043f\u0435\u0440 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u0438\u043c\u043e \u043d\u0430&nbsp;iOS:<\/p>\n\n\n\n<p><code>npm&nbsp;run&nbsp;e2e:ios<\/code><\/p>\n\n\n\n<p>\u041e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/s.dou.ua\/storage-files\/pngbase64611d8dcd389e4510.png\" alt=\"\"\/><\/figure>\n\n\n\n<h4>Troubleshooting<\/h4>\n\n\n\n<ul><li>\u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0438, \u0447\u0438&nbsp;\u0432\u0430\u0448\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0435 \u0441\u0435\u0440\u0435\u0434\u043e\u0432\u0438\u0449\u0435 \u043c\u0430\u0454 \u0432\u0441\u0456 \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u0456 Appium- \u0437\u0430\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u0456, \u0432\u0438&nbsp;\u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0443 <a href=\"https:\/\/github.com\/appium\/appium-doctor\" target=\"_blank\" rel=\"noreferrer noopener\">appium-doctor<\/a>.<\/li><li>\u042f\u043a\u0449\u043e \u0443&nbsp;\u0432\u0430\u0441 \u0432\u0438\u043d\u0438\u043a\u043b\u0430 \u043f\u043e\u043c\u0438\u043b\u043a\u0430 \u0432&nbsp;\u043f\u0440\u043e\u0446\u0435\u0441\u0456 \u0431\u0456\u043b\u0434\u0443 iOS, \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 <a href=\"https:\/\/github.com\/facebook\/react-native\/issues\/31480#issuecomment-902912841\" target=\"_blank\" rel=\"noreferrer noopener\">\u0446\u0435\u0439 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440<\/a> \u0443&nbsp;Xcode \u0433\u0430\u0439\u0434\u0456 \u0437&nbsp;\u0432\u0438\u0440\u0456\u0448\u0435\u043d\u043d\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c.<\/li><\/ul>\n\n\n\n<h2>References<\/h2>\n\n\n\n<ul><li><a href=\"https:\/\/www.headspin.io\/webinar\/testing-react-native-apps-with-appium\" target=\"_blank\" rel=\"noreferrer noopener\">Testing React Native Apps with Appium<\/a><\/li><li><a href=\"https:\/\/appium.io\/docs\/en\/about-appium\/getting-started\/?lang=en\" target=\"_blank\" rel=\"noreferrer noopener\">Appium&nbsp;\u2014 Getting Started<\/a><\/li><li><a href=\"https:\/\/webdriver.io\/docs\/gettingstarted\" target=\"_blank\" rel=\"noreferrer noopener\">WebDriver<\/a><\/li><li><a href=\"https:\/\/dev.to\/nextlevelbeard\/an-end-to-the-abuse-of-accessibility-ids-5d2j\" target=\"_blank\" rel=\"noreferrer noopener\">An&nbsp;end to&nbsp;the abuse of&nbsp;Accessibility IDs<\/a><\/li><li><a href=\"https:\/\/github.com\/vagrantsn\/react-native-appium\" target=\"_blank\" rel=\"noreferrer noopener\">An&nbsp;example of&nbsp;React Native application integrated with Appium for E2E tests<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u0423&nbsp;\u0441\u0442\u0430\u0442\u0442\u0456 \u044f&nbsp;\u043f\u043e\u0434\u0456\u043b\u044e\u0441\u044c \u0446\u0456\u043a\u0430\u0432\u0438\u043c \u0432\u0438\u043f\u0430\u0434\u043a\u043e\u043c \u0437&nbsp;\u043d\u0430\u0448\u043e\u0457 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438, \u0430&nbsp;\u0441\u0430\u043c\u0435: \u044f\u043a&nbsp;\u043c\u0438&nbsp;\u0432\u043f\u0440\u043e\u0432\u0430\u0434\u0438\u043b\u0438 \u04152\u0415-\u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f, \u044f\u043a&nbsp;\u0442\u0430&nbsp;\u0447\u043e\u043c\u0443 \u0434\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u043b\u0438 Appium \u0442\u0430&nbsp;Jest.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[198],"tags":[168],"_links":{"self":[{"href":"https:\/\/lvboard.infostore.in.ua\/index.php?rest_route=\/wp\/v2\/posts\/2315"}],"collection":[{"href":"https:\/\/lvboard.infostore.in.ua\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lvboard.infostore.in.ua\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lvboard.infostore.in.ua\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lvboard.infostore.in.ua\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2315"}],"version-history":[{"count":1,"href":"https:\/\/lvboard.infostore.in.ua\/index.php?rest_route=\/wp\/v2\/posts\/2315\/revisions"}],"predecessor-version":[{"id":2316,"href":"https:\/\/lvboard.infostore.in.ua\/index.php?rest_route=\/wp\/v2\/posts\/2315\/revisions\/2316"}],"wp:attachment":[{"href":"https:\/\/lvboard.infostore.in.ua\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2315"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lvboard.infostore.in.ua\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2315"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lvboard.infostore.in.ua\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}