{"id":4944,"date":"2021-07-12T12:39:59","date_gmt":"2021-07-12T12:39:59","guid":{"rendered":"https:\/\/www.softwaretestinghelp.com\/?p=4944"},"modified":"2025-05-09T10:49:59","modified_gmt":"2025-05-09T10:49:59","slug":"efficient-selenium-scripting-selenium-tutorial-27","status":"publish","type":"post","link":"https:\/\/www.softwaretestinghelp.com\/efficient-selenium-scripting-selenium-tutorial-27\/","title":{"rendered":"Common Selenium Scripting Errors and Troubleshooting"},"content":{"rendered":"\n<p>In the previous tutorial, we discussed the technical implications <strong>of implementing logging in a framework<\/strong>. We discussed <a title=\"Log4j tutorial\" href=\"https:\/\/www.softwaretestinghelp.com\/log4j-tutorial-selenium-tutorial-26\/\"><strong>log4j utility<\/strong><\/a> at length. <\/p>\n\n\n\n<p>We discussed the basic components that constitute log4j from a usability perspective. With the Appenders and layouts, a user is leveraged to choose the desired logging format\/pattern and the data source\/location.<\/p>\n\n\n\n<p>In the current 27th tutorial in this <a title=\"https:\/\/www.softwaretestinghelp.com\/selenium-tutorial-1\/\" href=\"https:\/\/www.softwaretestinghelp.com\/selenium-tutorial-1\/\">comprehensive free selenium online training series<\/a>, we would shift our focus towards a few trivial yet important topics that would guide us in troubleshooting some recurrent problems. We may or may not use them in daily scripting, but they would be helpful in the long run.<\/p>\n\n\n  \n \n \n\n\n<h2 class=\"wp-block-heading\">Selenium Scripting and Troubleshooting<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2014\/11\/Selenium-Scripting-And-Troubleshoot-Scenarios.png\"><img decoding=\"async\" width=\"700\" height=\"350\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2014\/11\/Selenium-Scripting-And-Troubleshoot-Scenarios.png\" alt=\"Selenium Scripting And Troubleshoot Scenarios\" class=\"wp-image-300673\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2014\/11\/Selenium-Scripting-And-Troubleshoot-Scenarios.png 700w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2014\/11\/Selenium-Scripting-And-Troubleshoot-Scenarios-300x150.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/a><\/figure>\n\n\n\n<p><em><\/em>We would discuss some advanced concepts wherein we would deal with mouse and keyboard events, and accessing multiple links by implementing lists. So let&#8217;s just dive in and talk about these topics using examples and code snippets.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">JavaScript Executors<\/h3>\n\n\n\n<p>While automating a test scenario, certain actions become an inherent part of test scripts.<\/p>\n\n\n\n<p><strong>These actions may be:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Clicking a button, hyperlink, etc.<\/li>\n\n\n\n<li>Typing in a text box<\/li>\n\n\n\n<li>Scrolling Vertically or Horizontally until the desired object is brought into view<\/li>\n\n\n\n<li>And much more<\/li>\n<\/ul>\n\n\n\n<p>Now, it is clear from the earlier tutorials that the best way to automate such actions is by using Selenium commands.<\/p>\n\n\n\n<p><strong>But what if the selenium commands don\u2019t work?<\/strong><\/p>\n\n\n\n<p>Yes, it is possible that the elementary Selenium Commands don\u2019t work in certain situations. So, to troubleshoot this, we bring in JavaScript executors.<\/p>\n\n\n\n<p><strong>What are JavaScript Executors?<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2014\/11\/JavaScript-Executors1.jpg\"><img decoding=\"async\" width=\"485\" height=\"163\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2014\/11\/JavaScript-Executors1.jpg\" alt=\"JavaScript Executors\" class=\"wp-image-4951\" style=\"width:512px;height:auto\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2014\/11\/JavaScript-Executors1.jpg 485w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2014\/11\/JavaScript-Executors1-300x100.jpg 300w\" sizes=\"(max-width: 485px) 100vw, 485px\" \/><\/a><\/figure>\n\n\n\n<p>JavascriptExecutor interface is a part of org.openqa.selenium and implements java.lang.Object class. <a href=\"https:\/\/www.softwaretestinghelp.com\/javascriptexecutor-in-selenium\/\">JavascriptExecutor<\/a> presents the capabilities to execute JavaScript directly within the web browser. To execute the JavaScript, certain mechanisms, as methods along with a specific set of parameters, are provided in its implementation.<\/p>\n\n\n\n<p><strong>Methods<\/strong><\/p>\n\n\n\n<p><strong>executeScript (String script, args)<\/strong><\/p>\n\n\n\n<p>As the method name suggests, it executes the JavaScript within the current window, alert, frame, etc (the window that the WebDriver instance is currently focusing on)<\/p>\n\n\n\n<p><strong>executeAsyncScript (String script, args)<\/strong><\/p>\n\n\n\n<p>As the method name suggests, it executes the JavaScript within the current window, alert, frame etc (the window that the WebDriver instance is currently focusing on)<\/p>\n\n\n\n<p>The parameters and import statement are common to both the executor methods.<\/p>\n\n\n\n<p><strong>Parameters<\/strong><br>Script &#8211; the script to be executed<br>Argument &#8211; the parameters that the script requires for its execution (if any)<\/p>\n\n\n\n<p><strong>Import statement<\/strong><br>To use JavascriptExecutors in our test scripts, we need to import the package using the following syntax:<\/p>\n\n\n\n<p><strong>import org.openqa.selenium.JavascriptExecutor;<\/strong><\/p>\n\n\n\n<p><strong>Sample Code<\/strong><\/p>\n\n\n\n<p><strong>#1) Clicking a web element <\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n\/\/ Locating the web element using id\nWebElement element = driver.findElement(By.id(\"id of the webelement\"));\n \n\/\/ Instantiating JavascriptExecutor\nJavascriptExecutor js = (JavascriptExecutor)driver;\n \n\/\/ Clicking the web element\njs.executeScript(\"arguments&#x5B;0].click();\", element);\n<\/pre><\/div>\n\n\n<p><strong>#2) Typing in a Text Box<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n\/\/ Instantiating JavascriptExecutor\nJavascriptExecutor js = (JavascriptExecutor)driver;\n \n\/\/ Typing the test data into Textbox\njs.executeScript(\"document.getElementById(\u2018id of the element\u2019).value=\u2019test data\u2019;\u201d);\n<\/pre><\/div>\n\n\n<p><strong>#3) Scrolling down until the web element is in the view<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\nWebElement element=driver.findElement(By.xpath(\"\/\/input&#x5B;contains(@value,'Save')]\"));\n \n\/\/ Instantiating the javascriptExecutor and scrolling into the view in the single test step\n((JavascriptExecutor)driver).executeScript(\"arguments&#x5B;0].scrollIntoView(true);\",element);\n<\/pre><\/div>\n\n\n<p>You may find various other ways of writing the code for accessing JavascriptExecutors.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Accessing Multiple Elements in a List<\/h3>\n\n\n\n<p>We may come across elements of the same type, like multiple hyperlinks, images, etc arranged in an ordered or unordered list. So, it makes sense to handle all those elements with just one code, using WebElement List. <\/p>\n\n\n\n<p>Refer to the screenshot below to understand the elements I am talking about.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2014\/11\/Selenium-scripting-tips-1.jpg\"><img decoding=\"async\" width=\"461\" height=\"503\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2014\/11\/Selenium-scripting-tips-1.jpg\" alt=\"Selenium scripting tips 1\" class=\"wp-image-4952\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2014\/11\/Selenium-scripting-tips-1.jpg 461w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2014\/11\/Selenium-scripting-tips-1-274x300.jpg 274w\" sizes=\"(max-width: 461px) 100vw, 461px\" \/><\/a><\/figure>\n\n\n\n<p>In the above image, we see that the various service providers belong to an unordered list. Thus, verification of clickability and visibility of these elements can be done by a single piece of code by using a list of elements.<\/p>\n\n\n\n<p><strong>Import statement<\/strong><br>To be able to use a WebElement list in our test scripts, we need to import the package using the following syntax:<\/p>\n\n\n\n<p>import java.util.List;<\/p>\n\n\n\n<p><strong>Sample Code<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n\/\/ Storing the list\nList &lt;WebElement&gt; serviceProviderLinks = driver.findElements(By.xpath(&quot;\/\/div&#x5B;@id=&#039;ServiceProvider&#039;]\/\/ul\/\/li&quot;));\n \n\/\/ Fetching the size of the list\nint listSize = serviceProviderLinks.size();\nfor (int i=0; i&lt;listSize; i++)\n{\n \n\/\/ Clicking on each service provider link\nserviceProviderLinks.get(i).click();\n \n\/\/ Navigating back to the previous page that stores link to service providers\ndriver.navigate().back();\n}\n<\/pre><\/div>\n\n\n<p>There are various requirements under which the lists can verify the elements with suitable implementation changes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Handling Keyboard and Mouse Events<\/h3>\n\n\n\n<p><strong>Handling Keyboard Events<\/strong><\/p>\n\n\n\n<p>As also said earlier, there are n number of ways to deal with the same problem statement in different contexts.<\/p>\n\n\n\n<p>Thus, a necessity arises to deal with a problem by changing the conventional dealing strategy with a more advanced strategy. I have witnessed cases where I could not deal with alerts and pop up etc. by selenium commands thus I had to opt for different Java utilities to deal with it using keyboard strokes and mouse events.<\/p>\n\n\n\n<p>Robot class is one such option to perform keyboard events and mouse events. Let us understand the concept with the help of a scenario and its implementation.<\/p>\n\n\n\n<p><strong>Scenario:<\/strong><\/p>\n\n\n\n<p>Imagine a situation where a stupid pop up shows up on the screen and we can&#8217;t get rid of it using the Alert Interface. So, the only option left is to close the window with the shortcut keys &#8220;Alt + spacebar + C&#8221;. Let us see how we close the popup using Robot Class.<\/p>\n\n\n\n<p>Before, initiating the implementation, we should import the necessary package to be able to use the Robot class within our test script.<\/p>\n\n\n\n<p><strong>Import Statement<\/strong><\/p>\n\n\n\n<p>import java.awt.Robot;<\/p>\n\n\n\n<p><strong>Sample Code<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n\/\/ Instantiating Robot class\nRobot rb =new Robot();\n \n\/\/ Calling KeyPress event\nrb.keyPress(KeyEvent.VK_ALT);\nrb.keyPress(KeyEvent.VK_SPACE);\nrb.keyPress(KeyEvent.VK_C);\n \n\/\/ Calling KeyRelease event\nrb.keyRelease(KeyEvent.VK_C);\nrb.keyRelease(KeyEvent.VK_SPACE);\nrb.keyRelease(KeyEvent.VK_ALT);\n<\/pre><\/div>\n\n\n<p>Robot class can also be used to handle mouse events but let us here look at the selenium\u2019s capabilities to handle mouse events.<\/p>\n\n\n\n<p><strong>Handling Mouse Events<\/strong><\/p>\n\n\n\n<p>WebDriver offers a wide range of interaction utilities that the user can exploit to automate mouse and keyboard events. Action Interface is one such utility that simulates single-user interactions.<\/p>\n\n\n\n<p>Thus, we would witness Action Interface to mouse hover on a drop down, which then opens a list of options in the next scenario.<\/p>\n\n\n\n<p><strong>Scenario:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Mouse Hover on the dropdown<\/li>\n\n\n\n<li>Click on one item in the list options<\/li>\n<\/ol>\n\n\n\n<p><strong>Import Statement<\/strong><\/p>\n\n\n\n<p>import org.openqa.selenium.interactions.Actions;<\/p>\n\n\n\n<p><strong>Sample Code<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n\/\/ Instantiating Action Interface\nActions actions=&lt;strong&gt;new&lt;\/strong&gt; Actions(driver);\n \n\/\/ howering on the dropdown\nactions.moveToElement(driver.findElement(By.&lt;em&gt;id&lt;\/em&gt;(&quot;id of the dropdown&quot;))).perform();\n \n\/\/ Clicking on one of the items in the list options\nWebElement subLinkOption=driver.findElement(By.id(&quot;id of the sub link&quot;));\nsubLinkOption.click();\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>In this tutorial, we discussed some advanced topics related to efficient scripting and troubleshooting scenarios where the user is required to handle mouse and keyboard events. We also discussed how to store more than one web element in a list. I hope you can handle these issues if they come up.<\/p>\n\n\n\n<p><a title=\"https:\/\/www.softwaretestinghelp.com\/database-testing-using-selenium-webdriver-selenium-tutorial-28\/\" href=\"https:\/\/www.softwaretestinghelp.com\/database-testing-using-selenium-webdriver-selenium-tutorial-28\/\"><span style=\"text-decoration: underline;\"><strong>Next Tutorial #28<\/strong><\/span><\/a>: For the upcoming tutorial in the series, we will discuss the <strong>concept of Database testing using Selenium WebDriver<\/strong>. We would witness the mechanism of database connection, hitting selenium queries and fetching the results through Selenium WebDriver Code.<\/p>\n\r\n\t\t\t<div id=\"daexthefup-container\"\r\n\t\t\t\tclass=\"daexthefup-container daexthefup-layout-stacked daexthefup-alignment-center\"\r\n\t\t\t\tdata-post-id=\"4944\">\r\n\r\n\t\t\t\t<div class=\"daexthefup-feedback\">\r\n\t\t\t\t\t<div class=\"daexthefup-text\">\r\n\t\t\t\t\t\t<h3 class=\"daexthefup-title\">Was this helpful?<\/h3>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<div class=\"daexthefup-buttons-container\">\r\n\t\t\t\t\t\t<div class=\"daexthefup-buttons\">\r\n\t\t\t\t\t\t\t\r\n\t\t\t<div class=\"daexthefup-yes daexthefup-button daexthefup-button-type-icon\" data-value=\"1\">\r\n\t\t\t\t\r\n                <svg>\r\n                    <defs>\r\n                        <style>.thumb-up-cls-1{fill:#c9c9c9;}.thumb-up-cls-2{fill:#e1e1e1;}.thumb-up-cls-3{fill:#676767;}<\/style>\r\n                    <\/defs>\r\n                    <g id=\"thumb_up\">\r\n                        <path class=\"thumb-up-cls-2 daexthefup-icon-circle\" d=\"m24,3c11.58,0,21,9.42,21,21s-9.42,21-21,21S3,35.58,3,24,12.42,3,24,3m0-1C11.85,2,2,11.85,2,24s9.85,22,22,22,22-9.85,22-22S36.15,2,24,2h0Z\" \/>\r\n                        <g>\r\n                            <rect class=\"thumb-up-cls-3 daexthefup-icon-secondary-color\" x=\"10\" y=\"20\" width=\"6\" height=\"15\" rx=\"1.5\" ry=\"1.5\" \/>\r\n                            <path class=\"thumb-up-cls-1 daexthefup-icon-primary-color\" d=\"m30.57,9.06l-.49-.1c-.81-.17-1.61.35-1.78,1.16l-5.3,11.74c-.17.81,3.16,1.61,3.97,1.78l1.96.41c.81.17,1.61-.35,1.78-1.16l2.18-10.27c.34-1.61-.7-3.21-2.31-3.56Z\" \/>\r\n                            <path class=\"thumb-up-cls-1 daexthefup-icon-primary-color\" d=\"m38.17,20h-18.67c-.83,0-1.5.67-1.5,1.5v12c0,.83.67,1.5,1.5,1.5h16.27c.71,0,1.33-.5,1.47-1.21l2.4-12c.19-.93-.53-1.8-1.47-1.8Z\" \/>\r\n                        <\/g>\r\n                    <\/g>\r\n                <\/svg>\t\t\t<\/div>\r\n\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t<div class=\"daexthefup-no daexthefup-button daexthefup-button-type-icon\" data-value=\"0\">\r\n\t\t\t\t\r\n                <svg>\r\n                    <defs>\r\n                        <style>.thumb-down-cls-1{fill:#c9c9c9;}.thumb-down-cls-2{fill:#e1e1e1;}.thumb-down-cls-3{fill:#676767;}<\/style>\r\n                    <\/defs>\r\n                    <g id=\"thumb_down\">\r\n                        <path class=\"thumb-down-cls-2 daexthefup-icon-circle\" d=\"m24,3c11.58,0,21,9.42,21,21s-9.42,21-21,21S3,35.58,3,24,12.42,3,24,3m0-1C11.85,2,2,11.85,2,24s9.85,22,22,22,22-9.85,22-22S36.15,2,24,2h0Z\" \/>\r\n                        <g>\r\n                            <rect class=\"thumb-down-cls-3 daexthefup-icon-secondary-color\" x=\"10\" y=\"13\" width=\"6\" height=\"15\" rx=\"1.5\" ry=\"1.5\" \/>\r\n                            <path class=\"thumb-down-cls-1 daexthefup-icon-primary-color\" d=\"m30.57,38.94l-.49.1c-.81.17-1.61-.35-1.78-1.16l-5.3-11.74c-.17-.81,3.16-1.61,3.97-1.78l1.96-.41c.81-.17,1.61.35,1.78,1.16l2.18,10.27c.34,1.61-.7,3.21-2.31,3.56Z\" \/>\r\n                            <path class=\"thumb-down-cls-1 daexthefup-icon-primary-color\" d=\"m38.17,28h-18.67c-.83,0-1.5-.67-1.5-1.5v-12c0-.83.67-1.5,1.5-1.5h16.27c.71,0,1.33.5,1.47,1.21l2.4,12c.19.93-.53,1.8-1.47,1.8Z\" \/>\r\n                        <\/g>\r\n                    <\/g>\r\n                <\/svg>\t\t\t<\/div>\r\n\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\r\n\t\t\t\t<div class=\"daexthefup-comment\">\r\n\t\t\t\t\t<div class=\"daexthefup-comment-top-container\">\r\n\t\t\t\t\t\t<label id=\"daexthefup-comment-label\" class=\"daexthefup-comment-label\"><\/label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"daexthefup-comment-character-counter-container\">\r\n\t\t\t\t\t\t\t\t<div id=\"daexthefup-comment-character-counter-number\"\r\n\t\t\t\t\t\t\t\t\tclass=\"daexthefup-comment-character-counter-number\"><\/div>\r\n\t\t\t\t\t\t\t\t<div class=\"daexthefup-comment-character-counter-text\"><\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<textarea id=\"daexthefup-comment-textarea\" class=\"daexthefup-comment-textarea\"\r\n\t\t\t\t\t\t\t\tplaceholder=\"Type your message\"\r\n\t\t\t\t\t\t\t\tmaxlength=\"\r\n\t\t\t\t\t\t\t\t400\t\t\t\t\t\t\t\t\t\"><\/textarea>\r\n\t\t\t\t\t<div class=\"daexthefup-comment-buttons-container\">\r\n\t\t\t\t\t\t<button class=\"daexthefup-comment-submit daexthefup-button\">Submit<\/button>\r\n\t\t\t\t\t\t<button class=\"daexthefup-comment-cancel daexthefup-button\">Cancel<\/button>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\r\n\t\t\t\t<div class=\"daexthefup-successful-submission-text\">Thanks for your feedback!<\/div>\r\n\r\n\t\t\t<\/div>\r\n\r\n\t\t\t","protected":false},"excerpt":{"rendered":"<p>In the previous tutorial, we discussed the technical implications of implementing logging in a framework. We discussed log4j utility at length. We discussed the basic components that constitute log4j from a usability perspective. With the Appenders and layouts, a user is leveraged to choose the desired logging format\/pattern and the &#8230; <\/p>\n<p class=\"read-more-container\"><a title=\"Common Selenium Scripting Errors and Troubleshooting\" class=\"read-more button\" href=\"https:\/\/www.softwaretestinghelp.com\/efficient-selenium-scripting-selenium-tutorial-27\/#more-4944\" aria-label=\"Read more about Common Selenium Scripting Errors and Troubleshooting\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":300673,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_helpful_pro_status":1,"footnotes":""},"categories":[214],"tags":[],"class_list":["post-4944","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-selenium-tutorials"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/posts\/4944","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/comments?post=4944"}],"version-history":[{"count":0,"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/posts\/4944\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/media\/300673"}],"wp:attachment":[{"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/media?parent=4944"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/categories?post=4944"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/tags?post=4944"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}