{"id":4980,"date":"2020-09-23T17:14:57","date_gmt":"2020-09-23T11:44:57","guid":{"rendered":"https:\/\/www.h2kinfosys.com\/blog\/?p=4980"},"modified":"2025-12-05T05:11:41","modified_gmt":"2025-12-05T10:11:41","slug":"handling-of-ajax-call-in-selenium-webdriver","status":"publish","type":"post","link":"https:\/\/www.h2kinfosys.com\/blog\/handling-of-ajax-call-in-selenium-webdriver\/","title":{"rendered":"Handling of AJAX Call in Selenium Webdriver"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>Why Handling of AJAX Call Matters More Than Ever<\/strong><\/h2>\n\n\n\n<p>Web applications behave very differently today than they did a few years ago. Pages no longer reload every time a user clicks something. Instead, websites run small background requests that fetch new data without refreshing the page. These background requests are called <strong>AJAX calls<\/strong>, and companies use them to speed up user experience.<\/p>\n\n\n\n<p>This speed creates new challenges in automation. Selenium testers often click a button and expect the page to load immediately. But AJAX runs behind the scenes, so the page may update after a delay. If tests do not wait for this update, failures happen. This is why Handling of AJAX Call is a must-learn skill for anyone preparing for real-world automation roles or taking a <a href=\"https:\/\/www.h2kinfosys.com\/courses\/selenium-automation-testing-certification-course\/\" data-type=\"link\" data-id=\"https:\/\/www.h2kinfosys.com\/courses\/selenium-automation-testing-certification-course\/\">Selenium certification course<\/a>. In this blog, you will learn everything about Handling of AJAX Call, when to apply it, how to use waits, how to check asynchronous activity, and how to write stable test scripts that work for dynamic applications.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What Is AJAX and Why Is Handling of AJAX Call Essential?<\/strong><\/h2>\n\n\n\n<p>AJAX stands for <strong>Asynchronous JavaScript and XML<\/strong>. It allows websites to update only a part of the page instead of reloading everything.<\/p>\n\n\n\n<p>Examples of AJAX usage include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Loading search results as you type<\/li>\n\n\n\n<li>Updating cart items on e-commerce sites<\/li>\n\n\n\n<li>Displaying notifications without reload<\/li>\n\n\n\n<li>Auto-loading comments on social apps<\/li>\n\n\n\n<li>Dashboard data refresh without a page change<\/li>\n<\/ul>\n\n\n\n<p>When testers automate such applications, the test script often runs faster than the AJAX request. This leads to issues like:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ElementNotInteractableException<\/li>\n\n\n\n<li>NoSuchElementException<\/li>\n\n\n\n<li>StaleElementReferenceException<\/li>\n\n\n\n<li>Incorrect validations<\/li>\n<\/ul>\n\n\n\n<p>To make testing reliable, Selenium professionals rely on <strong>Handling of AJAX Call<\/strong> and <strong>Handling of AJAX Calls<\/strong> with explicit waits, conditions, and smart synchronization.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>How AJAX Impacts Automation Testing<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"536\" src=\"https:\/\/www.h2kinfosys.com\/blog\/wp-content\/uploads\/2020\/09\/What-is-Automation-Testing-1024x536.jpg\" alt=\"Selenium testing\" class=\"wp-image-32504\" title=\"\" srcset=\"https:\/\/www.h2kinfosys.com\/blog\/wp-content\/uploads\/2020\/09\/What-is-Automation-Testing-1024x536.jpg 1024w, https:\/\/www.h2kinfosys.com\/blog\/wp-content\/uploads\/2020\/09\/What-is-Automation-Testing-300x157.jpg 300w, https:\/\/www.h2kinfosys.com\/blog\/wp-content\/uploads\/2020\/09\/What-is-Automation-Testing-768x402.jpg 768w, https:\/\/www.h2kinfosys.com\/blog\/wp-content\/uploads\/2020\/09\/What-is-Automation-Testing-150x79.jpg 150w, https:\/\/www.h2kinfosys.com\/blog\/wp-content\/uploads\/2020\/09\/What-is-Automation-Testing.jpg 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Without the right approach for <strong>Handling of AJAX Call<\/strong>, test scripts fail because Selenium:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Clicks before AJAX updates<\/li>\n\n\n\n<li>Tries to fetch elements before they appear<\/li>\n\n\n\n<li>Reads incorrect values during dynamic updates<\/li>\n<\/ul>\n\n\n\n<p>A study from BrowserStack found that:<br><strong>Over 60% of flaky UI tests are caused by dynamic elements created through AJAX.<\/strong><\/p>\n\n\n\n<p>This confirms why testers taking a <strong>Selenium course online<\/strong> must master <strong>Handling of AJAX Call<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>How Selenium Handles AJAX Calls<\/strong><\/h2>\n\n\n\n<p>Selenium does not wait for AJAX automatically. That means testers must instruct Selenium to wait for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Element visibility<\/li>\n\n\n\n<li>Change in text<\/li>\n\n\n\n<li>Updated DOM structure<\/li>\n\n\n\n<li>Disappearance of loaders<\/li>\n\n\n\n<li>Completion of background tasks<\/li>\n<\/ul>\n\n\n\n<p>The most popular methods used in Handling of AJAX Call include:<\/p>\n\n\n\n<p>&#x2714; Explicit Waits<\/p>\n\n\n\n<p>&#x2714; Fluent Waits<\/p>\n\n\n\n<p>&#x2714; WebDriverWait + ExpectedConditions<\/p>\n\n\n\n<p>&#x2714; JavaScript readyState checks<\/p>\n\n\n\n<p>&#x2714; Wait for jQuery AJAX activity<\/p>\n\n\n\n<p>&#x2714; Custom wait methods for AJAX-heavy pages<\/p>\n\n\n\n<p>Each of these plays a role in Handling of AJAX Calls effectively.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Using Explicit Waits for Handling of AJAX Call<\/strong><\/h2>\n\n\n\n<p>Explicit waits tell Selenium:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u201cWait until a certain condition happens.\u201d<\/p>\n<\/blockquote>\n\n\n\n<p>Example: Wait until an element is visible after an AJAX update.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(15));\nwait.until(ExpectedConditions.visibilityOfElementLocated(By.id(\"result\")));\n<\/pre>\n\n\n\n<p>This simple code stabilizes many scripts that depend on <strong>Handling of AJAX Call<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Using Fluent Wait for Complex AJAX Behavior<\/strong><\/h2>\n\n\n\n<p>Fluent Wait is useful when AJAX calls vary in response time.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Wait&lt;WebDriver&gt; wait = new FluentWait&lt;&gt;(driver)\n        .withTimeout(Duration.ofSeconds(20))\n        .pollingEvery(Duration.ofMillis(500))\n        .ignoring(NoSuchElementException.class);\n<\/pre>\n\n\n\n<p>Fluent Wait allows custom polling, which is helpful when Handling of AJAX Calls that behave inconsistently.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Waiting for jQuery AJAX Calls to Finish<\/strong><\/h2>\n\n\n\n<p>Many modern websites use jQuery to trigger AJAX requests. This makes <strong>Handling of AJAX Call<\/strong> easier because jQuery exposes its active request count.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public void waitForJQueryLoad() {\n    JavascriptExecutor js = (JavascriptExecutor) driver;\n    WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(20));\n\n    wait.until(driver -&gt; (Boolean) js.executeScript(\"return jQuery.active == 0\"));\n}\n<\/pre>\n\n\n\n<p>If jQuery.active returns 0, AJAX is done.<br>This method is extremely powerful for Handling of AJAX Calls in real-time apps.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Using JavaScript readyState for AJAX Synchronization<\/strong><\/h2>\n\n\n\n<p>Some pages use native JavaScript instead of jQuery. In such cases, <strong>Handling of AJAX Call<\/strong> requires checking the browser&#8217;s readyState.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public void waitForJSLoad() {\n    JavascriptExecutor js = (JavascriptExecutor) driver;\n    WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(20));\n\n    wait.until(driver -&gt; js.executeScript(\"return document.readyState\").toString().equals(\"complete\"));\n}\n<\/pre>\n\n\n\n<p>This helps ensure DOM updates before interacting with elements.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Using Custom ExpectedConditions for Handling of AJAX Calls<\/strong><\/h2>\n\n\n\n<p>Sometimes neither jQuery nor readyState is enough.<br>For such cases, testers write custom ExpectedConditions.<\/p>\n\n\n\n<p>Example: Wait until a list updates after an AJAX call.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public ExpectedCondition&lt;Boolean&gt; listUpdated(By locator, int oldSize) {\n    return driver -&gt; driver.findElements(locator).size() &gt; oldSize;\n}\n<\/pre>\n\n\n\n<p>This is one of the advanced techniques for effective <strong>Handling of AJAX Calls<\/strong> in Selenium.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>How to Identify AJAX Elements Before Automating<\/strong><\/h2>\n\n\n\n<p>To apply the correct approach for <strong>Handling of AJAX Call<\/strong>, testers must detect AJAX behavior by:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">&#x2714; Opening Developer Tools \u2192 Network tab<\/h3>\n\n\n\n<p>Look for &#8220;XHR&#8221; or &#8220;Fetch&#8221; requests after clicking a button.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">&#x2714; Observing delays in page updates<\/h3>\n\n\n\n<p>If text updates without reload \u2192 AJAX is involved.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">&#x2714; Checking page source<\/h3>\n\n\n\n<p>AJAX apps often contain:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>fetch()<\/li>\n\n\n\n<li>XMLHttpRequest<\/li>\n\n\n\n<li>$.ajax<\/li>\n\n\n\n<li>axios<\/li>\n<\/ul>\n\n\n\n<p>Identifying AJAX ahead of time ensures proper strategy for <strong>Handling of AJAX Calls<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Real-World Example: Handling of AJAX Call in an E-Commerce Cart<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"900\" height=\"500\" src=\"https:\/\/www.h2kinfosys.com\/blog\/wp-content\/uploads\/2020\/09\/topindustrialarsolutions.jpg\" alt=\"Selenium testing\" class=\"wp-image-32509\" title=\"\" srcset=\"https:\/\/www.h2kinfosys.com\/blog\/wp-content\/uploads\/2020\/09\/topindustrialarsolutions.jpg 900w, https:\/\/www.h2kinfosys.com\/blog\/wp-content\/uploads\/2020\/09\/topindustrialarsolutions-300x167.jpg 300w, https:\/\/www.h2kinfosys.com\/blog\/wp-content\/uploads\/2020\/09\/topindustrialarsolutions-768x427.jpg 768w, https:\/\/www.h2kinfosys.com\/blog\/wp-content\/uploads\/2020\/09\/topindustrialarsolutions-150x83.jpg 150w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/figure>\n\n\n\n<p>Let us imagine a cart system where clicking \u201cAdd to Cart\u201d triggers an AJAX update.<\/p>\n\n\n\n<p>Challenges:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cart counter updates after delay<\/li>\n\n\n\n<li>Cart preview loads dynamically<\/li>\n\n\n\n<li>Button state changes<\/li>\n\n\n\n<li>Backend confirmation returns asynchronously<\/li>\n<\/ul>\n\n\n\n<p>Correct Handling of AJAX Call:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">driver.findElement(By.id(\"add-to-cart\")).click();\n\nWebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(20));\nwait.until(ExpectedConditions.textToBePresentInElementLocated(\n        By.id(\"cart-count\"), \"1\"\n));\n<\/pre>\n\n\n\n<p>This ensures the test validates the updated count after AJAX completes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Handling of AJAX Calls in Data-Driven Applications<\/strong><\/h2>\n\n\n\n<p>Many enterprise systems use AJAX to populate:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Dropdowns<\/li>\n\n\n\n<li>Reports<\/li>\n\n\n\n<li>Dashboards<\/li>\n\n\n\n<li>Search results<\/li>\n\n\n\n<li>Filters<\/li>\n<\/ul>\n\n\n\n<p>For example, when selecting a country triggers state dropdown update, Handling of AJAX Calls becomes essential.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>selectCountry(\"USA\");\nwaitForJQueryLoad();\nselectState(\"California\");\n<\/code><\/pre>\n\n\n\n<p>This improves the accuracy of UI-driven validation tests.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Handling of AJAX Call in Single Page Applications (SPAs)<\/strong><\/h2>\n\n\n\n<p>React, Angular, and Vue apps depend heavily on AJAX.<br>SPAs update DOM fragments rapidly, and Selenium beginners often struggle.<\/p>\n\n\n\n<p>Key tips for Handling of AJAX in SPAs:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Always wait for loader indicators<\/li>\n\n\n\n<li>Use custom conditions for component rendering<\/li>\n\n\n\n<li>Avoid fixed Thread.sleep()<\/li>\n\n\n\n<li>Use conditional waits for dynamic sections<\/li>\n<\/ul>\n\n\n\n<p>Handling of AJAX Call becomes a core skill for testers working with modern <a href=\"https:\/\/www.h2kinfosys.com\/blog\/what-is-javascript\/\" data-type=\"link\" data-id=\"https:\/\/www.h2kinfosys.com\/blog\/what-is-javascript\/\">JavaScript<\/a> frameworks.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>AJAX Testing Challenges and How to Solve Them<\/strong><\/h2>\n\n\n\n<p>Common issues:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stale element exceptions<\/h3>\n\n\n\n<p>Because DOM updates quickly.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Element not visible<\/h3>\n\n\n\n<p>Because AJAX loads it late.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Wrong assertion<\/h3>\n\n\n\n<p>Because data refreshes after validation.<\/p>\n\n\n\n<p>Solutions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use WebDriverWait<\/li>\n\n\n\n<li>Wait for visibility or clickability<\/li>\n\n\n\n<li>Monitor <a href=\"https:\/\/en.wikipedia.org\/wiki\/JQuery\" data-type=\"link\" data-id=\"https:\/\/en.wikipedia.org\/wiki\/JQuery\" rel=\"nofollow noopener\" target=\"_blank\">jQuery<\/a>.active<\/li>\n\n\n\n<li>Use retry mechanisms<\/li>\n\n\n\n<li>Use Fluent Wait for unstable environments<\/li>\n<\/ul>\n\n\n\n<p>This improves Handling of AJAX Calls in unpredictable apps.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Why Companies Prefer Testers Skilled in Handling of AJAX Call<\/strong><\/h2>\n\n\n\n<p>A recent survey found:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"725\" height=\"408\" src=\"https:\/\/www.h2kinfosys.com\/blog\/wp-content\/uploads\/2020\/09\/1733975530456.jpg\" alt=\"Selenium testing\" class=\"wp-image-32506\" title=\"\" srcset=\"https:\/\/www.h2kinfosys.com\/blog\/wp-content\/uploads\/2020\/09\/1733975530456.jpg 725w, https:\/\/www.h2kinfosys.com\/blog\/wp-content\/uploads\/2020\/09\/1733975530456-300x169.jpg 300w, https:\/\/www.h2kinfosys.com\/blog\/wp-content\/uploads\/2020\/09\/1733975530456-150x84.jpg 150w\" sizes=\"(max-width: 725px) 100vw, 725px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>78% of modern applications use AJAX<\/li>\n\n\n\n<li>68% test failures happen due to timing issues<\/li>\n\n\n\n<li>85% of QA teams prefer testers skilled in dynamic testing<\/li>\n<\/ul>\n\n\n\n<p>This is why it is a core part of every Selenium certification course today.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Best Practices for Handling of AJAX Calls in Selenium<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">&#x2714; Avoid Thread.sleep()<\/h3>\n\n\n\n<p>It slows down tests and causes flakiness.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">&#x2714; Use Explicit Waits<\/h3>\n\n\n\n<p>Most reliable method for Handling of AJAX.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">&#x2714; Use JavaScript Executor<\/h3>\n\n\n\n<p>Ideal when frameworks do not expose AJAX handlers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">&#x2714; Validate after AJAX<\/h3>\n\n\n\n<p>Always assert after waiting, not before.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">&#x2714; Use retry logic<\/h3>\n\n\n\n<p>Helpful for dynamic UI grids.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step-by-Step Tutorial: Handling of AJAX Call in Selenium<\/strong><\/h2>\n\n\n\n<p>Below is a simple hands-on approach you can practice:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 1: Identify AJAX activity<\/strong><\/h3>\n\n\n\n<p>Open DevTools \u2192 Network \u2192 Filter by XHR<br>You will see the AJAX call as soon as you interact with the page.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 2: Perform the action<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>driver.findElement(By.id(\"loadData\")).click();\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 3: Wait for AJAX to finish<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>waitForJQueryLoad();\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 4: Validate updated UI<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">String response = driver.findElement(By.id(\"data\")).getText();\nassertEquals(\"Success\", response);\n<\/pre>\n\n\n\n<p>This is the most common use-case for Handling of AJAX.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p>Mastering Handling of AJAX Call gives testers the power to automate modern web applications with confidence. If you want to learn advanced waits, dynamic testing, and real-time synchronization, join H2K Infosys today.<\/p>\n\n\n\n<p>Start your journey now enroll in our <a href=\"https:\/\/www.h2kinfosys.com\/courses\/selenium-automation-testing-certification-course\/\" data-type=\"link\" data-id=\"https:\/\/www.h2kinfosys.com\/courses\/selenium-automation-testing-certification-course\/\">Selenium course online<\/a> for hands-on training and real-world projects.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Why Handling of AJAX Call Matters More Than Ever Web applications behave very differently today than they did a few years ago. Pages no longer reload every time a user clicks something. Instead, websites run small background requests that fetch new data without refreshing the page. These background requests are called AJAX calls, and companies [&hellip;]<\/p>\n","protected":false},"author":16,"featured_media":6870,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[43],"tags":[1907,1400,156,1399,45,448],"class_list":["post-4980","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-selenium-tutorials","tag-ajax-call","tag-ajax-call-in-selenium-webdriver","tag-automation-testing","tag-handling-of-ajax-call","tag-selenium","tag-selenium-webdriver"],"_links":{"self":[{"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/posts\/4980","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/comments?post=4980"}],"version-history":[{"count":4,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/posts\/4980\/revisions"}],"predecessor-version":[{"id":32510,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/posts\/4980\/revisions\/32510"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/media\/6870"}],"wp:attachment":[{"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/media?parent=4980"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/categories?post=4980"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/tags?post=4980"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}