{"id":2928,"date":"2024-08-24T12:39:15","date_gmt":"2024-08-24T11:39:15","guid":{"rendered":"https:\/\/contentlabstudy.com\/soft\/?p=2928"},"modified":"2024-08-24T12:39:15","modified_gmt":"2024-08-24T11:39:15","slug":"e2e-test-frameworks","status":"publish","type":"post","link":"https:\/\/contentlabstudy.com\/soft\/e2e-test-frameworks\/","title":{"rendered":"E2E Test Frameworks"},"content":{"rendered":"\n<p>End-to-end (E2E) testing frameworks are essential for testing the functionality and performance of an application from the user&#8217;s perspective. These frameworks simulate real user scenarios to ensure that the system behaves as expected. Below is a list of popular end-to-end testing frameworks, along with examples, advantages, and disadvantages:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. <strong>Cypress<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Website:<\/strong> <a href=\"https:\/\/www.cypress.io\/\">cypress.io<\/a><\/li>\n\n\n\n<li><strong>Description:<\/strong> Cypress is a JavaScript-based E2E testing framework that runs in the browser. It provides an all-in-one testing solution, including built-in support for assertions, spies, and stubs.<\/li>\n<\/ul>\n\n\n\n<p><strong>Advantages:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fast and reliable due to running directly in the browser.<\/li>\n\n\n\n<li>Easy setup and integration with JavaScript frameworks like React, Angular, and Vue.js.<\/li>\n\n\n\n<li>Excellent documentation and a large community.<\/li>\n\n\n\n<li>Time travel feature allows you to debug by replaying previous tests.<\/li>\n\n\n\n<li>Automatic waiting for DOM elements, meaning no manual waits or sleeps are needed.<\/li>\n<\/ul>\n\n\n\n<p><strong>Disadvantages:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Limited browser support (primarily supports Chrome and Chromium-based browsers).<\/li>\n\n\n\n<li>Can be challenging to use with multiple tabs or windows.<\/li>\n\n\n\n<li>Limited support for non-JavaScript applications.<\/li>\n<\/ul>\n\n\n\n<p><strong>Example:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">javascriptCopy code<code>describe('My First Test', () =&gt; {\n  it('Visits the Cypress website', () =&gt; {\n    cy.visit('https:\/\/example.cypress.io')\n    cy.contains('type').click()\n    cy.url().should('include', '\/commands\/actions')\n    cy.get('.action-email').type('fake@email.com')\n  })\n})\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. <strong>Selenium<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Website:<\/strong> <a href=\"https:\/\/www.selenium.dev\/\">selenium.dev<\/a><\/li>\n\n\n\n<li><strong>Description:<\/strong> Selenium is one of the oldest and most widely used E2E testing frameworks. It supports multiple programming languages (Java, Python, C#, etc.) and can be used to automate browsers for testing purposes.<\/li>\n<\/ul>\n\n\n\n<p><strong>Advantages:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Supports multiple browsers and platforms.<\/li>\n\n\n\n<li>Extensive language support.<\/li>\n\n\n\n<li>Large community and extensive resources.<\/li>\n\n\n\n<li>Can handle complex testing scenarios, including interactions with multiple windows, pop-ups, and iframes.<\/li>\n<\/ul>\n\n\n\n<p><strong>Disadvantages:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Slower execution compared to newer frameworks like Cypress.<\/li>\n\n\n\n<li>Requires more setup and configuration.<\/li>\n\n\n\n<li>Lacks built-in features for handling modern JavaScript applications (requires additional libraries).<\/li>\n<\/ul>\n\n\n\n<p><strong>Example:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">javaCopy code<code>import org.openqa.selenium.WebDriver;\nimport org.openqa.selenium.chrome.ChromeDriver;\nimport org.openqa.selenium.By;\n\npublic class MyFirstTest {\n    public static void main(String[] args) {\n        System.setProperty(\"webdriver.chrome.driver\", \"\/path\/to\/chromedriver\");\n        WebDriver driver = new ChromeDriver();\n        driver.get(\"http:\/\/www.google.com\");\n        driver.findElement(By.name(\"q\")).sendKeys(\"Selenium WebDriver\");\n        driver.findElement(By.name(\"btnK\")).submit();\n        driver.quit();\n    }\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. <strong>Puppeteer<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Website:<\/strong> <a href=\"https:\/\/pptr.dev\/\">pptr.dev<\/a><\/li>\n\n\n\n<li><strong>Description:<\/strong> Puppeteer is a Node.js library that provides a high-level API to control Chrome or Chromium over the DevTools Protocol. It is often used for E2E testing, web scraping, and automated browser testing.<\/li>\n<\/ul>\n\n\n\n<p><strong>Advantages:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tight integration with Chrome and Chromium.<\/li>\n\n\n\n<li>Fast and reliable due to direct control over the browser.<\/li>\n\n\n\n<li>Excellent support for headless browser testing.<\/li>\n\n\n\n<li>Can capture screenshots, generate PDFs, and perform other browser-related tasks easily.<\/li>\n<\/ul>\n\n\n\n<p><strong>Disadvantages:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Only supports Chrome and Chromium.<\/li>\n\n\n\n<li>Limited to JavaScript\/Node.js.<\/li>\n\n\n\n<li>Requires more manual setup compared to all-in-one frameworks like Cypress.<\/li>\n<\/ul>\n\n\n\n<p><strong>Example:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">javascriptCopy code<code>const puppeteer = require('puppeteer');\n\n(async () =&gt; {\n  const browser = await puppeteer.launch();\n  const page = await browser.newPage();\n  await page.goto('https:\/\/example.com');\n  await page.screenshot({ path: 'example.png' });\n\n  await browser.close();\n})();\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. <strong>Playwright<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Website:<\/strong> <a href=\"https:\/\/playwright.dev\/\">playwright.dev<\/a><\/li>\n\n\n\n<li><strong>Description:<\/strong> Playwright is a Node.js library developed by Microsoft that enables reliable E2E testing for modern web applications. It supports multiple browsers, including Chrome, Firefox, and WebKit.<\/li>\n<\/ul>\n\n\n\n<p><strong>Advantages:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cross-browser support (Chromium, Firefox, WebKit).<\/li>\n\n\n\n<li>Powerful API that allows for advanced testing scenarios.<\/li>\n\n\n\n<li>Auto-waiting for elements and actions, reducing the need for manual waits.<\/li>\n\n\n\n<li>Supports testing in multiple tabs, devices, and emulating different network conditions.<\/li>\n<\/ul>\n\n\n\n<p><strong>Disadvantages:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Newer framework with a smaller community compared to Selenium or Cypress.<\/li>\n\n\n\n<li>Limited language support (primarily JavaScript\/TypeScript).<\/li>\n<\/ul>\n\n\n\n<p><strong>Example:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">javascriptCopy code<code>const { chromium } = require('playwright');\n\n(async () =&gt; {\n  const browser = await chromium.launch();\n  const page = await browser.newPage();\n  await page.goto('https:\/\/example.com');\n  await page.screenshot({ path: `example.png` });\n  await browser.close();\n})();\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5. <strong>TestCafe<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Website:<\/strong> <a>testcafe.devexpress.com<\/a><\/li>\n\n\n\n<li><strong>Description:<\/strong> TestCafe is an open-source Node.js tool for testing web applications. It works without browser plugins and supports all modern browsers.<\/li>\n<\/ul>\n\n\n\n<p><strong>Advantages:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Simple setup with no need for browser plugins.<\/li>\n\n\n\n<li>Supports multiple browsers, including mobile devices and cloud services.<\/li>\n\n\n\n<li>Built-in features for handling modern JavaScript frameworks.<\/li>\n\n\n\n<li>Test execution in multiple browsers simultaneously.<\/li>\n<\/ul>\n\n\n\n<p><strong>Disadvantages:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Less customizable compared to other frameworks.<\/li>\n\n\n\n<li>Limited integration with non-JavaScript codebases.<\/li>\n<\/ul>\n\n\n\n<p><strong>Example:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">javascriptCopy code<code>import { Selector } from 'testcafe';\n\nfixture `Getting Started`\n  .page `http:\/\/devexpress.github.io\/testcafe\/example`;\n\ntest('My first test', async t =&gt; {\n  await t\n    .typeText('#developer-name', 'John Smith')\n    .click('#submit-button')\n    .expect(Selector('#article-header').innerText).eql('Thank you, John Smith!');\n});\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">6. <strong>Nightwatch.js<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Website:<\/strong> <a href=\"https:\/\/nightwatchjs.org\/\">nightwatchjs.org<\/a><\/li>\n\n\n\n<li><strong>Description:<\/strong> Nightwatch.js is an integrated, easy-to-use E2E testing framework written in Node.js. It uses the W3C WebDriver API to interact with browsers.<\/li>\n<\/ul>\n\n\n\n<p><strong>Advantages:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Simple and clean syntax for writing tests.<\/li>\n\n\n\n<li>Supports Selenium WebDriver and can be used to test multiple browsers.<\/li>\n\n\n\n<li>Can be integrated with CI\/CD pipelines easily.<\/li>\n\n\n\n<li>Built-in test runner and assertions.<\/li>\n<\/ul>\n\n\n\n<p><strong>Disadvantages:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Slower execution speed compared to Cypress or Puppeteer.<\/li>\n\n\n\n<li>Requires more setup for complex scenarios.<\/li>\n\n\n\n<li>Smaller community compared to Selenium and Cypress.<\/li>\n<\/ul>\n\n\n\n<p><strong>Example:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">javascriptCopy code<code>module.exports = {\n  'Demo test Google' : function (browser) {\n    browser\n      .url('http:\/\/www.google.com')\n      .waitForElementVisible('body', 1000)\n      .setValue('input[type=text]', 'nightwatch')\n      .click('button[name=btnK]')\n      .pause(1000)\n      .assert.containsText('#main', 'Nightwatch.js')\n      .end();\n  }\n};\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Summary of Advantages and Disadvantages:<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>Framework<\/strong><\/th><th><strong>Advantages<\/strong><\/th><th><strong>Disadvantages<\/strong><\/th><\/tr><\/thead><tbody><tr><td><strong>Cypress<\/strong><\/td><td>Fast, built-in features, great documentation, automatic waiting<\/td><td>Limited browser support, limited multi-tab support<\/td><\/tr><tr><td><strong>Selenium<\/strong><\/td><td>Cross-browser, language support, large community<\/td><td>Slower, requires more setup, lacks modern JS app features<\/td><\/tr><tr><td><strong>Puppeteer<\/strong><\/td><td>Fast, tight Chrome integration, headless support<\/td><td>Chrome-only, JavaScript\/Node.js only<\/td><\/tr><tr><td><strong>Playwright<\/strong><\/td><td>Cross-browser, powerful API, auto-waiting<\/td><td>Newer, smaller community, limited language support<\/td><\/tr><tr><td><strong>TestCafe<\/strong><\/td><td>Simple setup, multi-browser, mobile support<\/td><td>Less customizable, limited non-JS integration<\/td><\/tr><tr><td><strong>Nightwatch.js<\/strong><\/td><td>Simple syntax, Selenium support, CI\/CD integration<\/td><td>Slower, more setup needed, smaller community<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>These frameworks offer a range of features tailored to different needs and environments. Choosing the right one depends on your project requirements, the complexity of the application, and the development ecosystem you&#8217;re working with.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">References<\/h3>\n\n\n\n<p>Here are some valuable online resources where you can deepen your knowledge of the popular end-to-end (E2E) testing frameworks mentioned:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. <strong>Cypress<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Official Documentation:<\/strong><a>cypress.io\/docs<\/a>\n<ul class=\"wp-block-list\">\n<li>Comprehensive documentation with tutorials, API references, and guides to help you get started with Cypress and master advanced features.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Cypress Blog:<\/strong><a>cypress.io\/blog<\/a>\n<ul class=\"wp-block-list\">\n<li>Regular blog posts covering new features, best practices, and in-depth tutorials.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Cypress YouTube Channel:<\/strong><a href=\"https:\/\/www.youtube.com\/c\/Cypressio\">Cypress.io on YouTube<\/a>\n<ul class=\"wp-block-list\">\n<li>Video tutorials, webinars, and community talks about Cypress and its ecosystem.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Learning Paths:<\/strong><a>Testing your first application with Cypress<\/a>\n<ul class=\"wp-block-list\">\n<li>A course on TestingJavaScript.com offering hands-on tutorials for Cypress.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. <strong>Selenium<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Official Selenium Documentation:<\/strong><a>selenium.dev\/documentation\/en\/<\/a>\n<ul class=\"wp-block-list\">\n<li>Detailed documentation that includes setup, language bindings, WebDriver API, and more.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>SeleniumHQ GitHub Repository:<\/strong><a href=\"https:\/\/github.com\/SeleniumHQ\/selenium\">github.com\/SeleniumHQ\/selenium<\/a>\n<ul class=\"wp-block-list\">\n<li>Access the source code, issues, and contributions to stay up-to-date with Selenium developments.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Selenium Blog:<\/strong><a>selenium.dev\/blog\/<\/a>\n<ul class=\"wp-block-list\">\n<li>Updates on Selenium, new releases, and community stories.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Selenium WebDriver with Java &#8211; Udemy Course:<\/strong><a>Selenium WebDriver with Java<\/a>\n<ul class=\"wp-block-list\">\n<li>A popular course for learning Selenium WebDriver with Java, including real-time examples.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3. <strong>Puppeteer<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Official Puppeteer Documentation:<\/strong><a href=\"https:\/\/pptr.dev\/\">pptr.dev<\/a>\n<ul class=\"wp-block-list\">\n<li>The official documentation is the best place to start learning Puppeteer with detailed API references and examples.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Puppeteer GitHub Repository:<\/strong><a href=\"https:\/\/github.com\/puppeteer\/puppeteer\">github.com\/puppeteer\/puppeteer<\/a>\n<ul class=\"wp-block-list\">\n<li>Access the Puppeteer source code, issues, and community contributions.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Google Chrome Developers Blog:<\/strong><a>developers.google.com\/web\/tools\/puppeteer<\/a>\n<ul class=\"wp-block-list\">\n<li>Tutorials and articles by Google developers covering Puppeteer use cases.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>FreeCodeCamp Puppeteer Tutorial:<\/strong><a>A Beginner\u2019s Guide to Puppeteer<\/a>\n<ul class=\"wp-block-list\">\n<li>A comprehensive guide to getting started with Puppeteer.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4. <strong>Playwright<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Official Playwright Documentation:<\/strong><a>playwright.dev\/docs\/intro<\/a>\n<ul class=\"wp-block-list\">\n<li>Detailed documentation covering setup, API references, and best practices.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Playwright GitHub Repository:<\/strong><a href=\"https:\/\/github.com\/microsoft\/playwright\">github.com\/microsoft\/playwright<\/a>\n<ul class=\"wp-block-list\">\n<li>Source code, issues, and community contributions to Playwright.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Microsoft Playwright Blog:<\/strong><a>playwright.dev\/blog<\/a>\n<ul class=\"wp-block-list\">\n<li>Updates, tutorials, and announcements about Playwright.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Playwright Testing with JavaScript &#8211; Udemy Course:<\/strong><a>Playwright Testing<\/a>\n<ul class=\"wp-block-list\">\n<li>A Udemy course that covers Playwright with JavaScript for web automation testing.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">5. <strong>TestCafe<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Official TestCafe Documentation:<\/strong><a>testcafe.io\/documentation<\/a>\n<ul class=\"wp-block-list\">\n<li>Comprehensive documentation covering installation, usage, API references, and examples.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>TestCafe GitHub Repository:<\/strong><a href=\"https:\/\/github.com\/DevExpress\/testcafe\">github.com\/DevExpress\/testcafe<\/a>\n<ul class=\"wp-block-list\">\n<li>Access to TestCafe\u2019s source code, issues, and contribution guidelines.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>TestCafe Blog:<\/strong><a>TestCafe Blog<\/a>\n<ul class=\"wp-block-list\">\n<li>Articles, release notes, and updates related to TestCafe.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>TestCafe Tutorial on Medium:<\/strong><a>Complete Guide to TestCafe<\/a>\n<ul class=\"wp-block-list\">\n<li>A step-by-step guide to using TestCafe for E2E testing.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6. <strong>Nightwatch.js<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Official Nightwatch.js Documentation:<\/strong><a>nightwatchjs.org\/gettingstarted\/<\/a>\n<ul class=\"wp-block-list\">\n<li>The official documentation provides getting started guides, API references, and tutorials.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Nightwatch.js GitHub Repository:<\/strong><a href=\"https:\/\/github.com\/nightwatchjs\/nightwatch\">github.com\/nightwatchjs\/nightwatch<\/a>\n<ul class=\"wp-block-list\">\n<li>Source code, issues, and contributions related to Nightwatch.js.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Nightwatch.js Blog:<\/strong><a>nightwatchjs.org\/blog\/<\/a>\n<ul class=\"wp-block-list\">\n<li>Regular updates, tutorials, and news related to Nightwatch.js.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Nightwatch.js Guide on SitePoint:<\/strong><a>Automated Testing with Nightwatch.js<\/a>\n<ul class=\"wp-block-list\">\n<li>A detailed guide for beginners on setting up and using Nightwatch.js for automated testing.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Additional Resources:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Testing JavaScript by Kent C. Dodds:<\/strong><a href=\"https:\/\/testingjavascript.com\/\">testingjavascript.com<\/a>\n<ul class=\"wp-block-list\">\n<li>A comprehensive course that covers various testing techniques, including E2E testing with Cypress and more.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Software Testing Help:<\/strong><a href=\"https:\/\/www.softwaretestinghelp.com\/\">softwaretestinghelp.com<\/a>\n<ul class=\"wp-block-list\">\n<li>Articles, tutorials, and reviews of various testing tools and frameworks, including E2E testing frameworks.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>These resources offer a mix of official documentation, community-driven content, tutorials, and in-depth courses that will help you become proficient in using these E2E testing frameworks.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>End-to-end (E2E) testing frameworks are essential for testing the functionality and performance of an application from the user&#8217;s perspective. These frameworks simulate real user scenarios to ensure that the system behaves as expected. Below is a list of popular end-to-end testing frameworks, along with examples, advantages, and disadvantages: 1. Cypress Advantages: Disadvantages: Example: javascriptCopy codedescribe(&#8216;My [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-2928","post","type-post","status-publish","format-standard","hentry","category-quality-assurance"],"_links":{"self":[{"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/posts\/2928","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/comments?post=2928"}],"version-history":[{"count":1,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/posts\/2928\/revisions"}],"predecessor-version":[{"id":2929,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/posts\/2928\/revisions\/2929"}],"wp:attachment":[{"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/media?parent=2928"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/categories?post=2928"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/tags?post=2928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}