Skip to content

Automation Testing Interview Questions for Telecom Companies

40 questions weighted to the interview style of telecom companies — 13 easy, 27 medium.

How telecom companies interview for Automation Testing

Telecom and network companies handle huge volumes of customer and network data. Interviews focus on fundamentals, practical skills, and scenario questions about reliability, large datasets and customer-facing systems.

This set focuses on REST Assured (8), TestNG Framework (8), Core Java for Testers (6), Selenium WebDriver (3).

HR round Online assessment (aptitude + technical) Managerial round Technical interview Technical interview 1
Solved — telecom companiesStart practicing
3 QUESTIONS FREESign up to unlock the full question bank and track your progress.Unlock every question and answer, then continue practising company-wise and package-wise.
3 questions free Unlock the rest in seconds
01

What is the difference between an array and an ArrayList?

Save to ▾
Show answer
Arrays have a fixed size and can hold primitives; ArrayList grows dynamically, holds objects and offers helper methods.
02

What does a good commit message look like?

Save to ▾
Show answer
A short summary line under about 60 characters in the imperative mood, like "Add retry for flaky payment test", followed by a blank line and a body explaining why the change was made if not obvious. Reference the ticket ID. Small focused commits with clear messages make reviews faster and help when using git log or git bisect to find when a test broke.
03

What is the post section in a Jenkins declarative pipeline?

Save to ▾
Show answer
post defines steps that run after stages based on the result: always, success, failure, unstable, changed, fixed and cleanup. In test pipelines, always publishes JUnit results and archives screenshots and reports, failure sends a Slack or email alert, and cleanup removes the workspace. Putting reporting in post ensures results are saved even when tests fail.
04

How do you switch between windows and tabs?

Save to ▾
Show answer
Get getWindowHandles(), loop to find the target, and call driver.switchTo().window(handle); switch back using the stored parent handle.
05

How do you test an API that returns paginated results?

Save to ▾
Show answer
Call the first page, check page size, total count and the next link or cursor. Loop through pages until there is no next page, collecting IDs, then assert no duplicates and the total matches the reported count. Also test edge cases: page 0, a page beyond the last, invalid page size and sorting stability. Cap the loop to avoid endless runs if the API misbehaves.
06

What is Docker Compose and why is it useful for Selenium Grid?

Save to ▾
Show answer
Docker Compose lets you define several containers, their images, ports, environment variables and networks in one docker-compose.yml file and start them together with docker compose up. For Selenium it means a hub plus Chrome, Firefox and Edge nodes, and even the application under test, start with one command on any laptop or CI agent. The file is version-controlled, so every tester and pipeline uses the same Grid setup.
07

What is the Cucumber runner class and what does it configure?

Save to ▾
Show answer
The runner tells the test engine where features and glue code are and how to report. With JUnit 5 it uses @Suite, @IncludeEngines("cucumber"), @SelectClasspathResource("features") and @ConfigurationParameter for glue, plugins and tags. With TestNG you extend AbstractTestNGCucumberTests and use @CucumberOptions(features, glue, tags, plugin, monochrome). The runner lets Maven or Jenkins run features like normal tests.
08

Write Java code to count the occurrences of each character in a string.

Save to ▾
Show answer
String s = "automation"; Map<Character, Integer> counts = new LinkedHashMap<>(); for (char c : s.toCharArray()) { counts.put(c, counts.getOrDefault(c, 0) + 1); } System.out.println(counts); // a=2, u=1, t=2, o=2, m=1, i=1, n=1
09

How do you send form parameters and headers in REST Assured?

Save to ▾
Show answer
Use formParam("username", "asha") and formParam("password", "pass") for application/x-www-form-urlencoded bodies; REST Assured sets the content type for you. Add headers with header("X-Client", "web") or headers(map) for many at once. Cookies use cookie(name, value). Keep common headers in a RequestSpecification so individual tests only add what is specific to them.
10

What are relative locators in Selenium 4?

Save to ▾
Show answer
Locators such as above, below, toLeftOf and near that find elements by their position relative to another element.
11

How do you avoid page object classes becoming too large?

Save to ▾
Show answer
Split pages into components for repeated or complex areas, keep only user actions as public methods, move generic helpers to BasePage or utilities, and avoid one method per element. If a page has distinct modes like view and edit, use separate classes. Review page classes during code review and refactor when they cross a few hundred lines.
12

What is a DataProvider in TestNG?

Save to ▾
Show answer
@DataProvider returns Object[][]; a @Test(dataProvider = "name") method runs once per row — the basis of data-driven tests, often reading Excel or JSON.
13

What are listeners in TestNG?

Save to ▾
Show answer
Classes like ITestListener that react to events such as test start, success or failure, commonly used for screenshots and reporting.
14

How do you attach a screenshot to the Cucumber report when a scenario fails?

Save to ▾
Show answer
@After public void afterScenario(Scenario scenario) { if (scenario.isFailed()) { byte[] shot = ((TakesScreenshot) driver) .getScreenshotAs(OutputType.BYTES); scenario.attach(shot, "image/png", scenario.getName()); } driver.quit(); }
15

