{"id":105623,"date":"2020-07-11T07:00:35","date_gmt":"2020-07-11T04:00:35","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=105623"},"modified":"2020-06-24T10:43:36","modified_gmt":"2020-06-24T07:43:36","slug":"protractor-tutorial-handling-timeouts-with-selenium","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html","title":{"rendered":"Protractor Tutorial: Handling Timeouts With Selenium"},"content":{"rendered":"<p>A lot of times while performing <a href=\"https:\/\/www.lambdatest.com\/selenium-automation\" target=\"_blank\" rel=\"noopener noreferrer\">Selenium test automation<\/a>, you\u2019ll come across certain scenarios when your test fails due to the fact that the webpage or the web element takes some time to load completely. In such scenarios, the best approach is to wait for the page or the web elements to load completely in order to avoid any errors due to timeout. These errors can be easily resolved if you know how to handle timeouts in Protractor with Selenium, as they help to set an interval of time before the next action is carried out.<\/p>\n<p>To make it even simpler let\u2019s say you visit Amazon\u2019s website, you find a special deals button, you click on it and it brings out a popup with the offer, which further takes you to the deals page. These different elements like the button and pop-up takes some time to load and become interactive. But when we run our test scripts without any instruction to wait, it\u2019ll end up throwing an error. To deal with this, we need to handle timeouts in Protractor with Selenium so that we give ample amount of time for the particular element to load.<\/p>\n<p>So, in order to help you tackle this problem, I\u2019ll show you how to handle timeouts in this Protractor tutorial. If you\u2019re new to Protractor you can visit this Protractor tutorial on <a href=\"https:\/\/www.lambdatest.com\/blog\/automated-cross-browser-testing-with-protractor-selenium\/\" target=\"_blank\" rel=\"noopener noreferrer\">running your first test script for Protractor testing<\/a>.<\/p>\n<h2 class=\"wp-block-heading\">Timeout While Waiting For The Page To Load<\/h2>\n<p>While performing Selenium test automation to navigate a page on the browser, you\u2019ll instruct the <a href=\"https:\/\/www.lambdatest.com\/selenium\" target=\"_blank\" rel=\"noopener noreferrer\">Selenium WebDriver<\/a> to load the web page using the browser.get() command. Under the hood, the Protractor framework waits for the page to load completely.<\/p>\n<p>So let\u2019s take a test case to handle timeouts in Selenium Protractor, where we set the timeout as 5000 ms or 5 secs, the browser will wait for the page to load until 5 sec and returns an error if the page takes more time to load.<\/p>\n<p>For this, you\u2019ll have to add getPageTimeout (timeout in milliseconds) to your protractor configuration file, to reflect the change in timeout globally. But in case you want to provide the timeout for individual test cases, you\u2019ll have to pass an additional parameter when calling the browser.get() i.e. browser.get ( address, the timeout in milliseconds ).<\/p>\n<p><strong>test_config.js<\/strong><\/p>\n<pre class=\"brush:js\">\nspecs: ['test_timeout.js'],\n\/\/ overriding default value of getPageTimeout parameter \/\/\n      getPageTimeout: 10000,\n      jasmineNodeOpts: {\n\/\/ overriding default value of defaultTimeoutInterval parameter \/\/\n      defaultTimeoutInterval: 10000\n   },\n   onPrepare: function () {\n      browser.manage().window().maximize();\n      browser.manage().timeouts().implicitlyWait(3000);\n   }\n};\n\n\/\/ launches the URL in the browser \/\/\nbrowser.get(\"http:\/\/the-internet.herokuapp.com\");\n<\/pre>\n<p>Alternatively specifying the value as an argument to handle timeouts in Protractor with Selenium:<\/p>\n<pre class=\"brush:js\">\n\/\/ launches the URL in the browser and specifying the timeout as a parameter \/\/\nbrowser.get(http:\/\/the-internet.herokuapp.com,10000);\n<\/pre>\n<h2 class=\"wp-block-heading\">Timeout During Activity After Loading The Page<\/h2>\n<p>While performing any browser action on a page while performing Selenium test automation for Protractor testing, the <a href=\"https:\/\/www.lambdatest.com\/blog\/best-javascript-framework-2020\/\" target=\"_blank\" rel=\"noopener noreferrer\">javascript framework<\/a> waits before proceeding with any action until there are no remaining asynchronous tasks in the application. It indicates that all the timeout along with the HTTP requests has been completed.<\/p>\n<p>So let\u2019s take a use case to handle timeouts in Protractor with Selenium where we set the default timeout as 6000 ms or 6 secs, the browser will wait after the page load before proceeding with any activity until 6 sec and then error out stating that it timed out waiting for asynchronous tasks to finish after 6000 ms.<\/p>\n<p>For this, you\u2019ll have to add allScriptsTimeout (timeout in ms) to the Protractor configuration file and this will reflect the change in timeout globally.<\/p>\n<p><strong>test_config.js<\/strong><\/p>\n<pre class=\"brush:js\">\nspecs: ['test_timeout.js'],\n \n\/\/ overriding default value of getPageTimeout parameter \/\/\n      getPageTimeout: 10000,\n\/\/ overriding default value of allScriptsTimeout parameter for Protractor testing\/\/      \nallScriptsTimeout: 10000,\n \n      jasmineNodeOpts: {\n\/\/ overriding default value of defaultTimeoutInterval parameter \/\/\n      defaultTimeoutInterval: 10000\n   },\n   onPrepare: function () {\n      browser.manage().window().maximize();\n      browser.manage().timeouts().implicitlyWait(3000);\n   }\n<\/pre>\n<p>You can also fix this by making a change in the web applications for Protractor testing. Protractor waits indefinitely and then time out if the AngularJS application continuously checks $timeout or $http. You can use the $interval for any continuous polling as introduced in Angular 1.2. For Angular applications, Protractor must wait until the Angular Zone is stabilized.<\/p>\n<p>This means that long-running asynchronous operations would prevent your test from continuing. Hence, you\u2019ll need to execute such tasks outside the Angular zone to have a workaround for this fix in this Protractor tutorial. For example:<\/p>\n<pre class=\"brush:js\">\nthis.ngZone.runOutsideAngular(() =&gt; {\n  setTimeout(() =&gt; {\n    \/\/ Any changes that are made inside this will not be reflected in the view of our application for Protractor testing \/\/\n    this.ngZone.run(() =&gt; {\n      \/\/ if we run inside this block then it will detect the changes. \/\/\n    });\n  }, REALLY_LONG_DELAY);\n});\n<\/pre>\n<h2 class=\"wp-block-heading\">Timeout When Waiting For The Variable To Be Initialized<\/h2>\n<p>When launching any URL in the browser for Protractor testing, the protractor waits for the angular variable to be present while loading a new page.<\/p>\n<p>Let\u2019s take a use case to handle timeouts in Protractor with Selenium, where you set the default timeout as 8000 ms or 8 secs, the browser will wait for the angular variable on the page load before proceeding with any activity until 8 sec and return an error stating that angular could not be found on the page, retries looking for the angular exceeded.<\/p>\n<p>For this, you\u2019ll have to add getPageTimeout (timeout in millis) to your protractor configuration file to reflect the change in timeout globally. But in case if you want to provide the timeout individually during each loading of the web page in the browser, you\u2019ll need to pass an additional parameter when calling the browser.get() i.e. browser.get ( address, the timeout in milliseconds ).<\/p>\n<p><strong>test_config.js<\/strong><\/p>\n<pre class=\"brush:js\">\nspecs: ['test_timeout.js'],\n\/\/ overriding default value of getPageTimeout parameter to handle timeouts in Protractor with Selenium\/\/\n      getPageTimeout: 10000,\n      jasmineNodeOpts: {\n\/\/ overriding default value of defaultTimeoutInterval parameter \/\/\n      defaultTimeoutInterval: 10000\n   },\n   onPrepare: function () {\n      browser.manage().window().maximize();\n      browser.manage().timeouts().implicitlyWait(3000);\n   }\n};\n\n\/\/ launches the URL in the browser \/\/\nbrowser.get(\"http:\/\/the-internet.herokuapp.com\");\n<\/pre>\n<p>Alternatively specifying the value as an argument to handle timeouts in Protractor with Selenium.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<pre class=\"brush:js\">\n\/\/ launches the URL in the browser and specifying the timeout as a parameter \/\/\nbrowser.get(http:\/\/the-internet.herokuapp.com,10000);\n<\/pre>\n<h2 class=\"wp-block-heading\">Test Specification Timeout in Protractor<\/h2>\n<p>The test specification i.e. the \u2018it block\u2019 of the Protractor testing case that defines the test case to be executed. In case the test case takes a long time to execute, for any reason like the processing of the test case, then \u2018it\u2019 block will fail and result in an error.<\/p>\n<p>If we consider an example to handle timeouts in Protractor with Selenium, where the default timeout is set as 15000 ms or 15 secs, the browser will wait for the spec to complete execution until 15 sec and then results in a failure in the test results.<\/p>\n<p>You need to add jasmineNodeOpts (timeout in millis) to the protractor configuration file to reflect the change in timeout globally. But in case we would like to provide the timeout individually for each test specification, we can achieve this by passing the third parameter in the \u2018it\u2019 block i.e. it(description, testFunc, a timeout in milliseconds).<\/p>\n<p><strong>test_config.js<\/strong><\/p>\n<pre class=\"brush:js\">\nspecs: ['test_timeout.js'],\n \n\/\/ overriding default value of getPageTimeout parameter to handle timeouts in Protractor Selenium \/\/\n      getPageTimeout: 10000,\n\/\/ overriding default value of allScriptsTimeout parameter \/\/      \nallScriptsTimeout: 10000,\n \n      jasmineNodeOpts: {\n\/\/ overriding default value of defaultTimeoutInterval parameter \/\/\n      defaultTimeoutInterval: 30000\n   },\n   onPrepare: function () {\n      browser.manage().window().maximize();\n      browser.manage().timeouts().implicitlyWait(3000);\n   }\n<\/pre>\n<p>Alternatively, by passing as an argument:<\/p>\n<pre class=\"brush:js\">\n\/\/ describing the test for the timeout example \/\/\n   describe(' Timeout Demonstration in Protractor ', function() {\n \/\/ tests to handle timeouts in Protractor Selenium\/\/\n    it('Tests to handle timeouts in protractor', function() {\n    \/\/ launch the url in the browser \/\/   \n       browser.get(\"http:\/\/the-internet.herokuapp.com \");   \n   }, 30000);\n});\n<\/pre>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/06\/LambdaTest-Community-2.jpg\" alt=\"\" class=\"wp-image-105695\" width=\"698\" height=\"135\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/06\/LambdaTest-Community-2.jpg 930w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/06\/LambdaTest-Community-2-300x58.jpg 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/06\/LambdaTest-Community-2-768x149.jpg 768w\" sizes=\"(max-width: 698px) 100vw, 698px\" \/><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\">Asynchronous Script Timeout in Protractor<\/h2>\n<p>The asynchronous script timeout is used to indicate the script to wait until the specified timeout limit so that it can complete its execution before the error is thrown to handle timeouts in Protractor Selenium.<\/p>\n<p>So let us take a use case to handle timeouts in Protractor with Selenium where we set the default timeout as 7000 ms or 7 secs, the browser will wait for any asynchronous task to complete its execution to handle timeouts in Protractor Selenium, before proceeding with its throwing an error until 7 sec and then results into a ScriptTimeoutError out stating that it timed out waiting for asynchronous tasks.<\/p>\n<p>In order to modify this behavior to handle timeouts in Protractor Selenium, you need to add allScriptsTimeout (timeout in millis) to the protractor configuration file and this will reflect the change in timeout globally.<\/p>\n<p><strong>test_config.js<\/strong><\/p>\n<pre class=\"brush:js\">\nspecs: ['test_timeout.js'],\n \n\/\/ overriding default value of getPageTimeout parameter for Protractor testing \/\/\n      getPageTimeout: 10000,\n\/\/ overriding default value of allScriptsTimeout parameter \/\/      \nallScriptsTimeout: 10000,\n \n      jasmineNodeOpts: {\n\/\/ overriding default value of defaultTimeoutInterval parameter \/\/\n      defaultTimeoutInterval: 30000\n   },\n   onPrepare: function () {\n      browser.manage().window().maximize();\n      browser.manage().timeouts().implicitlyWait(3000);\n   }\n<\/pre>\n<h2 class=\"wp-block-heading\">Ways To Toggle The Waiting Feature In Protractor<\/h2>\n<p>Whenever you want navigation or open a page in the browser that does not use Angular, we can disable this feature of waiting for timeout by passing the argument as false when calling the function i.e. browser.waitForAngularEnabled(false).<\/p>\n<pre class=\"brush:js\">\nbrowser.waitForAngularEnabled(false);\nbrowser.get('\/my_non_angular_page.html');\nelement(by.id('username')).sendKeys('myusername');\nelement(by.id('password')).sendKeys('mypassword');\nelement(by.id('clickButton')).click();\nbrowser.waitForAngularEnabled(true);\nbrowser.get('\/my_page-containing-angular.html');\n<\/pre>\n<p>But it might happen that we can get the Asynchronous Script TimeOut Exception from the WaitForAngular method. In such a case the first important thing would be to check on the timeout of our webdriver for scripts that have been set to something around 5 seconds for heavy and slowly loading websites.<\/p>\n<p>Below is the complete code that demonstrates the behavior of handling timeouts in protractor.<\/p>\n<pre class=\"brush:js\">\n\/\/ setting required config parameters \/\/\nexports.config = {\n   directConnect: true,\n \n   \/\/ Desired Capabilities that are passed as an argument to the web driver instance.\n   capabilities: {\n      'browserName': 'chrome'  \/\/ name of the browser used to test \/\/\n   },\n \n   \/\/ Flavor of the framework to be used for our test case \/\/\n     framework: 'jasmine',\n \n   \/\/ The patterns which are relative to the current working directory when \n \nprotractor methods are invoked \/\/\n \n   specs: ['test_timeout.js'],\n\/\/ overriding default value of getPageTimeout parameter \/\/\n      getPageTimeout: 10000,\n\/\/ overriding default value of allScriptsTimeout parameter \/\/\n      allScriptsTimeout: 10000,\n      jasmineNodeOpts: {\n\/\/ overriding default value of defaultTimeoutInterval parameter \/\/\n      defaultTimeoutInterval: 30000\n   },\n   onPrepare: function () {\n      browser.manage().window().maximize();\n      browser.manage().timeouts().implicitlyWait(5000);\n   }\n};\n<\/pre>\n<p><strong>test_timeout.js<\/strong><\/p>\n<pre class=\"brush:js\">\n\/\/ import all the required modules from selenium web driver and protractor\n \nimport 'selenium-webdriver';\n \nimport { browser, element, by, ExpectedConditions, protractor} from 'protractor'\n \n \n   \/\/ describing the test for the timeout demonstration \/\/\n describe('Timeout Demonstration in Protractor', function() {\n    \nbrowser.ignoreSynchronization = true; \/\/ disable synchronization for non  angular websites \/\/\n \n    \/\/ tests to handle timeouts in protractor \/\/\n    it('Tests to handle timeouts in protractor', function() {\n \n\t\/\/ launch the url in the browser \/\/   \n       browser.get(http:\/\/the-internet.herokuapp.com , 10000);\n      \n browser.manage().timeouts().implicitlyWait(5000);\n     \n      \/\/ locate the element \/\/                        \n     element(by.xpath(\" \/\/ label\/ span \")).getAttribute(\"innerTextValue\").then(function(textValue){\n \n       \/\/ the value saved is assigned to the value of the text box\n      element(by.xpath(\"\/\/input[@type='text']\")).sendKeys(textValue);\n        })\n    },30000);\n});\n<\/pre>\n<h2 class=\"wp-block-heading\">Handle Timeouts In Protractor Selenium On Cloud Selenium Grid<\/h2>\n<p>We can run the same Selenium test automation script to handle timeouts in Protractor Selenium on a cloud <a href=\"https:\/\/www.lambdatest.com\/selenium-automation\" target=\"_blank\" rel=\"noopener noreferrer\">Selenium grid<\/a> that provides the capability to run the tests across various real-time browsers and devices. In order to run Selenium test automation scripts for this Protractor tutorial, we just require configuration changes i.e. for building a driver to connect with the LambdaTest hub. Below is our revised script with the appropriate modifications for this Protractor tutorial to handle timeouts in Protractor Selenium.<\/p>\n<pre class=\"brush:js\">\n\/\/ test_config.js \/\/\n\/\/ The test_config.js file serves as a configuration file for out Selenium test Automation case for this Protractor tutorial\/\/\n \nLT_USERNAME = process.env.LT_USERNAME || \"irohitgoyal\"; \/\/ LambdaTest User name\nLT_ACCESS_KEY = process.env.LT_ACCESS_KEY || \"r9JhziRaOvd5T4KCJ9ac4fPXEVYlOTealBrADuhdkhbiqVGdBg\"; \/\/ LambdaTest Access key\n \nexports.capabilities = {\n  'build': ' Automation Selenium Webdriver Test Script ', \/\/ Build Name to be display in the test logs\n  'name': ' Protractor Selenium Timeout Test on Chrome',  \/\/ The name of the test to distinguish amongst test cases \/\/\n  'platform':'Windows 10', \/\/  Name of the Operating System\n  'browserName': 'chrome', \/\/ Name of the browser\n  'version': '79.0', \/\/ browser version to be used\n  'console':false, \/\/ flag to check whether to capture console logs.\n  'tunnel': false \/\/ flag to check if it is required to run the localhost through the tunnel\n  'visual': false,  \/\/ flag to check whether to take step by step screenshot\n  'network':false,  \/\/ flag to check whether to capture network logs\n  };\n \n\/\/ setting required config parameters \/\/\nexports.config = {\n   directConnect: true,\n \n   \/\/ Desired Capabilities that are passed as an argument to the web driver instance for Selenium test automation.\n   capabilities: {\n      'browserName': 'chrome'  \/\/ name of the browser used to test \/\/\n   },\n \n   \/\/ Flavour of the framework to be used for our test case \/\/\n   framework: 'jasmine',\n \n   \/\/ The patterns which are relative to the current working directory when \n \nprotractor methods are invoked \/\/\n \n   specs: ['test_timeout.js'],\n\/\/ overriding default value of getPageTimeout parameter \/\/\n      getPageTimeout: 10000,\n\/\/ overriding default value of allScriptsTimeout parameter \/\/\n      allScriptsTimeout: 10000,\n      jasmineNodeOpts: {\n\/\/ overriding default value of defaultTimeoutInterval parameter \/\/\n      defaultTimeoutInterval: 30000\n   },\n   onPrepare: function () {\n      browser.manage().window().maximize();\n      browser.manage().timeouts().implicitlyWait(5000);\n   }\n};\n\n\n\/\/ test_script.js \/\/\n \n\/\/ import all the required modules from selenium web driver and protractor\n \nimport { browser, element, by, ExpectedConditions, protractor} from 'protractor'\nimport 'selenium-webdriver';\n \nvar script = require (\u2018protractor\u2019) ;\n \nvar webdriver = require (\u2018selenium-webdriver\u2019) ;\n \n\/\/ Build the web driver that we will be using in LambdaTest for this protractor tutorial\nvar buildDriver = function(caps) {\n  return new webdriver.Builder()\n    .usingServer(\n      \"http:\/\/\" +\n      LT_USERNAME +\n      \":\" +\n      LT_ACCESS_KEY +\n      \"@hub.lambdatest.com\/wd\/hub\"\n    )\n    .withCapabilities(caps)\n    .build();\n};\n \n \n\/\/ describing the test for the timeout demonstration \/\/\ndescribe(' Timeout Demonstration in Protractor ', function() {\n\/\/ disable synchronization for non  angular websites \/\/\n    browser.ignoreSynchronization = true;\n \n\/\/ adding the before an event that builds the driver and triggers before the test execution\n  beforeEach(function(done) {\n    caps.name = this.currentTest.title;\n    driver = buildDriver(caps);\n    done();\n  });\n \n    \/\/ tests to handle timeout in Protractor Selenium\/\/\n    it(' Tests to handle timeout in protractor  ', function() {\n \n \n      \n browser.manage().timeouts().implicitlyWait(5000);\n     \n      \/\/ locate the element for Protractor testing \/\/                        \n     element(by.xpath(\" \/\/ label\/ span \")).getAttribute(\"innerTextValue\").then(function(textValue){\n \n       \/\/ the value saved is assigned to the value of the text box\n      element(by.xpath(\"\/\/input[@type='text']\")).sendKeys(textValue);\n        })\n    },30000);\n});\n \n \n \n \n \n        browser.manage().timeouts().implicitlyWait(5000)\n       \/\/ launch the url in the browser \/\/   \n       browser.get(http:\/\/the-internet.herokuapp.com , 10000);                 \n \n       \/\/ locate the element \/\/                        \n       \n\/\/ Store the value in a web element\n        WebElement ele1 = element(by.id(\"ele1\")).getWebElement();\n        \/\/ navigate to the next desired element i.e. ele1\n        browser.switchTo().frame(ele1);\n        \/\/ locate the new element i.e. element 3 \/\/\n        WebElement ele3 =         element(by.xpath(\"[@id='ele3']\")).getWebElement();\n        \/\/ using the switchTo method to navigate to ele 3\n        browser.switchTo().frame(ele3);\n        \/\/ search the element for the checkbox element by xpath locator\n        WebElement checkbox  = element(by.xpath(\"\/\/input[@type='checkbox']\"));\n        \/\/ if checkbox is not selected then click the checkbox\n        checkbox.isSelected().then(function(checked){\n            \/\/ if checkbox is not selected then click the checkbox\n            if(! checked){\n                checkbox.click();\n            }\n        })\n            }\n        });\n    },30000);\n});\n<\/pre>\n<p>As we saw in our example for this Protractor tutorial, that just by appending a few lines of code, we can connect to the LambdaTest Platform and run our Selenium test automation script on the Cloud Selenium grid. In order to have this setup, we are required to generate the desired capability matrix.<\/p>\n<p>You can visit LambdaTest <a href=\"https:\/\/www.lambdatest.com\/capabilities-generator\/\" target=\"_blank\" rel=\"noopener noreferrer\">Selenium desired capabilities generator<\/a> to generate the required configuration through which we can specify the environment in which we would like to perform our tests. Also, we just need to pass our LambdaTest username and access key in the configuration file that will uniquely identify us on the LambdaTest platform.<\/p>\n<p>Below is the output on running the Selenium test automation script on LambdaTest for this Protractor tutorial:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"624\" height=\"177\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/06\/selenium-automation-testing.png\" alt=\"\" class=\"wp-image-105696\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/06\/selenium-automation-testing.png 624w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/06\/selenium-automation-testing-300x85.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/06\/selenium-automation-testing-620x177.png 620w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/figure>\n<\/div>\n<p><a href=\"https:\/\/www.lambdatest.com\/blog\/handle-alerts-popups-in-selenium-protractor\/\" target=\"_blank\" rel=\"noopener noreferrer\">Also Read: How To Handle Alerts And Popups In Protractor With Selenium?<br \/><\/a><\/p>\n<h2 class=\"wp-block-heading\">Wrapping It Up!<\/h2>\n<p>This brings us to the conclusion of this Protractor tutorial on how to handle timeout in Protractor Selenium. Throughout this article, I explored how to handle timeout and explored different approaches for it. After implementing this in our test scripts you\u2019ll realize that it makes Selenium test automation scripts more effective. This helps to perform automated browser testing of websites that have multiple asynchronous tasks and might take some time to render on the browser windows.<\/p>\n<p>Moreover, adding a timeout to our web page allows components on our web page to have enough time to load. This makes Protractor one of the best frameworks to test timeout for Selenium test automation. Also, since we know that protractor is based on selenium and used primarily for <a href=\"https:\/\/www.lambdatest.com\/selenium-automation\" target=\"_blank\" rel=\"noopener noreferrer\">automated browser testing<\/a>, it inherits many of its properties. Finally, there are many other functionalities of the framework available which I\u2019ll discuss in the future Protractor tutorial.<\/p>\n<p>I\u2019d love to hear your opinion on this article in the comment section down below. Also, feel free to share this article with your friends on LinkedIn, Twitter, or any other social media platform. That\u2019s all for now. <strong>Happy Testing!!!<\/strong>\ud83d\ude04<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/accounts.lambdatest.com\/register\/\"><img decoding=\"async\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/01\/Adword-Cyber2.jpg\" alt=\"\" class=\"wp-image-101468\" width=\"698\" height=\"135\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/01\/Adword-Cyber2.jpg 930w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/01\/Adword-Cyber2-300x58.jpg 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/01\/Adword-Cyber2-768x149.jpg 768w\" sizes=\"(max-width: 698px) 100vw, 698px\" \/><\/a><\/figure>\n<\/div>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td>\n<p>Published on Java Code Geeks with permission by Praveen Mishra, partner at our <a href=\"\/\/www.javacodegeeks.com\/join-us\/jcg\/\" target=\"_blank\" rel=\"noopener noreferrer\">JCG program<\/a>. See the original article here: <a href=\"https:\/\/www.lambdatest.com\/blog\/protractor-tutorial-handling-timeouts-with-selenium\/\" target=\"_blank\" rel=\"noopener noreferrer\">Protractor Tutorial: Handling Timeouts With Selenium<\/a><\/p>\n<p>Opinions expressed by Java Code Geeks contributors are their own.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>A lot of times while performing Selenium test automation, you\u2019ll come across certain scenarios when your test fails due to the fact that the webpage or the web element takes some time to load completely. In such scenarios, the best approach is to wait for the page or the web elements to load completely in &hellip;<\/p>\n","protected":false},"author":107552,"featured_media":231,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[1321,287,2005],"class_list":["post-105623","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-automation","tag-selenium","tag-selenium-protractor"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Protractor Tutorial: Handling Timeouts With Selenium - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Interested to learn about Protractor? Check our article explaining how to Handle Timeouts With Selenium using examples.\" \/>\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.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Protractor Tutorial: Handling Timeouts With Selenium - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Interested to learn about Protractor? Check our article explaining how to Handle Timeouts With Selenium using examples.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-11T04:00:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/selenium-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Praveen Mishra\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Praveen Mishra\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/07\\\/protractor-tutorial-handling-timeouts-with-selenium.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/07\\\/protractor-tutorial-handling-timeouts-with-selenium.html\"},\"author\":{\"name\":\"Praveen Mishra\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/789a7e0bcf17a98620d7446cba681539\"},\"headline\":\"Protractor Tutorial: Handling Timeouts With Selenium\",\"datePublished\":\"2020-07-11T04:00:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/07\\\/protractor-tutorial-handling-timeouts-with-selenium.html\"},\"wordCount\":1718,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/07\\\/protractor-tutorial-handling-timeouts-with-selenium.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/selenium-logo.jpg\",\"keywords\":[\"Automation\",\"Selenium\",\"Selenium Protractor\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/07\\\/protractor-tutorial-handling-timeouts-with-selenium.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/07\\\/protractor-tutorial-handling-timeouts-with-selenium.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/07\\\/protractor-tutorial-handling-timeouts-with-selenium.html\",\"name\":\"Protractor Tutorial: Handling Timeouts With Selenium - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/07\\\/protractor-tutorial-handling-timeouts-with-selenium.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/07\\\/protractor-tutorial-handling-timeouts-with-selenium.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/selenium-logo.jpg\",\"datePublished\":\"2020-07-11T04:00:35+00:00\",\"description\":\"Interested to learn about Protractor? Check our article explaining how to Handle Timeouts With Selenium using examples.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/07\\\/protractor-tutorial-handling-timeouts-with-selenium.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/07\\\/protractor-tutorial-handling-timeouts-with-selenium.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/07\\\/protractor-tutorial-handling-timeouts-with-selenium.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/selenium-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/selenium-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/07\\\/protractor-tutorial-handling-timeouts-with-selenium.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Protractor Tutorial: Handling Timeouts With Selenium\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/789a7e0bcf17a98620d7446cba681539\",\"name\":\"Praveen Mishra\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e87fa339a54f16a77687ceaab13184cf14bc84650dabe741247614a2cb513ff5?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e87fa339a54f16a77687ceaab13184cf14bc84650dabe741247614a2cb513ff5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e87fa339a54f16a77687ceaab13184cf14bc84650dabe741247614a2cb513ff5?s=96&d=mm&r=g\",\"caption\":\"Praveen Mishra\"},\"description\":\"Praveen is a Computer Science Engineer by degree, and a Digital Marketer by heart who works at LambdaTest. A social media maven, who is eager to learn &amp; share about everything new &amp; trendy in the tech domain.\",\"sameAs\":[\"https:\\\/\\\/www.lambdatest.com\\\/\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/praveen-mishra\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Protractor Tutorial: Handling Timeouts With Selenium - Java Code Geeks","description":"Interested to learn about Protractor? Check our article explaining how to Handle Timeouts With Selenium using examples.","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.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html","og_locale":"en_US","og_type":"article","og_title":"Protractor Tutorial: Handling Timeouts With Selenium - Java Code Geeks","og_description":"Interested to learn about Protractor? Check our article explaining how to Handle Timeouts With Selenium using examples.","og_url":"https:\/\/www.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2020-07-11T04:00:35+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/selenium-logo.jpg","type":"image\/jpeg"}],"author":"Praveen Mishra","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Praveen Mishra","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html"},"author":{"name":"Praveen Mishra","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/789a7e0bcf17a98620d7446cba681539"},"headline":"Protractor Tutorial: Handling Timeouts With Selenium","datePublished":"2020-07-11T04:00:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html"},"wordCount":1718,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/selenium-logo.jpg","keywords":["Automation","Selenium","Selenium Protractor"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html","url":"https:\/\/www.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html","name":"Protractor Tutorial: Handling Timeouts With Selenium - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/selenium-logo.jpg","datePublished":"2020-07-11T04:00:35+00:00","description":"Interested to learn about Protractor? Check our article explaining how to Handle Timeouts With Selenium using examples.","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/selenium-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/selenium-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2020\/07\/protractor-tutorial-handling-timeouts-with-selenium.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Protractor Tutorial: Handling Timeouts With Selenium"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/789a7e0bcf17a98620d7446cba681539","name":"Praveen Mishra","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/e87fa339a54f16a77687ceaab13184cf14bc84650dabe741247614a2cb513ff5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e87fa339a54f16a77687ceaab13184cf14bc84650dabe741247614a2cb513ff5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e87fa339a54f16a77687ceaab13184cf14bc84650dabe741247614a2cb513ff5?s=96&d=mm&r=g","caption":"Praveen Mishra"},"description":"Praveen is a Computer Science Engineer by degree, and a Digital Marketer by heart who works at LambdaTest. A social media maven, who is eager to learn &amp; share about everything new &amp; trendy in the tech domain.","sameAs":["https:\/\/www.lambdatest.com\/"],"url":"https:\/\/www.javacodegeeks.com\/author\/praveen-mishra"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/105623","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/107552"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=105623"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/105623\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/231"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=105623"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=105623"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=105623"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}