{"id":53880,"date":"2020-07-24T12:07:00","date_gmt":"2021-02-09T14:41:22","guid":{"rendered":"https:\/\/www.globallogic.com\/ua\/insights\/blogs\/deep-dive-into-using-patterns-with-selenium-%d0%be%d0%b3%d0%bb%d1%8f%d0%b4-8-%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d1%96%d0%b2-%d1%89%d0%be-%d1%81%d1%82%d0%b0%d0%bd%d1%83%d1%82%d1%8c-%d1%83-%d0%bf\/"},"modified":"2025-01-31T04:58:19","modified_gmt":"2025-01-31T04:58:19","slug":"dive-into-the-selenium-patterns","status":"publish","type":"insightsection","link":"https:\/\/www.globallogic.com\/ua\/insights\/blogs\/dive-into-the-selenium-patterns\/","title":{"rendered":"Deep dive into using patterns with Selenium: \u043e\u0433\u043b\u044f\u0434 8 \u0448\u0430\u0431\u043b\u043e\u043d\u0456\u0432, \u0449\u043e \u0441\u0442\u0430\u043d\u0443\u0442\u044c \u0443 \u043f\u0440\u0438\u0433\u043e\u0434\u0456"},"content":{"rendered":"<div class=\"classic_editor_content\">\n<p align=\"justify\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-45311 size-full\" src=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/Voloshyn_2-e1595592721489.png\" alt=\"\" width=\"150\" height=\"146\" \/><\/p>\n<p align=\"justify\"><em><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">Author: Oleksiy Voloshyn, Senior <\/span><\/span><a href=\"https:\/\/www.globallogic.com\/ua\/insights\/blogs\/qa-how-to-start\/\" target=\"_blank\" rel=\"noopener\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">QA<\/span><\/span><\/a><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\"> Automation Engineer, Consultant, GlobalLogic Ukraine<\/span><\/span><\/em><\/p>\n<p align=\"justify\"><span style=\"vertical-align: inherit;\"><span class=\"tlid-translation translation\" lang=\"uk\"><span class=\"\" title=\"\"><span style=\"vertical-align: inherit;\">In addition to the<\/span><\/span><\/span><span style=\"vertical-align: inherit;\"> programming languages \u200b\u200bthat can be used to write the code for automating the testing of web applications, we advise you <\/span><span class=\"tlid-translation translation\" lang=\"uk\"><span title=\"\"><span style=\"vertical-align: inherit;\">to <\/span><\/span><\/span><\/span><span class=\"tlid-translation translation\" lang=\"uk\"><span title=\"\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">learn <\/span><\/span><\/span> <span style=\"vertical-align: inherit;\"><span title=\"\"><span style=\"vertical-align: inherit;\">programming <\/span><\/span><\/span><span title=\"\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">patterns <\/span><\/span><\/span> <span style=\"vertical-align: inherit;\"><span title=\"\"><span style=\"vertical-align: inherit;\">for <\/span><\/span><span title=\"\"><span style=\"vertical-align: inherit;\">use <\/span><\/span><span title=\"\"><span style=\"vertical-align: inherit;\">with <\/span><\/span><span title=\"\"><span style=\"vertical-align: inherit;\">the <\/span><\/span><span class=\"\" title=\"\"><span style=\"vertical-align: inherit;\">Selenium <\/span><\/span><span title=\"\"><span style=\"vertical-align: inherit;\">framework<\/span><\/span><\/span>       <\/span><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\"> . In fact, there are a lot of them, and frankly, not all of them are useful.<\/span><\/span><\/p>\n<p align=\"justify\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">In this column, we will analyze some of the most effective programming patterns and show their application in the project. Let&#8217;s go!<\/span><\/span><\/p>\n<p><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">To begin with, let&#8217;s answer the question:<\/span><\/span><\/p>\n<p><b><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">What are templates for?<\/span><\/span><\/b><\/p>\n<p align=\"justify\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">Programming patterns are a kind of techniques that can help a developer solve certain problems in certain situations. In other words, they can greatly facilitate the daily routine and make designing a more optimal process.<\/span><\/span><\/p>\n<p><span style=\"font-weight: 400;\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">All templates are divided into three types:\u00a0<\/span><\/span><\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">Creational<\/span><\/span><\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">Structural (Structural)<\/span><\/span><\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">Behavioral<\/span><\/span><\/span><\/li>\n<\/ul>\n<p class=\"imgyoutube\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-45281 size-full\" src=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/pasted-image-0-3.png\" alt=\"\" width=\"640\" height=\"457\" srcset=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/pasted-image-0-3.png 640w, https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/pasted-image-0-3-300x214.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p align=\"justify\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">We will consider templates from all these types on the example of a real project. Looking ahead, I will say that the project is quite simple, because it was written in order to clearly demonstrate how you can improve the code using different types of templates. In our case, it will be 8 patterns.<\/span><\/span><\/p>\n<h4><b><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">#1 Page Object<\/span><\/span><\/b><\/h4>\n<p class=\"imgyoutube\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-45288 size-large\" src=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-1024x576.png\" alt=\"\" width=\"604\" height=\"340\" srcset=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-1024x576.png 1024w, https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-300x169.png 300w, https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-768x432.png 768w, https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed.png 1280w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><\/p>\n<p align=\"justify\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">I will conduct automated tests using templates on the <\/span><\/span><a rel=\"external nofollow\" target=\"_blank\" href=\"http:\/\/automationpractice.com\/index.php\"><span style=\"font-weight: 400;\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">automationpractice.com<\/span><\/span><\/span><\/a><span style=\"font-weight: 400;\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\"> website . The first template I used for <\/span><\/span><a href=\"https:\/\/www.globallogic.com\/ua\/insights\/blogs\/qa-automation-2\/\" target=\"_blank\" rel=\"noopener\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">testing<\/span><\/span><\/a><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\"> is Page Object. This pattern is <\/span><\/span><\/span><span style=\"font-weight: 400;\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">one of the most frequently used architectural solutions in automation. However, it is also one of the most criticized by developers. Since the template contains quite a lot of code at the beginning, it is either <\/span><\/span><\/span><span style=\"font-weight: 400;\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">quite difficult for a young tester to deploy, or quite time-consuming.<\/span><\/span><\/span><\/p>\n<p align=\"justify\"><span style=\"font-weight: 400;\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">But there are also significant advantages of this solution: for each page of the web application being tested, Page Object creates a class that describes the web elements that are on this page and the methods for interacting with them. That is, with its help you can create separate objects and significantly reduce the amount of code, because the same page objects can be used in different tests.\u00a0<\/span><\/span><\/span><\/p>\n<p><span style=\"font-weight: 400;\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">This is how the Page Object looks <\/span><\/span><a href=\"https:\/\/youtu.be\/iicEJuSn8jI\" target=\"_blank\" rel=\"external nofollow\" target=\"_blank\" noreferrer\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">in code<\/span><\/span><\/a><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\"> .\u00a0<\/span><\/span><\/span><\/p>\n<h4><b><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">#2 Page factory<\/span><\/span><\/b><\/h4>\n<p class=\"imgyoutube\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-45287 size-large\" src=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-1024x683.gif\" alt=\"\" width=\"604\" height=\"403\" srcset=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-1024x683.gif 1024w, https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-300x200.gif 300w, https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-768x512.gif 768w, https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-1536x1024.gif 1536w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><\/p>\n<p><span style=\"font-weight: 400;\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">The second pattern we&#8217;ll look at is the Page Factory, which is often used in conjunction with the Page Object. Page Factory is a pattern <\/span><\/span><\/span><span style=\"font-weight: 400;\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">used to initialize your pages and the elements on them. How exactly? Let&#8217;s look <\/span><\/span><a href=\"https:\/\/www.youtube.com\/watch?v=lqgSKhJ0juc&amp;list=PLipGbz33Ay3GIEpDtF_06214OWM3jAB48&amp;index=2\" target=\"_blank\" rel=\"external nofollow\" target=\"_blank\" noreferrer\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">at an example<\/span><\/span><\/a><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\"> .<\/span><\/span><\/span><\/p>\n<h4><b><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">#3 Builder<\/span><\/span><\/b><\/h4>\n<p class=\"imgyoutube\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-45289 size-full\" src=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/pasted-image-0-1-2.png\" alt=\"\" width=\"640\" height=\"400\" srcset=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/pasted-image-0-1-2.png 640w, https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/pasted-image-0-1-2-300x188.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p align=\"justify\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">This pattern <\/span><\/span><span style=\"font-weight: 400;\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">allows you to break the algorithm of creating a complex object into separate processes. In addition <\/span><\/span><\/span><span style=\"font-weight: 400;\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">, it allows you to avoid the so-called &#8220;hard code&#8221; and possible errors when copying data. This is how it <\/span><\/span><a href=\"https:\/\/youtu.be\/j1aeL6fwGIc\" target=\"_blank\" rel=\"external nofollow\" target=\"_blank\" noreferrer\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">looks in practice<\/span><\/span><\/a><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\"> .\u00a0<\/span><\/span><\/span><\/p>\n<h4><b><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">#4 Singleton<\/span><\/span><\/b><\/h4>\n<p class=\"imgyoutube\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-45282 size-full\" src=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-1.png\" alt=\"\" width=\"600\" height=\"300\" srcset=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-1.png 600w, https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-1-300x150.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/p>\n<p align=\"justify\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">This pattern helps to create a single instance object of a class and provides an access point to that object. Actually, the use of this pattern in automation is somewhat limited, but knowing it is definitely useful. Let&#8217;s see <\/span><\/span><span style=\"font-weight: 400;\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">how it is implemented <\/span><\/span><a href=\"https:\/\/youtu.be\/fxgEAlNf1Mc\" target=\"_blank\" rel=\"external nofollow\" target=\"_blank\" noreferrer\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">in our project<\/span><\/span><\/a><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\"> .<\/span><\/span><\/span><\/p>\n<h4><b><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">#5 Facade<\/span><\/span><\/b><\/h4>\n<p class=\"imgyoutube\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-45283 size-full\" src=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-2.png\" alt=\"\" width=\"640\" height=\"400\" srcset=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-2.png 640w, https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-2-300x188.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p align=\"justify\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">This pattern allows you to &#8220;hide&#8221; a complex system of classes behind a &#8220;pretty facade&#8221;, that is, a simple interface. This is what this <\/span><\/span><a href=\"https:\/\/youtu.be\/sgo9VuW51Lo\" target=\"_blank\" rel=\"external nofollow\" target=\"_blank\" noreferrer\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">pattern looks like in code<\/span><\/span><\/a><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\"> .<\/span><\/span><\/p>\n<h4><b><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">#6 Strategy<\/span><\/span><\/b><\/h4>\n<p align=\"justify\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">The template is used when you need to define the types of algorithms that often change and bring them into their own classes &#8211; strategies. <\/span><\/span><span style=\"font-weight: 400;\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">To describe this pattern in more detail, I suggest you consider the diagram below:<\/span><\/span><\/span><\/p>\n<p class=\"imgyoutube\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-45284 size-full\" src=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-3.png\" alt=\"\" width=\"560\" height=\"321\" srcset=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-3.png 560w, https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-3-300x172.png 300w\" sizes=\"auto, (max-width: 560px) 100vw, 560px\" \/><\/p>\n<p align=\"justify\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">Suppose we have some interface that contains an abstract description of the doOperation method. This method is implemented by several classes (in our example, it is mathematical operations). Accordingly, the doOperation method has three types of implementation. And this is the essence of this strategy. And now let&#8217;s see how this template is implemented in <\/span><\/span><a href=\"https:\/\/youtu.be\/JjLwmSkDc0w\" target=\"_blank\" rel=\"external nofollow\" target=\"_blank\" noreferrer\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">our project<\/span><\/span><\/a><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\"> .<\/span><\/span><\/p>\n<h4><b><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">#7 Decorator<\/span><\/span><\/b><\/h4>\n<p class=\"imgyoutube\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-45285 size-full\" src=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-4.png\" alt=\"\" width=\"640\" height=\"400\" srcset=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-4.png 640w, https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-4-300x188.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p align=\"justify\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">Using this template helps us add new functionality to an object, &#8220;wrapping&#8221; it with new sheets, without changing its essence. This approach is often called the Cabbage principle, or the matryoshka principle. It is implemented in the project <\/span><\/span><a href=\"https:\/\/youtu.be\/Ne49zEJ5xfY\" target=\"_blank\" rel=\"external nofollow\" target=\"_blank\" noreferrer\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">as follows<\/span><\/span><\/a><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\"> .<\/span><\/span><\/p>\n<h4><b><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">#8 Factory<\/span><\/span><\/b><\/h4>\n<p class=\"imgyoutube\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-45286 size-large\" src=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-5-1024x640.png\" alt=\"\" width=\"604\" height=\"378\" srcset=\"https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-5-1024x640.png 1024w, https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-5-300x188.png 300w, https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-5-768x480.png 768w, https:\/\/www.globallogic.com\/ua\/wp-content\/uploads\/sites\/6\/2020\/07\/unnamed-5.png 1280w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><\/p>\n<p align=\"justify\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">A factory method is a design pattern that defines a common interface for creating objects in superclasses, while allowing subclasses to change the type of objects that are created. If we draw an analogy, then we can imagine a factory from which logistics is carried out in several ways, and, in fact, we can get what we need by making a specific request. And now I suggest you see how this method <\/span><\/span><a href=\"https:\/\/youtu.be\/9yBMs0ChoX8\" target=\"_blank\" rel=\"external nofollow\" target=\"_blank\" noreferrer\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">looks in the code<\/span><\/span><\/a><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\"> .<\/span><\/span><\/p>\n<p align=\"justify\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">Actually, this was the last pattern that we would like to analyze today. We are sure that using the templates from this list will make your code much easier!<\/span><\/span><\/p>\n<p align=\"justify\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">PS Here is a link to the project we created on <\/span><\/span><a href=\"https:\/\/github.com\/Vastland\/Patterns\" target=\"_blank\" rel=\"external nofollow\" target=\"_blank\" noreferrer\"><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">GitHub<\/span><\/span><\/a><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0417&#8217;\u044f\u0441\u043e\u0432\u0443\u0454\u043c\u043e, \u0449\u043e \u0442\u0430\u043a\u0435 \u043f\u0430\u0442\u0435\u0440\u043d\u0438 \u0443 Selenium, \u043d\u0430\u0432\u0456\u0449\u043e \u0432\u043e\u043d\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0456 \u0442\u0430 \u044f\u043a \u0441\u0430\u043c\u0435 \u043c\u043e\u0436\u0443\u0442\u044c \u043f\u043e\u043b\u0435\u0433\u0448\u0438\u0442\u0438 \u0436\u0438\u0442\u0442\u044f \u0440\u043e\u0437\u0440\u043e\u0431\u043d\u0438\u043a\u0443<\/p>\n","protected":false},"author":12,"featured_media":45301,"parent":0,"menu_order":0,"template":"","insight":[41],"insight-subcats":[792],"insight-industry":[791],"insight-services":[],"insight-partners":[],"class_list":["post-53880","insightsection","type-insightsection","status-publish","has-post-thumbnail","hentry","insight-blogs","insight-subcats-testing-as-a-service","insight-industry-cross-industry"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.globallogic.com\/ua\/wp-json\/wp\/v2\/insightsection\/53880","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.globallogic.com\/ua\/wp-json\/wp\/v2\/insightsection"}],"about":[{"href":"https:\/\/www.globallogic.com\/ua\/wp-json\/wp\/v2\/types\/insightsection"}],"author":[{"embeddable":true,"href":"https:\/\/www.globallogic.com\/ua\/wp-json\/wp\/v2\/users\/12"}],"version-history":[{"count":2,"href":"https:\/\/www.globallogic.com\/ua\/wp-json\/wp\/v2\/insightsection\/53880\/revisions"}],"predecessor-version":[{"id":101627,"href":"https:\/\/www.globallogic.com\/ua\/wp-json\/wp\/v2\/insightsection\/53880\/revisions\/101627"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.globallogic.com\/ua\/wp-json\/wp\/v2\/media\/45301"}],"wp:attachment":[{"href":"https:\/\/www.globallogic.com\/ua\/wp-json\/wp\/v2\/media?parent=53880"}],"wp:term":[{"taxonomy":"insight","embeddable":true,"href":"https:\/\/www.globallogic.com\/ua\/wp-json\/wp\/v2\/insight?post=53880"},{"taxonomy":"insight-subcats","embeddable":true,"href":"https:\/\/www.globallogic.com\/ua\/wp-json\/wp\/v2\/insight-subcats?post=53880"},{"taxonomy":"insight-industry","embeddable":true,"href":"https:\/\/www.globallogic.com\/ua\/wp-json\/wp\/v2\/insight-industry?post=53880"},{"taxonomy":"insight-services","embeddable":true,"href":"https:\/\/www.globallogic.com\/ua\/wp-json\/wp\/v2\/insight-services?post=53880"},{"taxonomy":"insight-partners","embeddable":true,"href":"https:\/\/www.globallogic.com\/ua\/wp-json\/wp\/v2\/insight-partners?post=53880"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}