An API returns a list in random order and your assertion on the first element fails intermittently. How do you fix it?

Save to ▾
Show answer
Do not assert on positions when the API does not guarantee order. Use order-independent Hamcrest matchers such as hasItem, hasItems or containsInAnyOrder on the extracted field, for example body("name", hasItems("Pen", "Book")). Or use GPath filtering like find { it.id == 42 } to pick the right item before checking its fields. If order matters for the feature, raise it as a requirement and request a sort parameter.
16

Your price comparison test fails because 19.99 + 0.01 is not equal to 20.0. Why?

Save to ▾
Show answer
double uses binary floating point, which cannot represent many decimal values exactly, so small rounding errors appear. For money, use BigDecimal created from strings and compare with compareTo(), or compare doubles with a tolerance such as Assert.assertEquals(actual, expected, 0.001). Also strip currency symbols and commas before parsing UI text.
17

Should assertions be written inside page objects?

Save to ▾
Show answer
Generally no. Page objects should expose state and actions, such as getErrorMessage() or isLoggedIn(), and tests should make the assertions. This keeps page classes reusable across positive and negative tests and keeps the test intent visible. A small exception is a simple check that the correct page has loaded, often done in the constructor or an isAt() method.
18

What is JSON and how is it used in API testing?

Save to ▾
Show answer
A lightweight text format of key-value pairs and arrays used in API requests and responses, validated field by field in tests.
19

Write a REST Assured PUT test that updates a resource using a POJO.

Save to ▾
Show answer
@Test public void updateUser() { User update = new User("Ravi", "Lead QA"); given().spec(req) .pathParam("id", 7) .body(update) .when() .put("/users/{id}") .then() .statusCode(200) .body("job", equalTo("Lead QA")); }
20

Tests running inside Docker cannot reach the application running on the host's localhost. Why, and how do you fix it?

Save to ▾
Show answer
Inside a container, localhost means the container itself, not the host machine. On Docker Desktop use host.docker.internal as the host name. On Linux add extra_hosts with host.docker.internal:host-gateway, or use the host's IP. A cleaner option is running the application in the same Compose network and calling it by its service name, such as http://web:8080. Make sure the app listens on 0.0.0.0, not only 127.0.0.1.
21

How does the DataProvider annotation work?

Save to ▾
Show answer
A method annotated with @DataProvider returns a 2D object array and the test with dataProvider = "name" runs once per row.
22

What are Appium capabilities and which ones are essential to start a session?

Save to ▾
Show answer
Capabilities are key-value settings sent when creating a session that tell Appium what to automate. Essential ones are platformName, appium:automationName (UiAutomator2 or XCUITest), appium:deviceName or appium:udid, and either appium:app (path to the apk or ipa) or appPackage and appActivity for an installed Android app. In Appium 2 non-standard capabilities need the appium: prefix. In Java you usually set them through UiAutomator2Options or XCUITestOptions.
23

What is method chaining in Page Object Model?

Save to ▾
Show answer
Method chaining means page methods return a page object, either this or the next page, so calls can be linked: loginPage.enterUser("asha").enterPassword("x").submit().openOrders(). Returning the next page models navigation and makes tests read like a user journey. Be careful when an action can lead to different pages; return the correct type or provide separate methods for success and failure.
24

Write a Java stream that extracts and sorts product prices from a list of WebElements.

Save to ▾
Show answer
List<Double> prices = driver.findElements(By.cssSelector(".price")) .stream() .map(WebElement::getText) .map(t -> t.replaceAll("[^0-9.]", "")) .map(Double::parseDouble) .sorted() .collect(Collectors.toList()); System.out.println(prices);
25

What is a constructor and can it be overloaded?

Save to ▾
Show answer
A special method that initialises an object. It can be overloaded with different parameters, and testers use it to pass the WebDriver into page classes.
26

Mobile tests pass on the emulator but fail on a low-end real device. How do you investigate?

Save to ▾
Show answer
Low-end devices are slower, so fixed waits and short timeouts expire before screens render. Replace sleeps with explicit waits and increase timeouts sensibly. Check for vendor-specific pop-ups, battery optimisation dialogs or different keyboards on that brand. Compare screen size and resolution, since coordinate-based taps break. Collect device logs with adb logcat and screen recordings to see what the app was doing. Also check whether the app crashed due to low memory.
27

How do you extract an auth token with JSON Extractor and use it in later JMeter requests?

Save to ▾
Show answer
Add a JSON Extractor as a child of the login sampler. Set the variable name to token, the JSON path expression to $.access_token, match number 1 and a default like TOKEN_NOT_FOUND so failures are visible. Then add an HTTP Header Manager at Thread Group level with Authorization set to Bearer ${token}. Each thread extracts and uses its own token, because JMeter variables are per thread.
28

What is the difference between parallel="methods", "classes" and "tests" in testng.xml?

