{"id":84335,"date":"2025-07-30T11:43:37","date_gmt":"2025-07-30T06:13:37","guid":{"rendered":"https:\/\/www.guvi.in\/blog\/?p=84335"},"modified":"2026-09-23T12:45:27","modified_gmt":"2026-09-23T07:15:27","slug":"page-object-model-pom-design-pattern","status":"publish","type":"post","link":"https:\/\/www.guvi.in\/blog\/page-object-model-pom-design-pattern\/","title":{"rendered":"Page Object Model (POM) Design Pattern with Python Selenium: A Complete Guide"},"content":{"rendered":"\n<p>Selenium tests often turn messy as projects grow. The Page Object Model fixes this by separating page logic from test logic. Each web page gets its own class, which holds the locators and actions for that page. Tests become shorter, cleaner, and easier to read.<\/p>\n\n\n\n<p>Large test suites break easily when a single button ID changes. Teams end up fixing the same locator in ten different files. POM solves this problem by keeping all page details in one place, so a small UI change needs only one update.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Quick Answer:<\/strong><\/p>\n\n\n\n<p>The<strong> Page Object Model<\/strong> is a design pattern that keeps web page details separate from test code. Each page in your app gets its own class, and that class stores the locators and actions needed to interact with that page. <\/p>\n\n\n\n<p>Your test scripts then simply call these methods instead of dealing with raw locators directly. This makes your Selenium tests shorter, easier to read, and much simpler to fix when the UI changes.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What is Page Object Model (POM)?<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1200\" height=\"630\" src=\"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/01@2x-2-1200x630.png\" alt=\"What is Page Object Model (POM)?\" class=\"wp-image-85114\" srcset=\"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/01@2x-2-1200x630.png 1200w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/01@2x-2-300x158.png 300w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/01@2x-2-768x403.png 768w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/01@2x-2-1536x806.png 1536w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/01@2x-2-2048x1075.png 2048w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/01@2x-2-150x79.png 150w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" title=\"\"><\/figure>\n\n\n\n<p><a href=\"https:\/\/www.guvi.in\/blog\/python-selenium-page-object-model-explained\/\" target=\"_blank\" rel=\"noreferrer noopener\">Page Object Model (POM)<\/a> is a design pattern that creates an object repository for web <a href=\"https:\/\/www.guvi.in\/blog\/what-is-user-interface\/\" target=\"_blank\" rel=\"noreferrer noopener\">UI<\/a> elements. Each web page is represented as a <strong>class<\/strong>, and its elements are defined as <strong>variables<\/strong>. All possible interactions (like click, input, and get text) are implemented as <strong>methods<\/strong> within that class.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Key Benefits of POM:<\/strong><\/h3>\n\n\n\n<ul>\n<li><strong>Separation of Concerns<\/strong>: Keeps locators and actions separate from test logic.<br><\/li>\n\n\n\n<li><strong>Improved Maintainability<\/strong>: Update locators in one place.<br><\/li>\n\n\n\n<li><strong>Code Reusability<\/strong>: Reuse common actions across tests.<br><\/li>\n\n\n\n<li><strong>Better Readability<\/strong>: Tests are more readable and closer to business logic.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p><strong><em>Ready to automate real web apps? HCL GUVI&#8217;s <\/em><\/strong><em><a href=\"https:\/\/www.guvi.in\/courses\/software-testing-and-automation\/selenium-for-beginners\/?utm_source=blog&amp;utm_medium=hyperlink&amp;utm_campaign=page-object-model-pom-design-pattern\" target=\"_blank\" rel=\"noreferrer noopener\">Selenium Automation Testing for Beginners Course<\/a><\/em><strong><em> teaches WebDriver, locators, and hands-on testing from scratch, with a certificate to boost your resume. Enroll now!<\/em><\/strong><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Folder Structure for POM&nbsp;<\/strong><\/h2>\n\n\n\n<p>A clean directory structure is crucial for POM. Here&#8217;s a typical structure:<\/p>\n\n\n\n<p>\ud83d\udce6 project-root\/<\/p>\n\n\n\n<p>\u251c\u2500\u2500 \ud83d\udcc1 <strong>tests\/<\/strong><\/p>\n\n\n\n<p>\u2502<strong> &nbsp; <\/strong>\u251c\u2500\u2500 \ud83d\udcdd __ init __.py &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Empty init file<\/p>\n\n\n\n<p>\u2502 &nbsp; \u2514\u2500\u2500 \ud83d\udcdd test_login.py&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Test cases using Page Objects<\/p>\n\n\n\n<p>\u2502<\/p>\n\n\n\n<p>\u251c\u2500\u2500 \ud83d\udcc1 <strong>pages\/<\/strong><\/p>\n\n\n\n<p>\u2502<strong> &nbsp; <\/strong>\u251c\u2500\u2500 \ud83d\udcdd __ init __.py &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Empty init file<\/p>\n\n\n\n<p>\u2502 &nbsp; \u251c\u2500\u2500 \ud83d\udcdd login_page.py&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Page Object for Login Page<\/p>\n\n\n\n<p>\u2502 &nbsp; \u2514\u2500\u2500 \ud83d\udcdd home_page.py &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Page Object for Home Page<\/p>\n\n\n\n<p>\u2502<\/p>\n\n\n\n<p>\u251c\u2500\u2500 \ud83d\udcc1<strong> utils\/<\/strong><\/p>\n\n\n\n<p>\u2502<strong> &nbsp; <\/strong>\u251c\u2500\u2500 \ud83d\udcdd __ init __.py &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Empty init file<\/p>\n\n\n\n<p>\u2502 &nbsp; \u251c\u2500\u2500 \ud83d\udcdd driver_factory.py &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Browser driver setup &amp; teardown<\/p>\n\n\n\n<p>\u2502 &nbsp; \u2514\u2500\u2500 \ud83d\udcdd config.py &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Configurations (URLs, credentials)<\/p>\n\n\n\n<p>\u2502<\/p>\n\n\n\n<p>\u251c\u2500\u2500 \ud83d\udcc1 <strong>reports\/<\/strong><\/p>\n\n\n\n<p>\u2502 &nbsp; \u251c\u2500\u2500 \ud83d\udcc1 pytest_html\/&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # HTML report results<\/p>\n\n\n\n<p>\u2502 &nbsp; \u2514\u2500\u2500 \ud83d\udcc1 screenshots\/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Screenshots for failed tests<\/p>\n\n\n\n<p>\u2502<\/p>\n\n\n\n<p>\u2514\u2500\u2500 \ud83d\udcdd requirements.txt &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Python dependencies<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><strong><em>Want to build real software, not just study it? HCL GUVI&#8217;s <\/em><\/strong><em><a href=\"https:\/\/www.guvi.in\/zen-class\/full-stack-development-course\/?utm_source=blog&amp;utm_medium=hyperlink&amp;utm_campaign=page-object-model-pom-design-pattern\" target=\"_blank\" rel=\"noreferrer noopener\">Software and AI Engineer Programme<\/a><\/em><strong><em> trains you in full-stack or backend engineering, AI-assisted workflows, and live projects, with mentorship and placement support. Enroll now and start building your career today!<\/em><\/strong><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Implementing POM in Python Selenium<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1200\" height=\"630\" src=\"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/02@2x-2-1200x630.png\" alt=\"Implementing POM in Python Selenium\" class=\"wp-image-85115\" srcset=\"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/02@2x-2-1200x630.png 1200w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/02@2x-2-300x158.png 300w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/02@2x-2-768x403.png 768w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/02@2x-2-1536x806.png 1536w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/02@2x-2-2048x1075.png 2048w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/02@2x-2-150x79.png 150w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" title=\"\"><\/figure>\n\n\n\n<p>Let\u2019s walk through an example of automating <strong>Amazon Login<\/strong> using POM.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 1: Install Required Packages<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code><code>pip install selenium pytest<\/code><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 2: Driver Setup (driver_factory.py)<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>from selenium import webdriver\n\nclass DriverFactory:\n\n&nbsp;&nbsp;&nbsp;&nbsp;@staticmethod\n\n&nbsp;&nbsp;&nbsp;&nbsp;def get_driver():\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;driver = webdriver.Chrome()\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;driver.maximize_window()\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;driver.implicitly_wait(10)\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return driver<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 3: Create Page Classes<\/strong><\/h3>\n\n\n\n<p><strong>login_page.py<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from selenium.webdriver.common.by import By\n\nclass LoginPage:\n\n&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self, driver):\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.driver = driver\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.sign_in_link = (By.ID, \"nav-link-accountList\")\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.email_field = (By.ID, \"ap_email\")\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.continue_button = (By.ID, \"continue\")\n\n&nbsp;&nbsp;&nbsp;&nbsp;def click_sign_in(self):\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.driver.find_element(*self.sign_in_link).click()\n\n&nbsp;&nbsp;&nbsp;&nbsp;def enter_email(self, email):\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.driver.find_element(*self.email_field).send_keys(email)\n\n&nbsp;&nbsp;&nbsp;&nbsp;def click_continue(self):\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.driver.find_element(*self.continue_button).click()<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 4: Write Test Script (test_login.py)<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>import pytest\n\nfrom pages.login_page import LoginPage\n\nfrom utils.driver_factory import DriverFactory\n\nclass TestLogin:\n\n&nbsp;&nbsp;&nbsp;&nbsp;def setup_method(self):\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.driver = DriverFactory.get_driver()\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.driver.get(\"https:\/\/www.amazon.com\")\n\n&nbsp;&nbsp;&nbsp;&nbsp;def teardown_method(self):\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.driver.quit()\n\n&nbsp;&nbsp;&nbsp;&nbsp;def test_login_with_valid_email(self):\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;login_page = LoginPage(self.driver)\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;login_page.click_sign_in()\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;login_page.enter_email(\"testuser@example.com\")\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;login_page.click_continue()\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assert \"Authentication\" in self.driver.title&nbsp; # Example assertion<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 5: Running the Tests<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code><code>pytest tests\/test_login.py<\/code><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 6: Advanced Enhancements<\/strong><\/h3>\n\n\n\n<ul>\n<li><strong>BasePage Class<\/strong>: For common actions like click(), send_keys(), get_text().<br><\/li>\n\n\n\n<li><strong>PageFactory Pattern<\/strong>: To lazily initialize web elements.<br><\/li>\n\n\n\n<li><strong>Logging &amp; Reporting<\/strong>: Integrate <a href=\"https:\/\/pytest-html.readthedocs.io\/en\/latest\/user_guide.html\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Pytest HTML Reports.<\/a><br><\/li>\n\n\n\n<li><strong>Environment Config<\/strong>: Manage URLs, credentials via config files.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Also Read: <\/strong><em><a href=\"https:\/\/www.guvi.in\/blog\/selenium-framework-explained\/\" target=\"_blank\" rel=\"noreferrer noopener\">Selenium Framework Explained<\/a><\/em><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Best Practices for POM in Python Selenium<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1200\" height=\"630\" src=\"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/03@2x-1-1200x630.png\" alt=\"Best Practices for POM in Python Selenium\" class=\"wp-image-85117\" srcset=\"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/03@2x-1-1200x630.png 1200w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/03@2x-1-300x158.png 300w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/03@2x-1-768x403.png 768w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/03@2x-1-1536x806.png 1536w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/03@2x-1-2048x1075.png 2048w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/08\/03@2x-1-150x79.png 150w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" title=\"\"><\/figure>\n\n\n\n<p>Here are the best practices to follow when using the Page Object Model in your Selenium test suite:<\/p>\n\n\n\n<p><strong>1. Follow SRP (Single Responsibility Principle)<\/strong><br>Each page class should only handle one page. Mixing multiple pages in one class makes the code hard to maintain and confusing to debug.<\/p>\n\n\n\n<p><strong>2. Avoid Hardcoding Locators and Data<\/strong><br>Locators and test data should live outside the test logic, in variables, config files, or separate objects. This makes updates fast when the UI or data changes.<\/p>\n\n\n\n<p><strong>3. Implement Proper Waits Instead of time.sleep()<\/strong><br>Fixed sleep times slow down tests and still fail when the page loads faster or slower than expected. Explicit or fluent waits check for actual page conditions, so tests stay fast and stable.<\/p>\n\n\n\n<p><strong>4. Modularize Common Utilities<\/strong><br>Put driver setup, wait functions, and screenshot capture in shared utility files. This avoids duplicate code and keeps every page object clean.<\/p>\n\n\n\n<p><strong>5. Keep Test Assertions in Test Scripts, Not in Page Objects<\/strong><br>Page objects should only perform actions and return data. Assertions belong in the test file, since that keeps validation logic separate from page interaction logic.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p>Page Object Model turns messy Selenium scripts into clean, organized code that scales with your project. Once you build a few page classes and see how much easier maintenance becomes, going back to plain scripts feels impossible. A single locator change no longer means hunting through dozens of files, and new team members can read the tests without confusion.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>FAQs<\/strong><\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1790146515252\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">1. What is Page Object Model in Selenium?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Page Object Model is a design pattern that separates web page elements and actions from test scripts. Each page becomes its own class, making tests cleaner and easier to maintain.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1790146535176\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">2. Why should I use the Page Object Model instead of writing plain Selenium scripts?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Plain scripts repeat the same locators everywhere, so one UI change breaks many tests. Page Object Model keeps locators in one class, so updates take minutes, not hours.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1790146538945\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">3. Is the Page Object Model only for Python Selenium, or does it work with other languages?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>The pattern works with Java, C#, JavaScript, and more. The core idea, separating page logic from test logic, stays the same across every language.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1790146574706\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">4. Do I need Page Factory to implement POM in Python?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>No. Page Factory is a Java-specific feature. In Python, you implement the same idea using plain classes, locators, and methods, as shown in this guide.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1790146589069\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">5. Can beginners learn Page Object Model easily?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Yes. If you know basic Python and Selenium, you can start using this pattern right away. Small projects are the best way to practice it.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Selenium tests often turn messy as projects grow. The Page Object Model fixes this by separating page logic from test logic. Each web page gets its own class, which holds the locators and actions for that page. Tests become shorter, cleaner, and easier to read. Large test suites break easily when a single button ID [&hellip;]<\/p>\n","protected":false},"author":64,"featured_media":85113,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[40,706],"tags":[],"views":"4653","authorinfo":{"name":"Abhishek Pati","url":"https:\/\/www.guvi.in\/blog\/author\/abhishek-pati\/"},"thumbnailURL":"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/07\/Page-Object-Model-POM-Design-Pattern-with-Python-Selenium_-300x116.png","_links":{"self":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/84335"}],"collection":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/users\/64"}],"replies":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/comments?post=84335"}],"version-history":[{"count":11,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/84335\/revisions"}],"predecessor-version":[{"id":140263,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/84335\/revisions\/140263"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/media\/85113"}],"wp:attachment":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/media?parent=84335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/categories?post=84335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/tags?post=84335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}