{"id":1846,"date":"2012-10-31T17:48:13","date_gmt":"2012-10-31T12:18:13","guid":{"rendered":"http:\/\/www.automationrepository.com\/?p=1846"},"modified":"2012-11-21T19:03:49","modified_gmt":"2012-11-21T13:33:49","slug":"desigining-keyword-driven-framework-mapped-at-functional-level-part-1","status":"publish","type":"post","link":"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/","title":{"rendered":"Designing Keyword Driven Framework mapped at Functional Level &#8211; Part 1"},"content":{"rendered":"<div style=\"text-align: justify; font-family: Verdana;\">\n<p>In the previous two articles we saw how to create a <a title=\"Keyword Driven Framework in QTP \u2013 The Basics\" href=\"http:\/\/www.automationrepository.com\/2012\/07\/designing-keyword-driven-framework-in-qtp-with-examples\/\" target=\"_blank\">Keyword Driven Framework<\/a> where the <a title=\"Designing Keyword Driven Framework mapped at Operation Level \u2013 Part 2\" href=\"http:\/\/www.automationrepository.com\/2012\/09\/designing-keyword-driven-framework-mapped-at-operation-level-part-2\/\" target=\"_blank\">keywords are mapped at Operation Level<\/a>. In this article, we will cover a different type of Keyword Driven Framework &#8211; the one where the keywords are mapped at Functional Level.<\/p>\n<p>Keyword Driven Framework mapped at Functional Level is <!--more-->the most commonly used Keyword Driven Framework type. How its actually implemented may vary from project to project. But the basic premise always remains the same &#8211; <strong>&#8220;define keywords and assign them to actions or functions&#8221;.<\/strong><\/p>\n<p>The important point that should be noted in this framework is that the keywords are mapped to a function which will contain more than one line of code. For example, you can have a keyword called &#8216;Login&#8217; that in turn can be mapped to function called fnLogin. Now, this function will contain the few lines of code that will open the application, enter user name and password and then click on Submit button.<\/p>\n<p>This is different from the Keyword Driven Framework implementation mapped at Operational Level, where the keyword is mapped to an action performed at object level. (For more details about the basics of the Keyword Driven Framework, refer &#8211; <a title=\"Keyword Driven Framework in QTP \u2013 The Basics\" href=\"http:\/\/www.automationrepository.com\/2012\/07\/designing-keyword-driven-framework-in-qtp-with-examples\/\" target=\"_blank\"><strong>Basics of Keyword Driven Framework<\/strong><\/a>)<\/p>\n<p><span><br \/>\n<\/span><\/p>\n<h3>Topics that will be covered in this article<\/h3>\n<p><strong>1)<\/strong> The components that are commonly used with this framework.<\/p>\n<p><strong>2)<\/strong> Flow of the test cases in this framework.<\/p>\n<p>Let us see each of these points one by one.<\/p>\n<p><span><br \/>\n<\/span><\/p>\n<h3>Common Components used in Keyword Driven Framework mapped at Functional Level<\/h3>\n<p>Following are the components that are commonly used with this framework &#8211;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" title=\"Components of Keyword Driven Framework\" src=\"https:\/\/www.automationrepository.com\/wordpress\/wp-content\/uploads\/ar\/keyword-driven-framework-4-1.png\" alt=\"Components of Keyword Driven Framework\" width=\"357\" height=\"347\" \/><\/p>\n<p><strong>1)<\/strong> <strong>Test Scripts or Driver Script:<\/strong> As mentioned in the beginning of this article, in this type of framework all the keywords are associated with some functions. So naturally, the entire test case flow would be composed of multiple functions.<\/p>\n<p>For example, consider a test case where the you have to login to Gmail, send an email and then you have to Logout from Gmail. Looking at the test case, you can easily figure out that the test case can be divided into 3 functions &#8211;<\/p>\n<ul>\n<li>fnGmail_Login<\/li>\n<li>fnGmail_SendEmail<\/li>\n<li>fnGmail_Logout<\/li>\n<\/ul>\n<p>Normally what we do is &#8211; create the functions and then save them in the function library.Then we will create a test script where we will call all these functions one after the other. This is what you do in <a title=\"QTP Frameworks : Designing QTP Modular Framework from scratch\" href=\"http:\/\/www.automationrepository.com\/2012\/04\/qtp-framework-tutorial-using-qtp-modular-framework\/\" target=\"_blank\">functional decomposition framework<\/a> also.<\/p>\n<p>But in the keyword driven framework, the keywords, and hence the flow of the test case are actually specified in the excel sheets (refer below image for example). Now, since the flow of the test case is mentioned in excel sheets, the actual test script will not store the test case flow. Hence the test script will not be used the way we do it in other framework types.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" title=\"Test Case Flow - Keyword Driven Framework\" src=\"https:\/\/www.automationrepository.com\/wordpress\/wp-content\/uploads\/ar\/keyword-driven-framework-flow1.PNG\" alt=\"Test Case Flow - Keyword Driven Framework\" width=\"528\" height=\"339\" \/><\/p>\n<p>So in this case, the test script would be used as a driver script whose sole purpose would be to pass the control on to the function library.<\/p>\n<p><em> <\/em><br \/>\n<strong>2) Object Repository:<\/strong> As is the case with all the <a title=\"QTP Framework Tutorials \u2013 Framework Types, Examples &amp; Code Snippets\" href=\"http:\/\/www.automationrepository.com\/2012\/03\/qtp-framework-types-an-introduction\/\" target=\"_blank\">QTP Framework Types<\/a>, you can use the Object Repository to store the properties of the objects and then call the same in the test scripts. You can also use the <a title=\"Descriptive Programming in QTP \u2013 The Complete Guide : Part1\" href=\"http:\/\/www.automationrepository.com\/2012\/03\/descriptive-programming-in-qtp-the-complete-guide-part1\/\" target=\"_blank\">Descriptive Programming<\/a> approach if you wish to skip using the Object Repository. As part of this framework creation, we will be using the Object Repository to store the object properties.<\/p>\n<p><em> <\/em><br \/>\n<strong>3) Function Library:<\/strong> In the Keyword Driven Framework, the operations of the function library can be broadly classified into the following two types &#8211;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" title=\"Function Library Operations - Keyword Driven Framework\" src=\"https:\/\/www.automationrepository.com\/wordpress\/wp-content\/uploads\/ar\/keyword-driven-framework-4-2.png\" alt=\"Function Library Operations - Keyword Driven Framework\" width=\"264\" height=\"193\" \/><\/p>\n<ul>\n<li><span style=\"text-decoration: underline;\">a)<\/span> <span style=\"text-decoration: underline;\">Application Related Flow:<\/span> This is the most common purpose for which the function library is used for in all the framework types. Application flow means that the function library will contain functions that will depict the flow of the test cases. For example, the function library may contain functions such as Login and Logout which are actually a part of the application under test.<\/li>\n<li><span style=\"text-decoration: underline;\">b)<\/span> <span style=\"text-decoration: underline;\">Framework Related Flow:<\/span> This part of the function library deals with the functions that are not directly related to the application as such. These are the functions which are related to the framework. For example, functions such as read keyword from excel. These types of functions are application independent and can be used at all the places where this framework is implemented.<\/li>\n<\/ul>\n<p><strong>NOTE:<\/strong> If you are going to implement your Keyword Driven Framework for different applications, you may want to create two separate function libraries for application related flow and framework related flow. This will help you implement the framework for different applications in a smooth manner.<\/p>\n<p><em> <\/em><br \/>\n<strong>4) Excel Sheets to Store Data:<\/strong> You can use excel sheets to store the data and then use it in your test scripts. You can choose any format for the data sheets as per your requirement. In order to keep things simple, we will be hard-coding the data in the test scripts. Hence we will not be using any data sheets for this framework implementation.<\/p>\n<p><em> <\/em><br \/>\n<strong>5) Excel Sheets to Store Keywords:<\/strong> In this framework, all the keywords (and hence the flow) associated to the test cases will be stored in excel sheets. The way in which the keywords are added in the excel sheets may differ from project to project. Also, together with the keywords, you can add additional details in the excel sheets which would make the flow more readable. For example, you can &#8211;<\/p>\n<ul>\n<li><strong>a) Add description along with the Keywords:<\/strong> This would make the test case flow more readable.<\/li>\n<li><strong>b) Add a Result column together with the Keywords:<\/strong> You can add a Result column next to the Keywords and then you can write a function which would update each keyword as pass or fail when the test script is run. So if a test run fails, you can easily figure out till which point the test case has run and at which place it has failed.<\/li>\n<li><strong>c) Add an execute Column along with the Keywords:<\/strong> If you have Keywords independent of each other, you can add an Execute column along with the Keywords. You can have values as Yes and No in the execute column. You can then write a function which will first check the Execute column and then will execute only those keywords where the value is set as Yes.<\/li>\n<\/ul>\n<p>The below figure depicts how the excel sheet would look like.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" title=\"Sample Excel Sheet with Keywords\" src=\"https:\/\/www.automationrepository.com\/wordpress\/wp-content\/uploads\/ar\/keyword-driven-framework-4-3.png\" alt=\"Sample Excel Sheet with Keywords\" width=\"480\" height=\"206\" \/><\/p>\n<p>As part of this framework, we will be adding only the keywords and the description about them. But you can try the remaining concepts on your own and see how it goes.<\/p>\n<p><span><br \/>\n<\/span><\/p>\n<h3>Flow of the Test Scripts in this Framework<\/h3>\n<p>In this type of Keyword Driven Framework, the flow of the test scripts will be as follows &#8211;<\/p>\n<p><strong>1)<\/strong> The execution of the test cases would start from the QTP Test Script. In this framework, we will create a separate test script for each test case that needs to be automated.<\/p>\n<p><strong>2)<\/strong> The test script will give a call to the function library which contains the code to read the excel sheets containing the keywords. (There will be 2 separate function libraries in the framework. One which handles the framework flow and the other which handles the application flow)<\/p>\n<p><strong>3)<\/strong> The function will read the excel sheet and depending upon the keyword encountered, it will give a call to the function from the &#8216;application related&#8217; function library.<\/p>\n<p><strong>4)<\/strong> This function would perform the required actions on the application and once done, it would return the control back to the calling function.<\/p>\n<p>The below image depicts the above mentioned flow.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" title=\"Keyword Driven Framework Flow\" src=\"https:\/\/www.automationrepository.com\/wordpress\/wp-content\/uploads\/ar\/keyword-driven-framework-4-4.png\" alt=\"Keyword Driven Framework Flow\" width=\"314\" height=\"494\" \/><br \/>\n<span><br \/>\n<\/span><br \/>\nThis was the basic information of Keyword Driven Framework mapped at Functional Level. In the next article, we will cover, in detail, on how to create this framework from scratch and write test cases in this framework.<\/p>\n<p>What are your thoughts about this article? You can let us know your response using the comments section.<\/p>\n<p><span><br \/>\n<\/span><\/p>\n<\/div>\n<div style=\"font-family: Verdana,sans-serif; border: 1px solid #C8B560; padding: 3mm; background: #FFF8C6; text-align: center;\">\n<p><strong>If you enjoyed this article, you can join our blog to get new articles delivered directly in your inbox.<\/strong><\/p>\n<form style=\"text-align: center;\" action=\"http:\/\/feedburner.google.com\/fb\/a\/mailverify\" method=\"post\" onsubmit=\"window.open('http:\/\/feedburner.google.com\/fb\/a\/mailverify?uri=automationrepository\/feeds', 'popupwindow', 'scrollbars=yes,width=550,height=520');return true\" target=\"popupwindow\"><input style=\"width: 160px; height: 20px;\" onfocus=\"if (this.value == 'Enter Your Email Address') {this.value = '';}\" onblur=\"if (this.value == '') {this.value = 'Enter Your Email Address';}\" type=\"text\" value=\"Enter Your Email Address\" \/> <input type=\"hidden\" name=\"uri\" value=\"automationrepository\/feeds\" \/> <input type=\"hidden\" name=\"loc\" value=\"en_US\" \/> <input type=\"submit\" value=\"Join Us\" \/><\/p>\n<p style=\"text-align: justify;\">\n<\/form>\n<\/div>\n<p style=\"border: 1px solid #C38EC7; padding: 3mm; background: #EBDDE2;\"><strong>Visit <a title=\"QTP Frameworks \u2013 An Introduction\" href=\"http:\/\/www.automationrepository.com\/2012\/03\/qtp-framework-types-an-introduction\/\">QTP Frameworks<\/a> Main Page for more articles on QTP Frameworks<\/strong>. You can also visit our <a title=\"QTP Tutorials\" href=\"http:\/\/www.automationrepository.com\/tutorials-for-qtp-beginners\/\" target=\"_blank\">QTP Tutorials<\/a> page for more QTP Tutorials.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the previous two articles we saw how to create a Keyword Driven Framework where the keywords are mapped at Operation Level. In this article, we will cover a different type of Keyword Driven Framework &#8211; the one where the keywords are mapped at Functional Level. Keyword Driven Framework mapped at Functional Level is<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,97],"tags":[101],"class_list":["post-1846","post","type-post","status-publish","format-standard","hentry","category-advanced-concepts","category-qtp-framework","tag-qtp-keyword-driven-framework"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Designing Keyword Driven Framework mapped at Functional Level - Part 1 - XX<\/title>\n<meta name=\"description\" content=\"This article provides information about the basic components and flow of keyword driven framework mapped at functional level.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Anish Pillai\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/\",\"url\":\"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/\",\"name\":\"Designing Keyword Driven Framework mapped at Functional Level - Part 1 - XX\",\"isPartOf\":{\"@id\":\"https:\/\/www.automationrepository.com\/wordpress\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.automationrepository.com\/wordpress\/wp-content\/uploads\/ar\/keyword-driven-framework-4-1.png\",\"datePublished\":\"2012-10-31T12:18:13+00:00\",\"dateModified\":\"2012-11-21T13:33:49+00:00\",\"author\":{\"@id\":\"https:\/\/www.automationrepository.com\/wordpress\/#\/schema\/person\/7a35710e1ce89e5fb481be88fcd6cd20\"},\"description\":\"This article provides information about the basic components and flow of keyword driven framework mapped at functional level.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/#primaryimage\",\"url\":\"https:\/\/www.automationrepository.com\/wordpress\/wp-content\/uploads\/ar\/keyword-driven-framework-4-1.png\",\"contentUrl\":\"https:\/\/www.automationrepository.com\/wordpress\/wp-content\/uploads\/ar\/keyword-driven-framework-4-1.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.automationrepository.com\/wordpress\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Designing Keyword Driven Framework mapped at Functional Level &#8211; Part 1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.automationrepository.com\/wordpress\/#website\",\"url\":\"https:\/\/www.automationrepository.com\/wordpress\/\",\"name\":\"XX\",\"description\":\"\\r\\nasas\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.automationrepository.com\/wordpress\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.automationrepository.com\/wordpress\/#\/schema\/person\/7a35710e1ce89e5fb481be88fcd6cd20\",\"name\":\"Anish Pillai\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.automationrepository.com\/wordpress\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8aa984de2295c3c4078fa48f6ba5d91e7c849b1a27a11dca24c6f11dd673ba14?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8aa984de2295c3c4078fa48f6ba5d91e7c849b1a27a11dca24c6f11dd673ba14?s=96&d=mm&r=g\",\"caption\":\"Anish Pillai\"},\"description\":\"Find more about Anish Pillai on Google+\",\"sameAs\":[\"http:\/\/www.automationrepository.com\"],\"url\":\"https:\/\/www.automationrepository.com\/wordpress\/author\/anish\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Designing Keyword Driven Framework mapped at Functional Level - Part 1 - XX","description":"This article provides information about the basic components and flow of keyword driven framework mapped at functional level.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/","twitter_misc":{"Written by":"Anish Pillai","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/","url":"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/","name":"Designing Keyword Driven Framework mapped at Functional Level - Part 1 - XX","isPartOf":{"@id":"https:\/\/www.automationrepository.com\/wordpress\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/#primaryimage"},"image":{"@id":"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.automationrepository.com\/wordpress\/wp-content\/uploads\/ar\/keyword-driven-framework-4-1.png","datePublished":"2012-10-31T12:18:13+00:00","dateModified":"2012-11-21T13:33:49+00:00","author":{"@id":"https:\/\/www.automationrepository.com\/wordpress\/#\/schema\/person\/7a35710e1ce89e5fb481be88fcd6cd20"},"description":"This article provides information about the basic components and flow of keyword driven framework mapped at functional level.","breadcrumb":{"@id":"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/#primaryimage","url":"https:\/\/www.automationrepository.com\/wordpress\/wp-content\/uploads\/ar\/keyword-driven-framework-4-1.png","contentUrl":"https:\/\/www.automationrepository.com\/wordpress\/wp-content\/uploads\/ar\/keyword-driven-framework-4-1.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.automationrepository.com\/wordpress\/2012\/10\/desigining-keyword-driven-framework-mapped-at-functional-level-part-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.automationrepository.com\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Designing Keyword Driven Framework mapped at Functional Level &#8211; Part 1"}]},{"@type":"WebSite","@id":"https:\/\/www.automationrepository.com\/wordpress\/#website","url":"https:\/\/www.automationrepository.com\/wordpress\/","name":"XX","description":"\r\nasas","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.automationrepository.com\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.automationrepository.com\/wordpress\/#\/schema\/person\/7a35710e1ce89e5fb481be88fcd6cd20","name":"Anish Pillai","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.automationrepository.com\/wordpress\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8aa984de2295c3c4078fa48f6ba5d91e7c849b1a27a11dca24c6f11dd673ba14?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8aa984de2295c3c4078fa48f6ba5d91e7c849b1a27a11dca24c6f11dd673ba14?s=96&d=mm&r=g","caption":"Anish Pillai"},"description":"Find more about Anish Pillai on Google+","sameAs":["http:\/\/www.automationrepository.com"],"url":"https:\/\/www.automationrepository.com\/wordpress\/author\/anish\/"}]}},"_links":{"self":[{"href":"https:\/\/www.automationrepository.com\/wordpress\/wp-json\/wp\/v2\/posts\/1846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.automationrepository.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.automationrepository.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.automationrepository.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.automationrepository.com\/wordpress\/wp-json\/wp\/v2\/comments?post=1846"}],"version-history":[{"count":13,"href":"https:\/\/www.automationrepository.com\/wordpress\/wp-json\/wp\/v2\/posts\/1846\/revisions"}],"predecessor-version":[{"id":1875,"href":"https:\/\/www.automationrepository.com\/wordpress\/wp-json\/wp\/v2\/posts\/1846\/revisions\/1875"}],"wp:attachment":[{"href":"https:\/\/www.automationrepository.com\/wordpress\/wp-json\/wp\/v2\/media?parent=1846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.automationrepository.com\/wordpress\/wp-json\/wp\/v2\/categories?post=1846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.automationrepository.com\/wordpress\/wp-json\/wp\/v2\/tags?post=1846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}