{"id":4946,"date":"2025-05-30T16:11:19","date_gmt":"2025-05-30T10:41:19","guid":{"rendered":"https:\/\/www.testleaf.com\/blog\/?p=4946"},"modified":"2025-09-10T11:43:06","modified_gmt":"2025-09-10T06:13:06","slug":"cgi-interview-questions-answers","status":"publish","type":"post","link":"https:\/\/www.testleaf.com\/blog\/cgi-interview-questions-answers\/","title":{"rendered":"CGI Interview Questions &#038; Answers"},"content":{"rendered":"<div style=\"margin-top: 0px; margin-bottom: 0px;\" class=\"sharethis-inline-share-buttons\" ><\/div><!--[if lt IE 9]><script>document.createElement('audio');<\/script><![endif]-->\n<audio class=\"wp-audio-shortcode\" id=\"audio-4946-1\" preload=\"none\" style=\"width: 100%;\" controls=\"controls\"><source type=\"audio\/ogg\" src=\"https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/05\/CGI-Interview-Questions-Answers.ogg?_=1\" \/><a href=\"https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/05\/CGI-Interview-Questions-Answers.ogg\">https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/05\/CGI-Interview-Questions-Answers.ogg<\/a><\/audio>\n<h3><\/h3>\n<h3><b><span data-contrast=\"auto\">Introduction<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h3>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><span data-contrast=\"auto\">Are you preparing for a technical interview at CGI? Whether you&#8217;re applying for a role in automation testing, Java development, or full stack testing, it&#8217;s crucial to review key concepts across Core Java, Selenium WebDriver, frameworks, API testing, and more. <\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">In this blog, we\u2019ve compiled a comprehensive list of CGI Interview Questions &amp; Answers to help you assess your readiness and practice effectively. These questions are frequently asked during CGI\u2019s <a href=\"https:\/\/www.testleaf.com\/blog\/qa-technical-interview-questions-in-2024\/\">technical interviews<\/a> and cover both theoretical and hands-on topics.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h6><b><span data-contrast=\"auto\">Core Java:<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h6>\n<ol>\n<li><span data-contrast=\"auto\">Write a Java program to reverse the words in a sentence.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Write a Java program to extract only the non-duplicate characters from a string.\u00a0<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">What is the difference between<\/span> <span data-contrast=\"auto\">Lis<\/span><span data-contrast=\"auto\">t and<\/span><span data-contrast=\"auto\"> Se<\/span><span data-contrast=\"auto\">t in Java?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">How is encapsulation implemented in your framework?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ol>\n<h6><b><span data-contrast=\"auto\">Selenium WebDriver:<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h6>\n<ol>\n<li><span data-contrast=\"auto\">Given a web table, how would you write a dynamic XPath to extract the country name without<\/span> <span data-contrast=\"auto\">using link text or visible text?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Provide a code snippet using Explicit<\/span> <span data-contrast=\"auto\">Wait (<\/span><span data-contrast=\"auto\">WebDriverWait<\/span><span data-contrast=\"auto\">) in Selenium.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">What are some of the common<\/span> <span data-contrast=\"auto\">exceptions you\u2019ve faced in Selenium?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Describe a real-time Actions<\/span> <span data-contrast=\"auto\">class scenario you have automated.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">How do you handle JavaScript<\/span> <span data-contrast=\"auto\">alerts using Selenium?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">How do you switch between frames in Selenium?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ol>\n<h6><b><span data-contrast=\"auto\">Framework &amp; Design Patterns:<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h6>\n<ol>\n<li><span data-contrast=\"auto\">Explain the <a href=\"https:\/\/www.prowesstics.com\/blogs\/page-object-model\/\">Page Object Model (POM)<\/a> with examples.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">What type of framework have you developed or worked on? Please explain its components and structure.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">How are interfaces and abstract classes used in your test automation framework?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ol>\n<h6><b><span data-contrast=\"auto\">Cucumber BDD:<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h6>\n<ol>\n<li><span data-contrast=\"auto\">What is the purpose of the Background keyword in Cucumber BDD?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Explain Hooks in Cucumber. When and why do you use them?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">What is the purpose of Scenario Outline<\/span> <span data-contrast=\"auto\">in Cucumber?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">What are Cucumber plugins and which ones have you used?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">What is the role of DryRun in Cucumber and when do you use it?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ol>\n<h6><b><span data-contrast=\"auto\">Git &amp; Version Control:<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h6>\n<ol>\n<li><span data-contrast=\"auto\">Write the code to commit changes using <a href=\"https:\/\/www.testleaf.com\/blog\/best-git-branching-strategies-a-guide-to-git-best-practices\/\">Git<\/a>.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Explain how you handle merge conflicts in Git.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ol>\n<h6><b><span data-contrast=\"auto\">API Testing (REST Assured \/ Postman):<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h6>\n<ol>\n<li><span data-contrast=\"auto\">What is the difference between query parameters and path parameters in REST APIs?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">What are the commonly used HTTP methods in RESTful services?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">What is the difference between POST and PUT methods in REST API?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">What types of authentication mechanisms have you used in API testing?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">What are some error codes you&#8217;ve encountered during API testing and what do they signify?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ol>\n<h6><b><span data-contrast=\"auto\">Testing Concepts:<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h6>\n<ol>\n<li><span data-contrast=\"auto\">What is regression coverage and how do you ensure it?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">What is included in a Test Plan? List its key components.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">How do you estimate efforts in software testing?<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ol>\n<h1><b><span data-contrast=\"auto\">GCI INTERVIEW QUESTIONS WITH ANSWER<\/span><\/b><span data-ccp-props=\"{&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;469777462&quot;:[1878],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}\">\u00a0<\/span><\/h1>\n<h3><strong>1. Write a Java program to reverse the words in a sentence.\u00a0<\/strong><\/h3>\n<blockquote><p><i><span data-contrast=\"auto\">public class ReverseWords {<\/span><\/i><span data-ccp-props=\"{&quot;335559685&quot;:720,&quot;469777462&quot;:[1878],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">\u00a0\u00a0\u00a0\u00a0 public static void main(String[] args) {<\/span><\/i><span data-ccp-props=\"{&quot;335559685&quot;:360,&quot;469777462&quot;:[1878],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 String input = &#8220;Today is Tuesday&#8221;;<\/span><\/i><span data-ccp-props=\"{&quot;335559685&quot;:720,&quot;469777462&quot;:[1878],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 String[] words = input.split(&#8221; &#8220;);<\/span><\/i><span data-ccp-props=\"{&quot;335559685&quot;:720,&quot;469777462&quot;:[1878],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 StringBuilder reversed = new StringBuilder();<\/span><\/i><span data-ccp-props=\"{&quot;335559685&quot;:720,&quot;469777462&quot;:[1878],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 for (int i = words.length &#8211; 1; i &gt;= 0; i&#8211;) {<\/span><\/i><span data-ccp-props=\"{&quot;335559685&quot;:720,&quot;469777462&quot;:[1878],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 reversed.append(words[i]).append(&#8221; &#8220;);<\/span><\/i><span data-ccp-props=\"{&quot;335559685&quot;:720,&quot;469777462&quot;:[1878],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/i><span data-ccp-props=\"{&quot;335559685&quot;:720,&quot;469777462&quot;:[1878],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.println(reversed.toString().trim());<\/span><\/i><span data-ccp-props=\"{&quot;335559685&quot;:720,&quot;469777462&quot;:[1878],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">\u00a0\u00a0\u00a0 }<\/span><\/i><span data-ccp-props=\"{&quot;335559685&quot;:720,&quot;469777462&quot;:[1878],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">}<\/span><\/i><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p><\/blockquote>\n<p><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><strong>2. Write a Java program to extract only the non-duplicate characters from a string.\u00a0<\/strong><\/h3>\n<blockquote><p><i><span data-contrast=\"auto\">public class NonDuplicateChars {<\/span><\/i><span data-ccp-props=\"{&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:720,&quot;335559738&quot;:240,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">\u00a0\u00a0\u00a0 public static void main(String[] args) {<\/span><\/i><span data-ccp-props=\"{&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:720,&quot;335559738&quot;:240,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 String input = &#8220;Today is Tuesday&#8221;;<\/span><\/i><span data-ccp-props=\"{&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:720,&quot;335559738&quot;:240,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 input = input.replaceAll(&#8221; &#8220;, &#8220;&#8221;).toLowerCase(); \/\/ Remove spaces and convert to lowercase<\/span><\/i><span data-ccp-props=\"{&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:720,&quot;335559738&quot;:240,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 for (int i = 0; i &lt; input.length(); i++) {<\/span><\/i><span data-ccp-props=\"{&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:720,&quot;335559738&quot;:240,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 char c = input.charAt(i);<\/span><\/i><span data-ccp-props=\"{&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:720,&quot;335559738&quot;:240,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (input.indexOf(c) == input.lastIndexOf(c)) {<\/span><\/i><span data-ccp-props=\"{&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:720,&quot;335559738&quot;:240,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.print(c);<\/span><\/i><span data-ccp-props=\"{&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:720,&quot;335559738&quot;:240,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }}}}<\/span><span data-ccp-props=\"{&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:720,&quot;335559738&quot;:240,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p><\/blockquote>\n<h3><a href=\"https:\/\/www.testleaf.com\/all-courses.html\"><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter wp-image-4599 size-full\" src=\"https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/04\/Online-Classes.png\" alt=\"Online Classes\" width=\"2048\" height=\"512\" srcset=\"https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/04\/Online-Classes.png 2048w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/04\/Online-Classes-300x75.png 300w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/04\/Online-Classes-1024x256.png 1024w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/04\/Online-Classes-768x192.png 768w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/04\/Online-Classes-1536x384.png 1536w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/04\/Online-Classes-150x38.png 150w\" sizes=\"(max-width: 2048px) 100vw, 2048px\" \/><\/a><\/h3>\n<h3><strong>3. What is the difference between List and Set in Java?\u00a0<\/strong><\/h3>\n<ul>\n<li><span data-contrast=\"auto\">List is an ordered collection that can contain duplicate elements. It allows you to access elements by index.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Set is an unordered collection that does not allow duplicates. It ensures that each element is unique.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">List maintains the insertion order. The elements are returned in the same sequence they were added.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Set generally does not guarantee order (e.g., HashSet). However, specific implementations like LinkedHashSet maintain insertion order, and TreeSet maintains sorted order.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">List allows duplicate values. You can add the same element multiple times.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Set automatically removes duplicates and only stores unique elements.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">List<\/span><span data-contrast=\"auto\"> supports <\/span><span data-contrast=\"auto\">index<\/span><b><span data-contrast=\"auto\">&#8211;<\/span><\/b><span data-contrast=\"auto\">based<\/span> <span data-contrast=\"auto\">access<\/span><span data-contrast=\"auto\"> using methods like get(int index), set(int index, E element), etc.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Set<\/span><span data-contrast=\"auto\"> does <\/span><span data-contrast=\"auto\">not<\/span> <span data-contrast=\"auto\">support<\/span> <span data-contrast=\"auto\">index<\/span><b><span data-contrast=\"auto\">&#8211;<\/span><\/b><span data-contrast=\"auto\">based<\/span> <span data-contrast=\"auto\">access<\/span><span data-contrast=\"auto\"> because it does not maintain position-based storage.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">List<\/span><span data-contrast=\"auto\"> is better suited when you need frequent access to elements using index or when order matters.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Set<\/span><span data-contrast=\"auto\"> is better suited when <\/span><span data-contrast=\"auto\">fast<\/span> <span data-contrast=\"auto\">lookup<\/span><span data-contrast=\"auto\"> and <\/span><span data-contrast=\"auto\">uniqueness<\/span><span data-contrast=\"auto\"> are required.<\/span><\/li>\n<\/ul>\n<h3><strong>4. How is encapsulation implemented in your framework?<span style=\"font-size: 1.5em;\">\u00a0<\/span><\/strong><\/h3>\n<ul>\n<li><span data-contrast=\"auto\">Encapsulation is one of the core principles of Object-Oriented Programming, and we\u2019ve implemented it effectively in our automation framework to improve maintainability and thread safety.<\/span><br \/>\n<span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">For example, we encapsulate our WebDriver<\/span> <span data-contrast=\"auto\">instance using a utility class called DriverManager. Instead of exposing the WebDriver directly, we use a ThreadLocal&lt;WebDriver&gt;<\/span> <span data-contrast=\"auto\">variable, which ensures that each test thread gets its own isolated driver instance.<\/span><br \/>\n<span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">This is especially useful when running tests in parallel<\/span> <span data-contrast=\"auto\">execution, as it avoids issues related to thread conflicts. The WebDriver is declared as private static ThreadLocal&lt;WebDriver&gt; driver, and access is only provided through public<\/span> <span data-contrast=\"auto\">getter<\/span> <span data-contrast=\"auto\">and<\/span> <span data-contrast=\"auto\">setter<\/span> <span data-contrast=\"auto\">methods.<\/span><br \/>\n<span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">This approach follows encapsulation principles by hiding<\/span> <span data-contrast=\"auto\">the<\/span> <span data-contrast=\"auto\">driver<\/span> <span data-contrast=\"auto\">implementation and exposing only controlled methods to interact with it, improving both test<\/span> <span data-contrast=\"auto\">reliability<\/span> <span data-contrast=\"auto\">and<\/span> <span data-contrast=\"auto\">code<\/span> <span data-contrast=\"auto\">reusability.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<h3><strong>5. Given a web table, how would you write a dynamic XPath to extract the country name without using link text or visible text?\u00a0<\/strong><\/h3>\n<p><span data-contrast=\"auto\">To extract the country name dynamically from a web table without relying\u00a0\u00a0\u00a0 on link text or visible text, I prefer using <\/span><b><span data-contrast=\"auto\">relative XPath<\/span><\/b><span data-contrast=\"auto\"> that navigates through the structure of the table based on the DOM hierarchy, such as rows and cells.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">If the column position changes, I use a logic to identify the index of the header Country, then use that dynamic index to build the XPath for the country column cells. This keeps the locator truly dynamic and resistant to UI changes.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><strong>6. Provide a code snippet using Explicit Wait (WebDriverWait) in Selenium.\u00a0<\/strong><\/h3>\n<p><span data-contrast=\"auto\">Explicit Wait in Selenium is used when we want to wait for a specific condition to occur before proceeding further in the code. It is implemented using the WebDriverWait class along with ExpectedConditions.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:780,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">For example, I use Explicit Wait when I need to wait for an element to become clickable or visible before performing an action like click or sendKeys. This helps prevent issues like ElementNotInteractableException or NoSuchElementException during dynamic page loading.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:780,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><strong>\u00a07. What are some of the <a href=\"https:\/\/www.testleaf.com\/blog\/5-easy-tips-and-tricks-to-resolving-common-selenium-challenges\/\">common exceptions you\u2019ve faced in Selenium<\/a>?<\/strong><\/h3>\n<ol>\n<li><span data-contrast=\"auto\">NoSuchElementException<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">ElementNotInteractableException<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">StaleElementReferenceException<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">TimeoutException<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">ElementClickInterceptedException<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">InvalidSelectorException<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">WebDriverException<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">SessionNotCreatedException<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">UnhandledAlertException<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">NoAlertPresentException<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ol>\n<h3><strong>8. Describe a real-time Actions class scenario you have automated.\u00a0<\/strong><\/h3>\n<p><span data-contrast=\"auto\">In one of the web applications I automated \u2014 an internal <a href=\"https:\/\/www.hibob.com\/hr-glossary\/human-resources-management-system-hrms\/\">HR Management System<\/a> \u2014 there was a top navigation menu called <\/span><b><span data-contrast=\"auto\">\u201c<\/span><\/b><span data-contrast=\"auto\">Employees<\/span><b><span data-contrast=\"auto\">\u201d<\/span><\/b><span data-contrast=\"auto\">. When a user hovered the mouse over it, a submenu appeared with options like <\/span><b><span data-contrast=\"auto\">\u201c<\/span><\/b><span data-contrast=\"auto\">Manage<\/span> <span data-contrast=\"auto\">Employees<\/span><b><span data-contrast=\"auto\">\u201d<\/span><\/b><span data-contrast=\"auto\"> and <\/span><b><span data-contrast=\"auto\">\u201c<\/span><\/b><span data-contrast=\"auto\">Add<\/span> <span data-contrast=\"auto\">New<\/span> <span data-contrast=\"auto\">Employee<\/span><b><span data-contrast=\"auto\">\u201d<\/span><\/b><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">The challenge here was that the submenu would only appear on <\/span><span data-contrast=\"auto\">mouse<\/span> <span data-contrast=\"auto\">hover<\/span><span data-contrast=\"auto\">, and a regular click() operation wouldn&#8217;t work because the submenu elements were not visible in the DOM until the hover action was triggered.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">To handle this, I used the <\/span><span data-contrast=\"auto\">Actions<\/span> <span data-contrast=\"auto\">class<\/span><span data-contrast=\"auto\"> in Selenium. Using Actions.moveToElement(), I simulated the mouse hovering over the <\/span><b><span data-contrast=\"auto\">\u201c<\/span><\/b><span data-contrast=\"auto\">Employees<\/span><b><span data-contrast=\"auto\">\u201d<\/span><\/b><span data-contrast=\"auto\"> menu. Once the submenu became visible, I performed another move and click action on <\/span><b><span data-contrast=\"auto\">\u201c<\/span><\/b><span data-contrast=\"auto\">Add New Employee<\/span><b><span data-contrast=\"auto\">\u201d<\/span><\/b><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">This allowed the automation script to successfully navigate through the menu just like a real user would. It was especially helpful for testing modules where menu items are only visible through hover interactions \u2014 something common in admin dashboards, CRMs, and e-commerce sites.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><strong>9. How do you handle JavaScript alerts using Selenium?\u00a0<\/strong><\/h3>\n<p><span data-contrast=\"auto\">In Selenium, JavaScript alerts are handled using the Alert<\/span> <span data-contrast=\"auto\">interface, which is part of the org.openqa.selenium package. These alerts are pop-up dialogs generated by the browser using JavaScript \u2014 such as alert, confirm, or prompt boxes.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">To handle them, I first switch the driver\u2019s focus to the alert using driver.switchTo().alert(). Once switched, I can perform operations like:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<ul>\n<li><span data-contrast=\"auto\">accept() \u2013 to click OK<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">dismiss() \u2013 to click Cancel<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">getText() \u2013 to capture the alert message<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">sendKeys() \u2013 to input text in prompt alerts<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<h3><strong>10. How do you switch between frames in Selenium?\u00a0<\/strong><\/h3>\n<p><span data-contrast=\"auto\">In Selenium, we use the switchTo().frame() method to switch the driver\u2019s focus from the main webpage to a <\/span><span data-contrast=\"auto\">frame<\/span> <span data-contrast=\"auto\">or<\/span> <span data-contrast=\"auto\">iframe<\/span><span data-contrast=\"auto\">. This is necessary because elements inside a frame <\/span><span data-contrast=\"auto\">cannot be accessed directly<\/span><span data-contrast=\"auto\"> from the main page \u2014 Selenium must switch context first<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Web applications often embed content like ads, forms, or documents inside &lt;iframe&gt; tags. If we try to interact with elements inside a frame without switching to it, Selenium will throw a NoSuchElementException.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><strong>\u00a011. Explain the Page Object Model (POM) with examples.\u00a0<\/strong><\/h3>\n<p><span data-contrast=\"auto\">Page Object Model (POM)<\/span> <span data-contrast=\"auto\">is a<\/span> <span data-contrast=\"auto\">design pattern<\/span><span data-contrast=\"auto\"> used in <a href=\"https:\/\/www.testleaf.com\/blog\/selenium-automation-test-engineer-roles-responsibilities\/\">Selenium to make test automation<\/a> more<\/span> <span data-contrast=\"auto\">maintainable<\/span><b><span data-contrast=\"auto\">, <\/span><\/b><span data-contrast=\"auto\">readable<\/span><b><span data-contrast=\"auto\">, <\/span><\/b><span data-contrast=\"auto\">and<\/span> <span data-contrast=\"auto\">reusable<\/span><b><span data-contrast=\"auto\">.<\/span><\/b> <span data-contrast=\"auto\">In one of my projects, we had multiple pages \u2014 Login, Dashboard, Orders, and Reports. Each page had its own class. So when UI elements changed on the Login page, I only updated the LoginPage.java file \u2014 not all test cases. That made the maintenance much easier.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/www.testleaf.com\/about-us.html\"><img decoding=\"async\" class=\"aligncenter wp-image-4556 size-full\" src=\"https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/04\/One-to-one-mentorship.png\" alt=\"One to one mentorship\" width=\"2048\" height=\"512\" srcset=\"https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/04\/One-to-one-mentorship.png 2048w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/04\/One-to-one-mentorship-300x75.png 300w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/04\/One-to-one-mentorship-1024x256.png 1024w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/04\/One-to-one-mentorship-768x192.png 768w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/04\/One-to-one-mentorship-1536x384.png 1536w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/04\/One-to-one-mentorship-150x38.png 150w\" sizes=\"(max-width: 2048px) 100vw, 2048px\" \/><\/a><\/p>\n<h3><strong>12. What type of framework have you developed or worked on? Please explain its components and structure.?<\/strong><\/h3>\n<p><span data-contrast=\"auto\">I have worked on a <\/span><span data-contrast=\"auto\">Hybrid Framework<\/span><span data-contrast=\"auto\"> which combines the benefits of multiple frameworks such as <\/span><span data-contrast=\"auto\">Data-Driven<\/span><span data-contrast=\"auto\">, <\/span><span data-contrast=\"auto\">Keyword-Driven<\/span><span data-contrast=\"auto\">, and <\/span><span data-contrast=\"auto\">Page<\/span> <span data-contrast=\"auto\">Object Model (POM)<\/span><span data-contrast=\"auto\">. This framework was built using <\/span><span data-contrast=\"auto\">Java, <a href=\"https:\/\/www.testleaf.com\/blog\/6-ways-to-use-xpath-in-selenium-webdriver\/\">Selenium WebDriver<\/a>, TestNG<\/span><b><span data-contrast=\"auto\">,<\/span><\/b><span data-contrast=\"auto\"> and <\/span><span data-contrast=\"auto\">Apache POI<\/span><span data-contrast=\"auto\"> for Excel-based data handling.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h5 aria-level=\"3\"><b><span data-contrast=\"auto\">Framework Components and Structure:<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h5>\n<h5><b><span data-contrast=\"auto\">Base Class:<\/span><\/b><\/h5>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"26\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"2\"><span data-contrast=\"auto\">A reusable class that contains common setup code like browser launch, URL loading, browser configuration, and teardown logic (using @BeforeMethod and @AfterMethod in TestNG).<\/span><\/li>\n<\/ul>\n<p><b style=\"font-size: 1.2em; font-style: inherit;\"><span data-contrast=\"auto\">Page Classes (POM):<\/span><\/b><span style=\"font-size: 1.2em; font-weight: bold;\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"26\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"2\"><span data-contrast=\"auto\">Each web page has a separate Java class where <a href=\"https:\/\/www.testleaf.com\/blog\/web-elements-in-selenium-webdriver\/\">web elements<\/a> and related actions are defined. This helps in better <\/span><span data-contrast=\"auto\">modularity<\/span><span data-contrast=\"auto\"> and <\/span><span data-contrast=\"auto\">maintainability<\/span><span data-contrast=\"auto\">.<\/span><\/li>\n<\/ul>\n<h5><b style=\"font-size: 1.2em; font-style: inherit;\"><span data-contrast=\"auto\">Test Scripts:<\/span><\/b><span style=\"font-size: 1.2em; font-weight: bold;\">\u00a0<\/span><\/h5>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"26\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"2\"><span data-contrast=\"auto\">All <a href=\"https:\/\/www.testleaf.com\/blog\/is-chatgpt-changing-the-game-in-test-case-writing\/\">test cases<\/a> are written using TestNG. They call methods from the page classes to perform actions and assertions. Test scripts are well-organized by modules or features.<\/span><\/li>\n<\/ul>\n<h5><b><span data-contrast=\"auto\">Data Utility (Data-Driven):<\/span><\/b><\/h5>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"26\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"2\"><span data-contrast=\"auto\">Test data is maintained separately in Excel files. We use <a href=\"https:\/\/en.wikipedia.org\/wiki\/Apache_POI\">Apache POI<\/a> to read data and pass it dynamically to test methods using <\/span><b><span data-contrast=\"auto\">DataProvider<\/span><\/b><span data-contrast=\"auto\"> in TestNG.<\/span><\/li>\n<\/ul>\n<h5><b><span data-contrast=\"auto\">Keywords Utility (Keyword-Driven logic):<\/span><\/b><\/h5>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"26\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"2\"><span data-contrast=\"auto\">In some cases, we use external Excel sheets to define test steps and actions as keywords (e.g., &#8220;click&#8221;, &#8220;type&#8221;, &#8220;select&#8221;). These are mapped to actual methods via a central keyword engine.<\/span> <span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<h5><b><span data-contrast=\"auto\">Utilities:<\/span><\/b><\/h5>\n<ul>\n<li><span data-contrast=\"auto\">Contains helper classes like:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Wait utility (explicit waits)<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Screenshot utility<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Excel utility<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">File reading (properties\/config)<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Logger utility (e.g., Log4j)<\/span> <span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<h5><b><span data-contrast=\"auto\">Configuration Files:<\/span><\/b><\/h5>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"26\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"2\"><span data-contrast=\"auto\">We maintain a config.properties file for dynamic values like URLs, browser type, credentials, etc. This makes the framework flexible and environment-independent.<\/span><\/li>\n<\/ul>\n<h5><b><span data-contrast=\"auto\">TestNG XML:<\/span><\/b><\/h5>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"26\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"2\"><span data-contrast=\"auto\">Used to group and run test suites, control execution flow, and enable parallel execution.<\/span> <span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<h5><b><span data-contrast=\"auto\">Reports:<\/span><\/b><\/h5>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"26\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"2\"><span data-contrast=\"auto\">We use <\/span><span data-contrast=\"auto\">ExtentReports<\/span><span data-contrast=\"auto\"> or <\/span><span data-contrast=\"auto\">Allure Reports<\/span><span data-contrast=\"auto\"> to generate rich HTML reports after execution, including screenshots for failed steps.<\/span><\/li>\n<\/ul>\n<h5><b><span data-contrast=\"auto\">Maven or Gradle Integration (optional):<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h5>\n<p><span data-contrast=\"auto\">We used this hybrid framework to automate the regression suite of a travel booking application. It helped us run tests with multiple sets of input data, cover multiple browsers, and maintain the scripts easily as the application evolved.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><span data-contrast=\"auto\">\u00a0<strong>13. How are interfaces and abstract classes used in your test automation framework?<\/strong><\/span><\/h3>\n<p><span data-contrast=\"auto\">In my test automation framework, I use <\/span><span data-contrast=\"auto\">abstract<\/span> <span data-contrast=\"auto\">classes<\/span><span data-contrast=\"auto\"> and <\/span><span data-contrast=\"auto\">interfaces<\/span><span data-contrast=\"auto\"> to make the code more <\/span><span data-contrast=\"auto\">organized<\/span><b><span data-contrast=\"auto\">, <\/span><\/b><span data-contrast=\"auto\">reusable<\/span><b><span data-contrast=\"auto\">, <\/span><\/b><span data-contrast=\"auto\">and<\/span> <span data-contrast=\"auto\">scalable<\/span><span data-contrast=\"auto\"> by following object-oriented programming principles.<\/span> <span data-contrast=\"auto\">We create an<\/span> <span data-contrast=\"auto\">abstract class<\/span><b><span data-contrast=\"auto\">, <\/span><\/b><span data-contrast=\"auto\">usually called a<\/span> <span data-contrast=\"auto\">Base Class, that contains all the<\/span> <span data-contrast=\"auto\">common setup and teardown methods<\/span> <span data-contrast=\"auto\">required for every test.<\/span><\/p>\n<p><span data-contrast=\"auto\">We create an <\/span><span data-contrast=\"auto\">abstract<\/span> <span data-contrast=\"auto\">class<\/span><span data-contrast=\"auto\">, usually called a <\/span><span data-contrast=\"auto\">Base Class<\/span><span data-contrast=\"auto\">, that contains all the <\/span><span data-contrast=\"auto\">common setup and teardown <a href=\"https:\/\/www.testleaf.com\/blog\/different-software-testing-methods-every-qa-should-know\/\">methods<\/a><\/span><span data-contrast=\"auto\"> required for every test.<\/span><\/p>\n<h3><strong>\u00a014. Explain Hooks in Cucumber. When and why do you use them?\u00a0<\/strong><\/h3>\n<p><span data-contrast=\"auto\">Hooks in Cucumber are special methods that run automatically <\/span><span data-contrast=\"auto\">before or after each scenario or step execution<\/span><span data-contrast=\"auto\">. <\/span><\/p>\n<p><span data-contrast=\"auto\">They allow you to perform setup and teardown tasks without writing repetitive code inside each test scenario.<\/span><\/p>\n<p><span data-contrast=\"auto\">For example, the @Before hook is used to initialize the test environment, such as launching the browser and navigating to the application URL before the scenario runs. <\/span><\/p>\n<p><span data-contrast=\"auto\">Similarly, the @After hook is used to clean up after the scenario, like closing the browser, clearing cookies, or capturing screenshots if a test fails. <\/span><\/p>\n<p><span data-contrast=\"auto\">Hooks improve the maintainability and readability of test code by centralizing common preconditions and postconditions, ensuring each scenario runs in a fresh and controlled environment. <\/span><\/p>\n<p><span data-contrast=\"auto\">They are essential for avoiding duplication, reducing errors, and making the <a href=\"https:\/\/www.testleaf.com\/blog\/test-automation-framework-interview-questions\/\">test automation framework<\/a> more robust and scalable.<\/span><br \/>\n<span data-contrast=\"auto\">\u00a0<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><strong>\u00a015. What is the purpose of scenario outline in Cucumber?\u00a0<\/strong><\/h3>\n<p><span data-contrast=\"auto\">Scenario Outline<\/span><span data-contrast=\"auto\"> in Cucumber is used to run the same scenario multiple times with different sets of input data. It allows you to write a single scenario template with placeholders, and then provide various example values in an <\/span><span data-contrast=\"auto\">Examples<\/span><span data-contrast=\"auto\"> table. Each row in the Examples table represents a different test iteration with specific inputs.\u00a0<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">This helps avoid duplicating similar scenarios and makes tests more organized and maintainable when validating the same functionality with multiple data sets.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><strong>16. What are Cucumber plugins and which ones have you used?\u00a0<\/strong><\/h3>\n<p><span data-contrast=\"auto\">Cucumber plugins are additional <a href=\"https:\/\/www.testleaf.com\/blog\/10-ai-testing-tools-to-streamline-your-qa-process-in-2025\/\">tools<\/a> or extensions that enhance the functionality of your Cucumber test execution. Their main purpose is to help you generate <\/span><span data-contrast=\"auto\">test<\/span> <span data-contrast=\"auto\">execution<\/span> <span data-contrast=\"auto\">reports<\/span><span data-contrast=\"auto\"> in various formats, customize the test output, or integrate Cucumber with other tools and frameworks.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">When you run Cucumber tests, these plugins automatically collect information about the tests and produce <\/span><span data-contrast=\"auto\">readable<\/span> <span data-contrast=\"auto\">reports<\/span><span data-contrast=\"auto\"> or <\/span><span data-contrast=\"auto\">logs<\/span><span data-contrast=\"auto\"> that make it easier to analyze the test results.<\/span><\/p>\n<p><span data-contrast=\"auto\">In one of my projects, we configured Cucumber to use the pretty, <a href=\"https:\/\/www.w3schools.com\/js\/js_json_html.asp\">html, and json<\/a> plugins together. The pretty plugin helped during local test development by showing the steps clearly on the console. <\/span><\/p>\n<p><span data-contrast=\"auto\">The html report was automatically generated after each test run and uploaded to our test management system so that QA managers could review results easily. The json output was fed into an Allure reporting tool that created interactive, rich reports with screenshots and detailed logs.<\/span><\/p>\n<h3><strong>17. What is the role of DryRun in Cucumber and when do you use it?\u00a0<\/strong><\/h3>\n<p><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">DryRun<\/span><span data-contrast=\"auto\"> is a special mode in Cucumber that lets you check whether all the steps defined in your feature files have corresponding step definitions implemented in your code <\/span><span data-contrast=\"auto\">without actually running the tests<\/span><b><span data-contrast=\"auto\">.<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">When DryRun is enabled, Cucumber scans the feature files and verifies the mapping with step definitions. If any steps are missing implementations, it lists them so you can quickly identify and create the missing code.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><strong>\u00a018. Write the code to commit changes using Git.\u00a0<\/strong><\/h3>\n<blockquote><p><span data-contrast=\"auto\">\u00a0\u00a0\u00a0 <\/span><br \/>\n<span data-contrast=\"auto\">git add .<\/span><br \/>\n<span data-contrast=\"auto\">git commit -m &#8220;<\/span><span data-contrast=\"auto\">Your commit message here<\/span><span data-contrast=\"auto\">&#8220;<\/span><br \/>\n<span data-contrast=\"auto\">git add . \u2014 Stages <\/span><b><span data-contrast=\"auto\">all modified and new files<\/span><\/b><span data-contrast=\"auto\"> in the current directory for\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 commit.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">git commit -m &#8220;<\/span><span data-contrast=\"auto\">Your commit message here<\/span><span data-contrast=\"auto\">&#8221; \u2014 Commits the staged changes with a descriptive message inside quotes.<\/span><\/p>\n<p><span data-contrast=\"auto\">git add filename1 filename2<\/span><br \/>\n<span data-contrast=\"auto\">git commit -m &#8220;<\/span><span data-contrast=\"auto\">Your commit message<\/span><span data-contrast=\"auto\">&#8220;<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:360,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p><\/blockquote>\n<h3><strong> <a href=\"https:\/\/www.testleaf.com\/contact.html\"><img decoding=\"async\" class=\"aligncenter wp-image-4422 size-full\" src=\"https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/03\/placements.png\" alt=\"placements\" width=\"2048\" height=\"512\" srcset=\"https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/03\/placements.png 2048w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/03\/placements-300x75.png 300w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/03\/placements-1024x256.png 1024w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/03\/placements-768x192.png 768w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/03\/placements-1536x384.png 1536w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/03\/placements-150x38.png 150w\" sizes=\"(max-width: 2048px) 100vw, 2048px\" \/><\/a><\/strong><\/h3>\n<h3><strong>19. Explain how you handle merge conflicts in Git.\u00a0<\/strong><\/h3>\n<p><span data-contrast=\"auto\">When a <\/span><span data-contrast=\"auto\">merge conflict<\/span><span data-contrast=\"auto\"> occurs in Git, it means that changes in two branches affect the same part of a file and Git cannot automatically decide which version to keep. <\/span><\/p>\n<p><span data-contrast=\"auto\">To handle this, I first open the conflicted files and look for conflict markers (&lt;&lt;&lt;&lt;&lt;&lt;&lt; , = = = = = = =, &gt;&gt;&gt;&gt;&gt;&gt;&gt;) that show the conflicting changes. Then, I carefully review both versions, decide which changes to keep, modify the code accordingly, and remove the conflict markers. <\/span><\/p>\n<p><span data-contrast=\"auto\">After resolving all conflicts, I stage the fixed files using git add and complete the merge by committing the changes with git commit. Finally, I verify that the merged code works correctly before pushing it to the remote repository. This process ensures that no important code is lost and the project remains stable.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><strong>20. What is the difference between query parameters and path parameters in <a href=\"https:\/\/www.testleaf.com\/blog\/the-6-biggest-challenges-of-rest-api-testing\/\">REST APIs<\/a>?\u00a0<\/strong><\/h3>\n<p><span data-contrast=\"auto\">\u00a0\u00a0\u00a0 <\/span><b><span data-contrast=\"auto\">Path parameters<\/span><\/b><span data-contrast=\"auto\"> are part of the URL path itself and are used to identify a specific resource. They are mandatory and appear as placeholders within the URL, for example: \/users\/{userId} where {userId} is a path parameter specifying which user to access.<\/span><\/p>\n<p><span data-contrast=\"auto\">\u00a0\u00a0\u00a0 <\/span><b><span data-contrast=\"auto\">Query parameters<\/span><\/b><span data-contrast=\"auto\">, on the other hand, are optional key-value pairs\u00a0\u00a0 appended to the end\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 of the URL after a question mark (?). They are used to filter, sort, or customize the response, such as \/users?age=25&amp;sort=asc, where age and sort are query parameters controlling which users to fetch and how to order them.<\/span><br \/>\n<span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><strong>\u00a021. What are the commonly used HTTP methods in RESTful services?\u00a0<\/strong><\/h3>\n<p><span data-contrast=\"auto\">The commonly used HTTP methods in RESTful services are:<\/span><\/p>\n<p><b><span data-contrast=\"auto\">GET<\/span><\/b><span data-contrast=\"auto\"> \u2014 Retrieves data or resources from the server without modifying anything. For example, fetching user details.<\/span><br \/>\n<b><span data-contrast=\"auto\">POST<\/span><\/b><span data-contrast=\"auto\"> \u2014 Sends data to the server to create a new resource. For example, creating a new user.<\/span><br \/>\n<b><span data-contrast=\"auto\">PUT<\/span><\/b><span data-contrast=\"auto\"> \u2014 Updates an existing resource completely or creates it if it doesn\u2019t exist. For example, updating user information.<\/span><br \/>\n<b><span data-contrast=\"auto\">PATCH<\/span><\/b><span data-contrast=\"auto\"> \u2014 Partially updates an existing resource with only the changes. For example, updating only the user\u2019s email.<\/span><br \/>\n<b><span data-contrast=\"auto\">DELETE<\/span><\/b><span data-contrast=\"auto\"> \u2014 Removes a resource from the server. For example, deleting a user.<\/span><br \/>\n<b><span data-contrast=\"auto\">OPTIONS<\/span><\/b><span data-contrast=\"auto\"> \u2014 Returns the HTTP methods supported by the server for a specific resource, often used for CORS preflight requests.<\/span><\/p>\n<h3><strong>\u00a022. What is the difference between POST and PUT methods in <a href=\"https:\/\/www.testleaf.com\/blog\/the-power-of-rest-api-improving-scalability-flexibility-and-integration\/\">REST API<\/a>?\u00a0<\/strong><\/h3>\n<p><span data-contrast=\"auto\">The <\/span><span data-contrast=\"auto\">POST<\/span><span data-contrast=\"auto\"> method is used to create a new resource on the server, and each time you send a POST request, it may create a new entry\u2014even if the data is the same\u2014because it&#8217;s <\/span><span data-contrast=\"auto\">not<\/span> <span data-contrast=\"auto\">idempotent<\/span><span data-contrast=\"auto\">. <\/span><\/p>\n<p><span data-contrast=\"auto\">The <\/span><span data-contrast=\"auto\">PUT<\/span><span data-contrast=\"auto\"> method is used to update an existing resource or create it if it doesn\u2019t already exist. It is <\/span><span data-contrast=\"auto\">idempotent<\/span><span data-contrast=\"auto\">, meaning sending the same request multiple times will always result in the same outcome. With POST, the server generates the resource ID, while with PUT, the client specifies the ID in the URL.<\/span><br \/>\n<span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><strong>23. What types of authentication mechanisms have you used in API testing?\u00a0<\/strong><\/h3>\n<p><span data-contrast=\"auto\">\u00a0\u00a0\u00a0 In API testing, I have used various authentication mechanisms to access secured endpoints. The most common one is <\/span><span data-contrast=\"auto\">Basic Authentication<\/span><span data-contrast=\"auto\">, where the username and password are encoded in Base64 and sent in the request header.<\/span><\/p>\n<p><span data-contrast=\"auto\"> I\u2019ve also worked with <\/span><span data-contrast=\"auto\">Bearer Token Authentication<\/span><span data-contrast=\"auto\">, where an access token is passed in the header to authorize requests, commonly used in OAuth-based systems. In addition, I\u2019ve handled <\/span><span data-contrast=\"auto\">API Key Authentication<\/span><span data-contrast=\"auto\">, where a unique key is included either in the header or as a query parameter. These mechanisms ensure that only authorized users or systems can access the APIs during testing.<\/span><br \/>\n<span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><strong>\u00a024. What are some error codes you&#8217;ve encountered during API testing and what do they signify?\u00a0<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"36\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:990,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Status\/400\"><b><span data-contrast=\"auto\">400 Bad Request<\/span><\/b><\/a><span data-contrast=\"auto\"> \u2013 This means the server could not understand the request due to invalid syntax, like sending malformed JSON or missing required fields.<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"36\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:990,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">401 Unauthorized<\/span><\/b><span data-contrast=\"auto\"> \u2013 This indicates that authentication has failed or the user is not logged in; usually happens when the token or credentials are missing or incorrect.<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"36\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:990,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">403 Forbidden<\/span><\/b><span data-contrast=\"auto\"> \u2013 The request is valid, but the user does not have permission to access the resource, even if authenticated.<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"36\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:990,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"4\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">404 Not Found<\/span><\/b><span data-contrast=\"auto\"> \u2013 This means the requested resource does not exist on the server, such as a wrong endpoint or ID.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"36\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:990,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"5\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">405 Method Not Allowed<\/span><\/b><span data-contrast=\"auto\"> \u2013 The HTTP method (like POST, PUT) is not allowed on that particular endpoint.<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"36\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:990,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"6\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">500 Internal Server Error<\/span><\/b><span data-contrast=\"auto\"> \u2013 This is a generic server-side error, indicating that something went wrong on the server while processing the request.<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"36\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:990,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"7\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">502 Bad Gateway<\/span><\/b><span data-contrast=\"auto\"> \u2013 This happens when the server acting as a gateway receives an invalid response from the upstream server.<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"36\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:990,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"8\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">503 Service Unavailable<\/span><\/b><span data-contrast=\"auto\"> \u2013 The server is temporarily unavailable, possibly due to maintenance or overload.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<h3><strong>25. What is regression coverage and how do you ensure it?\u00a0<\/strong><\/h3>\n<p><span data-contrast=\"auto\">Regression coverage means ensuring that all previously working features of\u00a0\u00a0 an application continue to work after code changes. To ensure it, I maintain a <\/span><span data-contrast=\"auto\">comprehensive suite of regression test cases<\/span><span data-contrast=\"auto\"> that cover critical functionalities, and I <\/span><span data-contrast=\"auto\">run these tests regularly<\/span><span data-contrast=\"auto\">, especially after each deployment or code change. <\/span><\/p>\n<p><span data-contrast=\"auto\">I also use <\/span><span data-contrast=\"auto\">test automation<\/span><span data-contrast=\"auto\"> to speed up the regression cycle, <\/span><span data-contrast=\"auto\">traceability matrices<\/span><span data-contrast=\"auto\"> to map test cases to requirements, and <\/span><span data-contrast=\"auto\">code coverage tools<\/span><span data-contrast=\"auto\"> to identify untested areas. This helps catch unexpected issues early and ensures application stability.<\/span><br \/>\n<span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\"> <a href=\"https:\/\/www.testleaf.com\/course\/selenium-automation-certification-training-course.html\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4242 size-full\" src=\"https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/03\/Selenium.jpg\" alt=\"selenium training in chennai\" width=\"2048\" height=\"512\" srcset=\"https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/03\/Selenium.jpg 2048w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/03\/Selenium-300x75.jpg 300w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/03\/Selenium-1024x256.jpg 1024w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/03\/Selenium-768x192.jpg 768w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/03\/Selenium-1536x384.jpg 1536w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/03\/Selenium-150x38.jpg 150w\" sizes=\"(max-width: 2048px) 100vw, 2048px\" \/><\/a><\/span><\/p>\n<h3><strong>26. What is included in a Test Plan? List its key components?\u00a0<\/strong><\/h3>\n<h3><\/h3>\n<p><span data-contrast=\"auto\">A <\/span><span data-contrast=\"auto\">Test Plan<\/span><span data-contrast=\"auto\"> is a detailed document that outlines the strategy, objectives, scope, schedule, resources, and activities for testing a software application. Its key components typically include:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<ol>\n<li><b><span data-contrast=\"auto\">Test Plan ID<\/span><\/b><span data-contrast=\"auto\"> \u2013 A unique identifier for the test plan.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Introduction<\/span><\/b><span data-contrast=\"auto\"> \u2013 Overview of the <a href=\"https:\/\/www.testleaf.com\/blog\/top-10-automation-testing-project-ideas-for-beginners-and-experts\/\">project and objectives of the test<\/a> plan.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Test Items<\/span><\/b><span data-contrast=\"auto\"> \u2013 The features or modules to be tested.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Scope (In-scope &amp; Out-of-scope)<\/span><\/b><span data-contrast=\"auto\"> \u2013 What will and will not be tested.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Test Strategy<\/span><\/b><span data-contrast=\"auto\"> \u2013 The approach to testing (manual, automation, levels of testing, etc.).<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Test Environment<\/span><\/b><span data-contrast=\"auto\"> \u2013 Details of the hardware, software, tools, and setup needed.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Test Deliverables<\/span><\/b><span data-contrast=\"auto\"> \u2013 Documents and reports to be produced (e.g., test cases, test data, test summary report).<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Schedule<\/span><\/b><span data-contrast=\"auto\"> \u2013 Timeline for each testing activity.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Roles and Responsibilities<\/span><\/b><span data-contrast=\"auto\"> \u2013 Who will perform which testing tasks.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Entry and Exit Criteria<\/span><\/b><span data-contrast=\"auto\"> \u2013 Conditions to start and stop testing.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Risk and Mitigation<\/span><\/b><span data-contrast=\"auto\"> \u2013 Possible risks and how to handle them.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Approvals<\/span><\/b><span data-contrast=\"auto\"> \u2013 Sign-off from stakeholders.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ol>\n<p><span data-contrast=\"auto\">These components ensure structured and effective testing throughout the software development lifecycle.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><strong>27. How do you estimate efforts in <a href=\"https:\/\/www.testleaf.com\/blog\/top-20-interview-questions-in-software-testing\/\">software testing<\/a>?<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"auto\">Effort estimation in software testing involves predicting the time and resources needed to complete testing activities. I typically estimate efforts based on the complexity of the application, the number and size of test cases, the types of testing required (like functional, regression, integration), and the test environment setup time. I also consider team experience, past project data, and include buffer time for unexpected issues. Estimation techniques like Work Breakdown Structure (WBS), Three-Point Estimation, or Test Case Point method can be used to break the work into smaller tasks and assign realistic time frames. This helps in better planning, resource allocation, and on-time delivery.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><b><span data-contrast=\"auto\">Conclusion<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\"><a href=\"https:\/\/www.testleaf.com\/blog\/cgi-interview-questions-answers\/\">Preparing for CGI interviews<\/a> requires a strong grasp of both technical fundamentals and real-world project experience. The questions shared above are designed to reflect what CGI typically looks for in candidates across various domains like Java, automation frameworks, <a href=\"https:\/\/www.testleaf.com\/course\/rest-api-testing-certification-training-course.html\">API testing<\/a>, and version control. Focus on writing clean, maintainable code, understanding design patterns, and demonstrating clarity in your test strategy. With consistent practice and clear communication, you\u2019ll be well-positioned to succeed in your CGI interview.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<h5><strong>We Also Provide Training In:<\/strong><\/h5>\n<ul>\n<li><a href=\"https:\/\/www.testleaf.com\/course\/selenium-automation-certification-training-course.html\"><strong>Advanced Selenium Training<\/strong><\/a><\/li>\n<li><a href=\"https:\/\/www.testleaf.com\/course\/playwright.html\"><strong>Playwright Training<\/strong><\/a><\/li>\n<li><a href=\"https:\/\/www.testleaf.com\/course\/genai-qa-engineers-training-course.html\"><strong>Gen AI Training<\/strong><\/a><\/li>\n<li><a href=\"https:\/\/www.testleaf.com\/course\/aws-cloud-architect-certification-training-course.html\"><strong>AWS Training<\/strong><\/a><\/li>\n<li><a href=\"https:\/\/www.testleaf.com\/course\/rest-api-testing-certification-training-course.html\"><strong>REST API Training<\/strong><\/a><\/li>\n<li><a href=\"https:\/\/www.testleaf.com\/course\/full-stack-developer-certification-training-course.html\"><strong>Full Stack Training<\/strong><\/a><\/li>\n<li><a href=\"https:\/\/www.testleaf.com\/course\/appium-mobile-automation-certification-training-course.html\"><strong>Appium Training<\/strong><\/a><\/li>\n<li><a href=\"https:\/\/www.testleaf.com\/course\/dev-ops-master-certification-training-course.html\"><strong>DevOps Training<\/strong><\/a><\/li>\n<li><a href=\"https:\/\/www.testleaf.com\/course\/apache-jmeter-testing-training-course.html\"><strong>JMeter Performance Training<\/strong><\/a><\/li>\n<\/ul>\n<h6><strong>Author\u2019s Bio<\/strong>:<\/h6>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2404 alignleft\" src=\"https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2023\/04\/Untitled-design.png\" sizes=\"(max-width: 250px) 100vw, 250px\" srcset=\"https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2023\/04\/Untitled-design.png 250w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2023\/04\/Untitled-design-150x150.png 150w, https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2023\/04\/Untitled-design-96x96.png 96w\" alt=\"\" width=\"250\" height=\"250\" \/><\/p>\n<p>As CEO of TestLeaf, I\u2019m dedicated to transforming software testing by empowering individuals with real-world skills and advanced technology. With 24+ years in software engineering, I lead our mission to shape local talent into global software professionals. Join us in redefining the future of test engineering and making a lasting impact in the tech world.<\/p>\n<p><strong>Babu Manickam<\/strong><\/p>\n<p>CEO \u2013 Testleaf<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"https:\/\/in.linkedin.com\/in\/babu-manickam\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.testleaf.com\/blog\/wp-content\/uploads\/2025\/07\/linkedin.png\" alt=\"LinkedIn Logo\" width=\"28\" height=\"28\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction\u00a0 \u00a0Are you preparing for a technical interview at CGI? Whether you&#8217;re applying for a role in automation testing, Java development, or full stack testing, it&#8217;s crucial to review key concepts across Core Java, Selenium WebDriver, frameworks, API testing, and more. \u00a0 In this blog, we\u2019ve compiled a comprehensive list of CGI Interview Questions &amp; &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/www.testleaf.com\/blog\/cgi-interview-questions-answers\/\"> <span class=\"screen-reader-text\">CGI Interview Questions &#038; Answers<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":4947,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"site-sidebar-layout":"default","site-content-layout":"default","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","footnotes":""},"categories":[62],"tags":[473,157,65,122],"class_list":["post-4946","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-interview-questions","tag-interview","tag-interview-preparation","tag-interview-questions","tag-top-interview-questions"],"acf":[],"aioseo_notices":[],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.testleaf.com\/blog\/wp-json\/wp\/v2\/posts\/4946","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.testleaf.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.testleaf.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.testleaf.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.testleaf.com\/blog\/wp-json\/wp\/v2\/comments?post=4946"}],"version-history":[{"count":11,"href":"https:\/\/www.testleaf.com\/blog\/wp-json\/wp\/v2\/posts\/4946\/revisions"}],"predecessor-version":[{"id":6829,"href":"https:\/\/www.testleaf.com\/blog\/wp-json\/wp\/v2\/posts\/4946\/revisions\/6829"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.testleaf.com\/blog\/wp-json\/wp\/v2\/media\/4947"}],"wp:attachment":[{"href":"https:\/\/www.testleaf.com\/blog\/wp-json\/wp\/v2\/media?parent=4946"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.testleaf.com\/blog\/wp-json\/wp\/v2\/categories?post=4946"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.testleaf.com\/blog\/wp-json\/wp\/v2\/tags?post=4946"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}