Save to ▾
Show answer
methods runs each @Test method in its own thread, giving the most parallelism but requiring fully independent tests and thread-safe drivers. classes runs all methods of one class in the same thread, with different classes in parallel. tests runs each <test> tag in parallel, often used to run different browsers. instances is also available for factory instances. thread-count sets the pool size.
29

What is the difference between Scenario and Scenario Outline in Cucumber?

Save to ▾
Show answer
A Scenario runs once with fixed values. A Scenario Outline is a template with placeholders in angle brackets, and an Examples table supplies rows of data, so the same steps run once per row. Use an Outline when only the data changes, such as testing login with valid, locked and expired users. Avoid huge Examples tables; if data grows large, move it to an external source.
30

What is Selenium Grid and why use it?

Save to ▾
Show answer
It runs tests in parallel across multiple machines and browsers using a hub and nodes, cutting execution time and increasing browser coverage.
31

How do you build dynamic JSON request bodies without hard-coded strings?

Save to ▾
Show answer
Use POJOs with a builder pattern or Lombok @Builder, so tests write User.builder().name("Ravi").role("QA").build(). For quick cases use a HashMap or Jackson ObjectNode. For large templates, keep a JSON file and change fields with a JSON library. Combine with a faker library for unique values. This avoids escaping issues and makes changes to the schema easy to update.
32

How do you handle authentication types in REST Assured?

Save to ▾
Show answer
Basic auth uses auth().preemptive().basic(user, pass). Bearer tokens are set as a header: header("Authorization", "Bearer " + token). OAuth 2.0 can use auth().oauth2(token) after fetching the token from the token endpoint. API keys go in a header or query param. Fetch tokens once per suite or cache them with an expiry check rather than logging in before every test.
33

What is the difference between Comparable and Comparator in Java?

Save to ▾
Show answer
Comparable defines the natural order inside the class (compareTo); Comparator defines custom orders externally (compare), useful for sorting test data in several ways.
34

How do you extract a value from one response and use it in the next request?

Save to ▾
Show answer
String token = given().body(creds).when().post("/login") .then().statusCode(200) .extract().path("token"); given() .header("Authorization", "Bearer " + token) .when() .get("/orders") .then() .statusCode(200);
35

What is JsonPath and how do you use it for nested JSON?

Save to ▾
Show answer
JsonPath (Groovy GPath syntax in REST Assured) navigates JSON with dot notation. For {"data":{"items":[{"price":10}]}} you use data.items[0].price. You can also filter: data.items.findAll { it.price > 5 }.name returns names of items costing more than 5. Use it inside body() assertions or via response.jsonPath().getList("data.items.name") to extract values for further checks.
36

How do you take a screenshot on failure in TestNG?

Save to ▾
Show answer
Implement ITestListener.onTestFailure(): File src = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); then copy it into the reports folder.
37

Half of your TestNG tests are skipped in CI with no failure shown. What could cause it?

Save to ▾
Show answer
Usually a configuration method failed, such as @BeforeClass or @BeforeSuite throwing an exception, which makes TestNG skip dependent tests. Other causes are dependsOnMethods on a failed test, a group filter excluding setup methods without alwaysRun, or a DataProvider that threw an exception. Check the configuration failures section of the report and the log for the first exception.
38

Chrome inside a Docker node keeps crashing with session deleted because of page crash. How do you fix it?

Save to ▾
Show answer
This is almost always shared memory exhaustion, because Docker's default /dev/shm of 64 MB is too small for Chrome. Set shm_size: 2gb in Compose or --shm-size=2g in docker run. Also check the container's memory limit and the number of sessions per node, since several browsers in one container multiply memory use. Heavy pages or memory leaks in long sessions can also crash tabs, so restart sessions between test classes.
39

What is the difference between @Test(priority) and dependsOnMethods in TestNG?

Save to ▾
Show answer
priority only orders tests; a lower number runs first, and a failed test does not stop the others. dependsOnMethods creates a real dependency: if the parent test fails, dependent tests are skipped. Both make tests order-dependent, which hurts parallel runs and isolation, so use them sparingly. Prefer independent tests with their own setup.
40

How do you test that a method throws an expected exception in TestNG?

Save to ▾
Show answer
Use @Test(expectedExceptions = IllegalArgumentException.class) and optionally expectedExceptionsMessageRegExp to check the message. The test passes only if that exception is thrown. For more control, use Assert.assertThrows(IllegalArgumentException.class, () -> service.withdraw(-5)), which returns the exception so you can inspect it further. This style is clearer because the check applies to one line, not the whole test.

Telecom companies (5)

Frequently asked questions

How are Automation Testing interviews at telecom companies different?

Telecom and network companies handle huge volumes of customer and network data. Interviews focus on fundamentals, practical skills, and scenario questions about reliability, large datasets and customer-facing systems.

Which telecom companies are covered?

This page links to 5 telecom companies, including Airtel, Jio Platforms, Ericsson, Nokia, Vodafone Idea. Each has its own page with rounds and a separate practice set.

What rounds should I expect?

Common rounds at these companies include: HR round; Online assessment (aptitude + technical); Managerial round; Technical interview; Technical interview 1. The exact process varies by company and role.