Selenium Tricky Questions

When does Implicitly Wait is applicable for findElements method. ?

Implicit wait in selenium is applicable for all findElement statements, but the applicability of implicit wait to the findElements is Limited.

Implicitly wait is applicable on findElements only when there is no elements present, selenium webdriver moves to next command the moment it finds a single element.

If there is Zero matching elements selenium waits till the time it reaches provided implicitly wait

Scenario 1 : Consider a page having 100 checkboxes and applied implicit wait is 30 Seconds
When the page is loading selenium tries to find all the matching elements, but at that moment there no matching elements.

After 10 seconds of wait 1 check box is loaded, now selenium finds that one checkbox and concludes that there is only one element, so it ends the wait and moves to the next command.

Selenium doesnot wait till 100 check boxes loaded into the page, as webdriver doesnot know how many elements going to be present on the page.

Scenario 2 : Consider a page having 0 checkboxes and applied implicit wait is 30 Seconds
Selenium tries to find all the matching elements in DOM, but so far no check box is loaded.

Now there is zero matches so selenium waits till 30 seconds, and if does not find element after 30 seconds selenium webdriver throws NoSuchElementEXception

How do you check a option is present in a dropdown or not ? *New

Answer 1 : Find the dropdown and Create an object to the Select class and Retrieve all options using getOptions() method and Iterate all option and compare the text.

Answer 2 : Find the dropdown and create the object to Select class and try to select the option using selectByVisibleText, if the option is there then it will be selected otherwise it will throw an exception. So based on this exception we can decide whether the element is there or not

Answer 3 : Write the xpath/css which matches the all the options(//select/option) inside the dropdown and get InnerHtml (why the hell I am not using getText ?, have a Guess). And compare the text and check.

Answer 4 : Write locator for the option directly and find the element and do nothing, if we are able to find element then result is positive otherwise negative

Doubt on 4 : How do you decide, it present only on dropdown not anywhere else on the page, because in both cases Answer 4 results positive.

Answer 5 : Write an Xpath/Css locator based on the parent(dropdown) and then find child (the target) like //select[@id='some']/option[text()='cherchertech'], if element found then positive otherwise negative. We can have try and catch block here

Answer 6 : What if try and catch block is irritating/irrelevant to test, then use the same xpath as Answer 4 but use findElements instead of findElement. Now check the number of elements, if 0 then negative otherwise positive All above answers are correct, use it based on requirement but answer in interview based on your experience, I would go with answers 5 and 6

How do you check whether an element enabled or not ?, condition: there is no such attribute as "disabled" in the element ?

Explanation : When there is no such attribute as disabled in the element, the isEnabled() method from selenium does not work.

Solution : There is some attribute which makes the element to be disabled so we have to find the element and get the attribute using getAttribute() method then compare what is the value for enabled and disabled. Based on this we can conclude whether the element is enabled or not.

Why do we write Webdriver driver = new FirefoxDriver(), why not SearchContext driver = new FirefoxDriver() ?

Don't hurry to answer like, Webdriver is an interface and FirefoxDriver is Class. This is right but you need to understand the question first.

He is asking about SearchContext, which is a parent interface of Webdriver, so the answer would be. Yes, we can write like that because SearchContext is the parent of all the Interfaces and classes present in selenium.

Is it possible to automate captcha ?

Yes, we can automate the captcha but there is a limitation that we can automate our own captcha but not others'

For example, a company has captcha on their website, so somebody has to check it but same time it is not possible for a manual tester to check all the captcha's.

So we have to automate the captcha in dev/qa environment by getting the captcha answer in some attribute of the element, so based on that attribute we can enter the value to the text bar which accepts captcha value.

We should remove this attribute while pushing the code to Live environment.

Testcase failed saying "ElementNotVisible", but when analyzed manually element is visible ? How to Handle it ?

There are a couple of things which may cause this issue.

  • The element may not be visible in automation due to the speed of selenium.
  • If you closed a hidden division pop up, and tried to perform the action, then there is a chance that hidden division popup' animation was not over which could cause this issue.
  • There is could be another element which has the same xpath or locator on some other page

Example : Consider you have an element which has xpath as //button[@id='abc'] on page X, by clicking some tab on xpage navigates the user to Y page, Now there is an element on Y page which have xpath same as //button[@id='abc'].

But when you launch your application, the application may be directly landed on page Y. So with this scenario, if you try to perform on the element on Y page it could throw an Exception.


Step by step Solution :

  • First, verify whether it is really any of the above scenario ?
  • Print number of elements present with that xpath using the findElements method
  • If there is only one element please follow program 1, If there is more than 1 element follow program 2.


Program 1 : Using Explicit wait (Wait for the element to be visible): 1. Open the url (please change according to your application).
2. Create an object for WebdriverWait set wait time as 60 seconds.


                        		WebDriverWait wait = new WebDriverWait(driver, 60 /*seconds*/);
                        	

3. Use visibilityOfElementLocated method present in Expected conditions class


                        		wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(buttonXpath)));
                        	

