Sunday 18 September 2016

How to Open Browser in Incognito / InPrivate mode using Selenium / WebDriver

How to Open Chrome Browser in Incognito mode using Selenium / WebDriver ?

        We will use Chrome Drivers Capabilities & ChromeOptions to open Chrome browser in incognito mode. To be precise, we have to use argument --incognito  for ChromeOption as shown in below example-

How to Open Firefox Browser in Incognito / Private mode using Selenium / WebDriver ?

    We will use Firefox Profile  to open Firefox in private mode. To be precise, we will set browser.private.browsing.autostart in firefox profile preference.


How to Open Internet Explorer (IE) Browser in InPrivate mode using Selenium / WebDriver ?  

    We will use IE Driver Capabilities to open IE in InPrivate mode. To be precise we will use FORCE_CREATE_PROCESS capability along with IE_SWITCHES to which parameter would be -private



This is all for now.
Cheers!!

How to open a new tab in a browser using Selenium WebDriver?

TL;DR:This is a story. If a story does not fascinate you, jump to the solution.

Prologue:-
If you constantly monitor many forums for some reason like LinkedIn groups, Google groups, Stackoverflow for Selenium related queries, you will find a question that has been asked many times with the same answer. Yes, I’m talking about the below question -

How to open a new tab in a browser using Selenium WebDriver?

Or this might have been asked in different style like -

Open new tab instead of a new window using Selenium WebDriver


You will easily find an answer after quick Google search. Why this post? 
           Because I do not agree with the most accepted answer of this question. I am not saying that solution provided is wrong or it won't work, I am just saying that I disagree with the solution provided. What is the solution provided by the way -  Here starts our story.


Open a blank tab in a browser using Selenium WebDriver


And very obvious solution would be use of sendKeys 



           Now the above solution uses shortcut keys provided by the browser to open a new tab. Generally, all browsers use same keys to open a new tab. BUT shortcut keys are OS specific. Being said that solution provided is not platform agnostic. If you want to open the new tab on Macintosh / Mac OS, you have to send  COMMAND+‘t’  together so your code would be like - 


            So if think you have solved the problem straight away using sendKeys, think again. I mostly use windows OS and I estimate my effort based on the amount of time needed to make the code work on windows as selenium is platform agnostic but using such approaches we need to spend additional time on another platform. This is a lesson learned in a hard way. So if you still want to use send keys approach with both OS [which is mostly the case with web application] , your code would look like this-



            This is not very efficient code, every time you want to open a new tab you have to check OS and then you add the complexity of If else to open a new tab.

Solution:-   
            Why not use javascript? All major browsers support javascript. Use javascript to open a new tab in Selenium WebDriver. Simple & elegant solution.



Bonus:- Open URL in a new tab in Selenium WebDriver.

Sometimes you might need to open URL in a new tab which you evaluated after some operation in a browser. All you need is send a parameter to javascript as below.


This is all for now.
Cheers!!

Saturday 10 September 2016

How to uncheck proxy server settings in chrome browser using Selenium WebDriver

If you have read my past post, you might know that I follow a lot of forums to understand what type of issues are faced by the community. This helps me to broaden my knowledge. A couple of days ago, I stumbled upon this question on such forum on Facebook.


Question was-

How to uncheck proxy server settings in chrome browser using selenium Code ?” with Below image.




Proxy Server Setting for Browser
Proxy Server Setting for Browser


That was a really interesting question, thanks for this question ‎Roby Chauhan.


Defining problem statement:-

Uncheck proxy setting while invoking Chrome browser using Selenium WebDriver.



Understanding Problem Statement:-
I first tried to solve this question manually and realised once again that proxy setting that you applied in one browser are not just that browser specific but it OS specific.


That means if you set proxy in one browser it is applicable to all browser. If you set the wrong proxy in one browser you would not able to connect to the internet using any browser. Refer image below for more understanding. The image is taken from Chrome support group for education and help.


Order of Precedence for Chrome Policies:
Order of Precedence for Chrome Policies


So basically we are talking about this red box, where we doing some setting which we need to overcome while invoking chrome using Selenium WebDriver.


Solution:-
After a lot of search on Google, I found a solution somewhere on the internet, we need to use Capabilities & ChromeOptions of chrome. To be specific below option:-


options.addArguments("--no-proxy-server");


Please check working code snippet below:-



This is all for now.
Cheers!!

Thursday 8 September 2016

History Of Selenium WebDriver

I have assumed that you have already read my past blog entry, Introduction to Selenium WebDriver and here on the quest to find out technical answer of question - what selenium is?
Before getting to the answer, I want you to go though the below info-graphics of history of Selenium WebDriver. 


History of Selenium and Evolution of Selenium over time
History of Selenium



Now that you are aware of history, Can you answer what Selenium is?

Selenium is set of tools which includes :-
  • Selenium IDE
  • Selenium RC
  • WebDriver
  • Selenium Grid

So meaning of Selenium depends upon the context, citing the man himself - Simon Stewart here -

Unfortunately, the Selenium project uses a lot of jargon.

  • Selenium Core is the heart of the original Selenium implementation, and is a set of Javascript scripts that control the browser. This is sometimes referred to as "Selenium" and sometimes as "Core".

  • Selenium RC was the name given to the language bindings for Selenium Core, and is commonly, and confusingly, referred to as just "Selenium" or "RC". It has now been replaced by Selenium WebDriver, where RC's API is referred to as the "Selenium 1.x API"

  • Selenium WebDriver fits in the same niche as RC did, and has subsumed the original 1.x bindings. It refers to both the language bindings and the implementations of the individual browser controlling code. This is commonly referred to as just "WebDriver" or sometimes as Selenium 2. Doubtless, this will be contracted to "Selenium" over time.

The astute reader will have noticed that "Selenium" is used in a fairly general sense. Fortunately, context normally makes it clear which particular Selenium people are referring to.

For Reference : Selenium RC architecture

Selenium RC architecture
Selenium RC architecture

    On 29th July of 2016, Selenium Committee announced Selenium 3.0 beta  and from now onward Selenium is not going to support Selenium Remote Control[RC] API or Selenium 1.0 API. This means, once Selenium 3 is publicly released you can say Selenium is Selenium 3.0 which is enhanced version of WebDriver and you no longer need to know what Selenium core is or what RC is. You just need to know WebDriver implementation of Selenium.

This is all for now.
Cheers!!
PS:-
All images used in infographics are taken from Google. Selenium RC architecture diagram is taken from official Selenium website.

Information source for infographics :-
  1. Official Selenium Website
Copyrights held by Amol Chavan. Powered by Blogger.