{"id":61099,"date":"2024-04-01T15:41:35","date_gmt":"2024-04-01T10:11:35","guid":{"rendered":"https:\/\/www.tothenew.com\/blog\/?p=61099"},"modified":"2024-04-01T15:41:35","modified_gmt":"2024-04-01T10:11:35","slug":"exploring-prism-web-automation-testing-framework-on-java-selenium","status":"publish","type":"post","link":"https:\/\/www.tothenew.com\/blog\/exploring-prism-web-automation-testing-framework-on-java-selenium\/","title":{"rendered":"Exploring Prism Web Automation Testing Framework On Java-Selenium"},"content":{"rendered":"<h2><b>Introduction<\/b><\/h2>\n<p>PRISM stands out as a comprehensive solution worth exploring in the vast landscape of testing frameworks for web, mobile, and APIs.This blog is focused on PRISM&#8217;s web testing framework, meticulously crafted on the robust foundation of the Selenium library, TestNG framework, with Java as the binding language. Leveraging Maven as the dependency management tool for the project, PRISM offers a streamlined and efficient approach to web testing, ensuring reliability and scalability in every test scenario. Let&#8217;s dig deep into how PRISM empowers test developers to achieve outstanding testing prowess.<\/p>\n<h2><b>Structure of framework<\/b><\/h2>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-61082 size-full\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-31-10-57-55.png\" alt=\"\" width=\"752\" height=\"395\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-31-10-57-55.png 752w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-31-10-57-55-300x158.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-31-10-57-55-624x328.png 624w\" sizes=\"(max-width: 752px) 100vw, 752px\" \/><\/p>\n<p>To understand the framework and to use it we need to understand the above structure or you can add things while using the framework according to your project requirements.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-61083 size-large\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-06-09-400x1024.png\" alt=\"\" width=\"400\" height=\"1024\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-06-09-400x1024.png 400w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-06-09-117x300.png 117w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-06-09.png 412w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/p>\n<h2><b>Base Package<br \/>\n<\/b><\/h2>\n<p>The Base Package contains three files:<\/p>\n<ul>\n<li>BaseLib<\/li>\n<li>BrowserFactory<\/li>\n<li>ExtentManger<\/li>\n<\/ul>\n<p><b>BaseLib: <\/b>It\u00a0is a class that will extend to child classes that are test script classes. It contains a method that has annotations of the testNG framework that are Parameter BeforeSuite, BeforeTest, BeforeClass, BeforeMethod, AfterMethod, AfterClass, AfterTest, and AfterSuite.<\/p>\n<p><strong>Note<\/strong>:<\/p>\n<ol>\n<li>\u00a0Two more notations will use Test and DataProvider in our test class. We are using ItestListener.<\/li>\n<li>For a better understanding of the order of execution of notations and ListenersClass in the Listene Package (<a href=\"https:\/\/www.browserstack.com\/guide\/testng-listeners\">ItestListner<\/a>), it is recommended to go through the TestNG framework <a href=\"https:\/\/testng.org\/#_annotations\">annotations<\/a>. In the PRISM framework method execute according to the priority or order of notation in the TestNG framework.<\/li>\n<\/ol>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-61085\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/03\/testng-annotation-flow.png\" alt=\"\" width=\"875\" height=\"543\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/03\/testng-annotation-flow.png 875w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/testng-annotation-flow-300x186.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/testng-annotation-flow-768x477.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/testng-annotation-flow-624x387.png 624w\" sizes=\"(max-width: 875px) 100vw, 875px\" \/><\/p>\n<p><b>BrowserFactory Class<\/b>: This class consists of a method that initiates a driver according to requirements, like a driver for Chrome, Firefox, remote drivers, or a driver that has the capability for cloud-like Browser stack, Lambda, etc. It also has a function to quiet the browser. In our test script, we mostly call this method in our parent class i.e., the <b>BaseLib.java<\/b> class. We initiate drivers at any level like on test level, class level, and method level. It is according to our needs or depending on parallel execution of test cases based on method, class, and test-level execution. Focus on the segregation or independence of the test script so it does not hamper test execution.<\/p>\n<p><b>ExtentManager Class: <\/b>This class consists of methods that initialize properties of ExtentReports, and ExtentHtmlReporter objects and return to where they are class for initialization and use in whole test execution; it mostly initializes at BeforeSuite and is used in the whole process like logging test status like failures, passes, skips, etc.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-61087 size-full\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-07-27.png\" alt=\"\" width=\"1410\" height=\"1053\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-07-27.png 1410w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-07-27-300x224.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-07-27-1024x765.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-07-27-768x574.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-07-27-624x466.png 624w\" sizes=\"(max-width: 1410px) 100vw, 1410px\" \/><\/p>\n<h2><b>How it goes<\/b><\/h2>\n<p>We write our test script in the Test package by extending BaseLib and using the reusable method of our Business logic i.e. written in pageObjects package. For our naming convenience, we end the Business logic class with a page in their name like: <em>FiltersOnSummaryViewPageForBookingPage.java<\/em><\/p>\n<p>These logic are scenarios that we test, and we assert these execution results in our Test Script Class that are end by Test in their name like <em>FiltersOnSummaryViewPageForBookingTest.java.<\/em> You can see both examples as shown below images<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-61088\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-10-24.png\" alt=\"\" width=\"1849\" height=\"1065\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-10-24.png 1849w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-10-24-300x173.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-10-24-1024x590.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-10-24-768x442.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-10-24-1536x885.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-10-24-624x359.png 624w\" sizes=\"(max-width: 1849px) 100vw, 1849px\" \/><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-61089\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-11-47.png\" alt=\"\" width=\"1849\" height=\"1065\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-11-47.png 1849w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-11-47-300x173.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-11-47-1024x590.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-11-47-768x442.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-11-47-1536x885.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-11-47-624x359.png 624w\" sizes=\"(max-width: 1849px) 100vw, 1849px\" \/><\/p>\n<p>In the above case, we Talk about reusable methods of the Business logic class, on the execution of this method, we get the result that is tested or asserted at a place where this method has been called by a test case that is in the Test script class.<\/p>\n<p>To understand this, we need to know how these methods are implemented and how their results are asserted by test script.<\/p>\n<p>For writing test logic like for clicking, scrolling, typing, drag and drop, etc, we already have reusable code or functions that had been built using the selenium function and have a logger in them so we can debug. In PRISM we have named that as a <b>SeleniumHelper<\/b> <b>class<\/b> in the <b>seleniumUtils package<\/b>. If we don&#8217;t have any particular function for certain operations, we make a reusable function in <b>CommonUtility<\/b> <b>class<\/b> this class we will build if we need it in the <b>seleniumUtils package<\/b>.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-61090\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-12-46.png\" alt=\"\" width=\"1849\" height=\"1065\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-12-46.png 1849w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-12-46-300x173.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-12-46-1024x590.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-12-46-768x442.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-12-46-1536x885.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-12-46-624x359.png 624w\" sizes=\"(max-width: 1849px) 100vw, 1849px\" \/><\/p>\n<p>When we use any function of the <b>SeleniumHelper<\/b> <b>class,<\/b> it will log for that operation. If we use the click function, it will automatically log the logger in the console, RP, or in the file as you mention in the <b>logback.xml<\/b> file of the resources folder in this folder, you also find the reportportal.properties file. In the <b>reportportal.properties<\/b> file, we will provide the reporting portal link UUID for the user who can log on to that reporting portal. Name of\u00a0 Project of reporting portal on which your project log will be generated. Lunch name by this name should be seen on the reporting portal.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-61092\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-15-00.png\" alt=\"\" width=\"1066\" height=\"409\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-15-00.png 1066w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-15-00-300x115.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-15-00-1024x393.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-15-00-768x295.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-15-00-624x239.png 624w\" sizes=\"(max-width: 1066px) 100vw, 1066px\" \/> <img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-61093\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-15-38.png\" alt=\"\" width=\"1568\" height=\"989\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-15-38.png 1568w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-15-38-300x189.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-15-38-1024x646.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-15-38-768x484.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-15-38-1536x969.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-15-38-624x394.png 624w\" sizes=\"(max-width: 1568px) 100vw, 1568px\" \/><\/p>\n<h2><b>Utilib Package <\/b><\/h2>\n<p>This package is like a Swiss knife; this contains almost all the classes that are needed for automation, like the class for mail triggering, file readers like CSV reader, Excel reader, Google sheet reader, property file reader, random generators for Numbers, Alphabets, Aplhnumeric etc, Screenshot taker, file handler, JiraOperation for bug log, HealthCheckUtils, Zip Directory, Data provider.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-61094\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-16-21.png\" alt=\"\" width=\"612\" height=\"1041\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-16-21.png 612w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-16-21-176x300.png 176w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-16-21-602x1024.png 602w\" sizes=\"(max-width: 612px) 100vw, 612px\" \/><\/p>\n<p><b>DataProviderSource file<\/b> is used in Test Script using TestNG annotation, i.e., <a href=\"https:\/\/coderpad.io\/blog\/development\/how-to-use-dataprovider-in-testng-with-examples\/\">dataProvider<\/a>.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-61095\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-16-52.png\" alt=\"\" width=\"1300\" height=\"1074\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-16-52.png 1300w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-16-52-300x248.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-16-52-1024x846.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-16-52-768x634.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-16-52-624x516.png 624w\" sizes=\"(max-width: 1300px) 100vw, 1300px\" \/><\/p>\n<p>In this method, we define how we will get data in the above image; we can see that we are getting it from an Excel reader. This data is returned in the form of an Object array, and at the place where we had called it explicitly may convert to any 2d form of data structure. As preferred, we can convert it to HashTable.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-61096\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-17-27.png\" alt=\"\" width=\"1300\" height=\"1074\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-17-27.png 1300w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-17-27-300x248.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-17-27-1024x846.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-17-27-768x634.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-17-27-624x516.png 624w\" sizes=\"(max-width: 1300px) 100vw, 1300px\" \/><\/p>\n<p><b>TestNG.xml<\/b> is used to run this Test Classes<\/p>\n<ol>\n<li><a href=\"https:\/\/www.scientecheasy.com\/2020\/07\/create-run-testng-xml-file.html\/\">First Reference<\/a><\/li>\n<li><a href=\"https:\/\/www.javatpoint.com\/how-to-create-xml-file-in-testng\">Second Reference<\/a><\/li>\n<li><a href=\"https:\/\/www.browserstack.com\/guide\/run-parallel-test-cases-in-testng\">Third Reference with Parallel references<\/a><\/li>\n<\/ol>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-61097\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-18-11.png\" alt=\"\" width=\"946\" height=\"778\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-18-11.png 946w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-18-11-300x247.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-18-11-768x632.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-18-11-624x513.png 624w\" sizes=\"(max-width: 946px) 100vw, 946px\" \/><\/p>\n<p><b>Pom.xml <\/b>is the heart of the maven project; it manages the dependencies that are needed to build and run the Project. If the project loses its Pom, then it cannot be run unless dependencies or external libraries are already present in your project.in PRISM POM, we add <b>maven-surefire-plugin<\/b> that triggers the TestNG, and also we add System property for <b>ReportPortal <\/b>as shown in the below Image<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-61098\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-19-09.png\" alt=\"\" width=\"1186\" height=\"1031\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-19-09.png 1186w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-19-09-300x261.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-19-09-1024x890.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-19-09-768x668.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/03\/Screenshot-from-2024-03-28-13-19-09-624x542.png 624w\" sizes=\"(max-width: 1186px) 100vw, 1186px\" \/><\/p>\n<h2><b>Advantage<\/b><\/h2>\n<p><b>Comprehensive Automation Solutions<\/b><\/p>\n<p><a href=\"https:\/\/www.tothenew.com\/solutions\/Prism\">PRISM<\/a> offers a distinct advantage by providing all the essential libraries and code required for automation, obviating the need for test developers to construct entire setups from scratch. This not only saves invaluable time but also enhances productivity by allowing developers to focus on refining test cases and enhancing test coverage.<\/p>\n<p><b>Harnessing Market-Leading Technologies<\/b><\/p>\n<p>One of the key strengths of PRISM lies in its foundation on Selenium and Java, two pillars of automation that enjoy a significant market share. Selenium, renowned for its robustness and versatility in web automation, boasts a staggering 50.79% customer base from the United States, reaffirming its widespread adoption and reliability. Coupled with Java, a language embraced by over 56% of production applications, PRISM leverages these technologies&#8217; collective strength to deliver seamless automation solutions that cater to diverse requirements and scenarios.<\/p>\n<p><b>Simplified Project Management with Maven<\/b><\/p>\n<p>Furthermore, PRISM integrates seamlessly with Maven, serving as a dependency management tool that simplifies project configuration and ensures smooth execution. Maven&#8217;s popularity is evident from its customer base, with 50.48% originating from the United States, underscoring its global appeal and effectiveness in managing project dependencies. With India and the United Kingdom following closely behind, Maven emerges as a cornerstone of automation projects worldwide, facilitating efficient collaboration and project scalability.<\/p>\n<h2>Conclusion<\/h2>\n<p>Adopting <a href=\"https:\/\/www.tothenew.com\/solutions\/Prism\">PRISM<\/a> for automation heralds a new era of efficiency and effectiveness in software testing. By harnessing the strengths of Selenium, Java, and Maven, PRISM empowers test developers to overcome challenges and accelerate the pace of development. As the automation landscape evolves, embracing Prism ensures a competitive edge and enables organizations to stay ahead in a rapidly changing environment.<\/p>\n<div class=\"ap-custom-wrapper\"><\/div><!--ap-custom-wrapper-->","protected":false},"excerpt":{"rendered":"<p>Introduction PRISM stands out as a comprehensive solution worth exploring in the vast landscape of testing frameworks for web, mobile, and APIs.This blog is focused on PRISM&#8217;s web testing framework, meticulously crafted on the robust foundation of the Selenium library, TestNG framework, with Java as the binding language. Leveraging Maven as the dependency management tool [&hellip;]<\/p>\n","protected":false},"author":1757,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":85},"categories":[446,1816],"tags":[5778],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/61099"}],"collection":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/users\/1757"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/comments?post=61099"}],"version-history":[{"count":3,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/61099\/revisions"}],"predecessor-version":[{"id":61154,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/61099\/revisions\/61154"}],"wp:attachment":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/media?parent=61099"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/categories?post=61099"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/tags?post=61099"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}