Complete Program 1 with Explicit wait (Wait for the element to be visible)

// PLEASE DO WRITE IMPORT STATEMENTS

		// set the webdriver Wait as 60 seconds
		WebDriverWait wait = new WebDriverWait(driver, 60 /*seconds*/);
		String buttonXpath = "//button[@id='abc']";
		// wait for the element to be visible, max wait time is 60 seconds
		wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(buttonXpath)));
		// clicks the button which has xpath = //button[@id='abc']
		driver.findElement(By.xpath(buttonXpath)).click();
                        	
9

Program 2 : Using findElements And IsDisplayed:
1. Open the URL (please change according to your application).
2. Set implicitly wait for 1 minute
3. Find all the elements which match the xpath and store them 4. iterate over the element we stored 5. verify if the element is displayed or not
6. Click element if displayed or ignore
7. Once the element is clicked, break the loop.

Complete Program 2 : findElements And IsDisplayed:

// PLEASE DO WRITE IMPORT STATEMENTS
		// open webpage
		driver.get("https://chercher.tech/practice/practice-dropdowns");
		String buttonXpath = "//button[@id='abc']";
		// find all the elements with that xpath match
		List elements = driver.findElements(By.xpath(buttonXpath));
		// iterate over the elements
		for (WebElement webElement : elements) {
			// check whether element is displayed or not,
			if (webElement.isDisplayed()) {
				// if displayed click the element and break the loop.
				webElement.click();
				break;
			}
		}
                        	
Do implicit wait has any impact on findElements ?

Most of the time implicit wait will not work with findElements but only when there are no element for the given locator then only implicit wait works from findElements.

Comment / Suggestion Section
Point our Mistakes and Post Your Suggestions
  • Anshita Srivastava
    This post is so helpful, the way of explaining all the answers is quite easily understandable.
    Reply
  • Thiru
    Thank you so much Karthik...
    It's really very helpful...
    Could you please add some more tricky interview questions?
    Reply
    • Author
      Definitely, Why not
      Reply
  • Piyush
    These questions and answers are really helpful and different from the ones which are available in other blogs..keep going your content is really helpful
    Reply
    • Author
      Thanks, Piyush
      Reply
  • Reply
  • Shiva
    Please add more tricky questions Kathik
    Reply
    • karthiQ [ admin]
      We will add more questions on tricky interview question
      Reply
  • Shiva
    Hi karthiQ, you are doing a great job man!
    Reply
    • karthiQ [ admin]
      we are glad, it is useful to you
      Reply
  • Riccha
    Hi KarthiQ,
    
    Content is very good in your website but many links are broken, Navigation is not proper.
    
    Reply
    • karthiQ [ admin]
      Thanks Riccha,
      I have fixed half of the broken links, Please let me know more about navigation issue
      Reply
  • Protractor Training

    new tutorial I am starting new Protractor training batch on Weekends. Course starts from 08-june-2019 [10am IST to 1 pm IST] based on online for 6 days, and course fee is INR 10, 000.

    Interested people can confirm the seat by calling to +91 8971673487 or whatsapp to +91 9003381224

    Find the course content : View Content