<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Debasmita Adhikari</title>
    <description>The latest articles on DEV Community by Debasmita Adhikari (@debasmita-a).</description>
    <link>https://dev.to/debasmita-a</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1508971%2F22fc3b65-d098-4827-aac2-94500055e48f.jpeg</url>
      <title>DEV Community: Debasmita Adhikari</title>
      <link>https://dev.to/debasmita-a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/debasmita-a"/>
    <language>en</language>
    <item>
      <title>Loop Control statements in Python : break, continue, pass</title>
      <dc:creator>Debasmita Adhikari</dc:creator>
      <pubDate>Thu, 22 Aug 2024 08:12:45 +0000</pubDate>
      <link>https://dev.to/debasmita-a/loop-control-statements-in-python-break-continue-pass-mmk</link>
      <guid>https://dev.to/debasmita-a/loop-control-statements-in-python-break-continue-pass-mmk</guid>
      <description>&lt;p&gt;In Python, we have 3 loop control statements : break, continue and pass.&lt;/p&gt;

&lt;h2&gt;
  
  
  break
&lt;/h2&gt;

&lt;p&gt;When the condition satisfies, the loop breaks and comes out of the loop.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for i in range(10):
    print(i)
    if i == 5:
        break

# It will print : 0 to 5 and once the condition satisfies, 
# then the loop breaks.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  continue
&lt;/h2&gt;

&lt;p&gt;When the condition satisfies, it is skipped and moves on to next iteration in the loop.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for i in range(10):
    if i == 5:
        continue
    print(i)

# It will print : 0 to 9 except 5.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for i in range(10):
    if i != 5 :
        continue
    print(i)

# It will print just 5.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  pass
&lt;/h2&gt;

&lt;p&gt;It does nothing. It acts as a placeholder.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for i in range(10):
    if i == 5:
        pass
    print(i)

# It will not do anything, even if the condition satisfies
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>python</category>
      <category>loops</category>
    </item>
    <item>
      <title>Why we don't use RemoteWebDriver driver = new ChromeDriver()</title>
      <dc:creator>Debasmita Adhikari</dc:creator>
      <pubDate>Fri, 28 Jun 2024 09:42:23 +0000</pubDate>
      <link>https://dev.to/debasmita-a/why-we-dont-use-remotewebdriver-driver-new-chromedriver-6j6</link>
      <guid>https://dev.to/debasmita-a/why-we-dont-use-remotewebdriver-driver-new-chromedriver-6j6</guid>
      <description>&lt;h3&gt;
  
  
  Introduction:
&lt;/h3&gt;

&lt;p&gt;This is more of an Object Oriented Programming interview question rather than a Selenium WebDriver question.&lt;/p&gt;

&lt;p&gt;First of all, there is absolutely &lt;strong&gt;no problem&lt;/strong&gt; with a browser driver object being referenced by RemoteWebDriver instance variable. There will never be any problem with the automation testing framework script, until and unless Selenium decides to deprecate RemoteWebDriver (very unlikely).&lt;/p&gt;

&lt;p&gt;Now let's quickly see the Selenium WebDriver hierarchy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;SearchContext&lt;/em&gt;&lt;/strong&gt; interface : It has 2 methods - findElement(By locator) and findElements(By locator).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;WebDriver&lt;/em&gt;&lt;/strong&gt; interface : It extends SearchContext interface. So it has to override both the SearchContext methods. Along with that, it provides its own abstract methods.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;WebElement&lt;/em&gt;&lt;/strong&gt; interface : It extends SearchContext interface. So it automatically overrides both of its parent interface's methods. Along with that, it provides its own abstract methods.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RemoteWebDriver&lt;/strong&gt; class : It implements WebDriver interface. So it overrides all the methods of WebDriver and SearchContext interfaces.&lt;/p&gt;

&lt;h3&gt;
  
  
  RemoteWebDriver : the 1st Concrete class in WebDriver API hierarchy :
&lt;/h3&gt;

&lt;p&gt;💡&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A concrete class is a class in which, all methods, including overridden and its own methods, are implemented.&lt;/p&gt;

&lt;p&gt;All methods from its parent and grandparent interfaces are implemented in RemoteWebDriver class. This is the concept of Inheritance in Object Oriented Programming. RemoteWebDriver and subsequent child classes such as ChromeDriver, EdgeDriver etc. are essentially inheriting properties of WebDriver. &lt;em&gt;The properties are declared in WebDriver interface. How these properties should work are defined in RemoteWebDriver class&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Using RemoteWebDriver instead of WebDriver :
&lt;/h3&gt;

&lt;p&gt;The way we use the WebDriver API in our automation testing framework, there is no fundamental difference in WebDriver and RemoteWebDriver functionality-wise.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RemoteWebDriver driver1 = new ChomeDriver();
driver1.get("https://google.com");
//or,
WebDriver driver2 = new ChromeDriver();
driver2.get("https://google.com");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, both driver1 and driver2 will have same methods available to them. It won't affect any functionalities within the framework.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why we don't write RemoteWebDriver = new ChromeDriver() :
&lt;/h3&gt;

&lt;p&gt;According to object oriented programming, we should,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"code to interfaces"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That means, we should be able to maintain abstraction in our code as much as we can. Even though there is nothing wrong with writing RemoteWebDriver = new ChromeDriver(), we are exposing the implemented class here, rather than hiding it.&lt;/p&gt;

&lt;p&gt;For better readability, we write WebDriver driver = new ChromeDriver(). We are concerned about what a method does, rather than how it does it. This level of abstraction can be achieved by creating driver object referenced by instance of the interface.&lt;/p&gt;

&lt;p&gt;Thanks and Happy learning!&lt;/p&gt;

</description>
      <category>webdriver</category>
      <category>remotewebdrive</category>
      <category>inheritance</category>
    </item>
    <item>
      <title>5 top casting options in Selenium WebDriver API</title>
      <dc:creator>Debasmita Adhikari</dc:creator>
      <pubDate>Thu, 13 Jun 2024 10:52:16 +0000</pubDate>
      <link>https://dev.to/debasmita-a/5-top-casting-options-in-selenium-webdriver-api-4f5b</link>
      <guid>https://dev.to/debasmita-a/5-top-casting-options-in-selenium-webdriver-api-4f5b</guid>
      <description>&lt;h2&gt;
  
  
  Introduction :
&lt;/h2&gt;

&lt;p&gt;WebDriver API is one of the 3 components provided by Selenium. It is an interface that has many declared methods that help perform certain actions on the browser.&lt;/p&gt;

&lt;p&gt;In this article, we will investigate all 5 top casting combinations while creating a browser driver object (ChromeDriver, EdgeDriver, FirefoxDriver, etc.) and see why they are not all suitable to use.&lt;/p&gt;

&lt;p&gt;This is also very often asked in automation testing interviews, to explain the WebDriver API hierarchy and the different type castings.&lt;/p&gt;

&lt;h2&gt;
  
  
  SearchContext interface :
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;SearchContext&lt;/em&gt; is the parent interface to WebDriver and WebElement interfaces. it has two methods : findElement() and findElements().&lt;/p&gt;

&lt;h2&gt;
  
  
  WebElement interface :
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;WebElement&lt;/em&gt; is an interface and it has several methods that help performing certain actions on elements on the web page. Every element on a web page is known as web elements in Selenium.&lt;/p&gt;

&lt;h2&gt;
  
  
  WebDriver interface :
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;WebDriver&lt;/em&gt; is an interface. WebDriver API is the one that launches and performs actions on the browser. It has methods to manipulate the browser components.&lt;/p&gt;

&lt;p&gt;It has child classes that we use extensively, such as : ChromeDriver, ChromiumDriver, EdgeDriver, FirefoxDriver, InternetExplorerDriver, RemoteWebDriver, SafariDriver etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  RemoteWebDriver class :
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;RemoteWebDriver&lt;/em&gt; class is the concrete class that implements all the declared methods of its parent and grand parent interfaces.&lt;/p&gt;

&lt;h2&gt;
  
  
  ChromiumDriver class :
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;ChromiumDriver&lt;/em&gt; class’s direct parent class is &lt;em&gt;RemoteWebDriver&lt;/em&gt;. It has child classes such as ChromeDriver and EdgeDriver.&lt;/p&gt;

&lt;h2&gt;
  
  
  5 different top castings to create a driver object :
&lt;/h2&gt;

&lt;p&gt;Now, let’s analyze different type castings among the WebDriver API while creating a browser driver object. And we will see why some of them don’t work. Here, we will take ChromeDriver as example browser driver class.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. SearchContext and ChromeDriver top casting :
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SearchContext driver = new ChromeDriver();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this case, the driver will have only two methods : findElement() and findElements() coming from SearchContext. This top casting is kind of moot, as we won’t be able to launch the browser to perform any action.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. ChromiumDriver and ChromeDriver top casting:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ChromiumDriver driver = new ChromeDriver();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, only ChromiumDriver specific methods will be available to the driver. That means, the ChromiumDriver class provides certain methods which are useful to a chromium browser i.e ChromeDriver and EdgeDriver.&lt;/p&gt;

&lt;p&gt;As ChromiumDriver inherits from RemoteWebDriver class, the methods such as get(String url), findElement(By locator), findElements(By locator), manage(), close(), quit() etc. will be available to the driver object reference.&lt;/p&gt;

&lt;p&gt;So if one wants to perform cross browser testing, it won’t be possible.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. ChromeDriver class : (not a top cast)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ChromeDriver driver = new ChromeDriver();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this case also, we will have only ChromeDriver class specific methods available. ChromeDriver inherits from ChromiumDriver and hence, methods like get(String url), findElement(By locator), findElements(By locator), manage(), close(), quit() etc. will be available to the driver object reference.&lt;/p&gt;

&lt;p&gt;And obviously, cross browser testing will not be possible.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. RemoteWebDriver and ChromeDriver top casting :
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RemoteWebDriver driver = new ChromeDriver();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;RemoteWebDriver is the &lt;strong&gt;concrete&lt;/strong&gt; class that has &lt;strong&gt;implementations&lt;/strong&gt; of all WebDriver and WebElement interface declared methods. It is a valid top casting.&lt;/p&gt;

&lt;p&gt;Here, we have a RemoteWebDriver type reference variable, which can be referenced to a FirefoxDriver or EdgeDriver class object if needed. As it is a parent class, it is not limited to specific browser driver object types as in case of ChromiumDriver type reference. (in points 2 and 3)&lt;/p&gt;

&lt;h3&gt;
  
  
  5. WebDriver and ChromeDriver top casting :
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WebDriver driver1 = new RemoteWebDriver("remoteAddress",capabilities);
WebDriver driver2 = new ChromeDriver();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;WebDriver interface is the grand parent interface to ChromeDriver class. As ChromeDriver is already inheriting from RemoteWebDriver class, all implemented methods will be available to the ChromeDriver object.&lt;/p&gt;

&lt;p&gt;Also, we have a WebDriver type reference variable, which can be referenced to a FirefoxDriver or EdgeDriver class objects if needed.&lt;/p&gt;

&lt;p&gt;The first driver reference driver1 will launch the browser on a remote machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion :
&lt;/h2&gt;

&lt;p&gt;All the above top castings are valid of course. It’s not like there will be any compiler error or runtime exceptions. But all of them won’t be useful to our requirements, as they shouldn’t. The hierarchy is designed to be used in a certain way.&lt;/p&gt;

&lt;p&gt;Please feel free to provide any arguments or inputs in the comments.&lt;/p&gt;

&lt;p&gt;Happy learning!&lt;/p&gt;

</description>
      <category>selenium</category>
      <category>webdriver</category>
      <category>remotewebdriver</category>
      <category>topcasting</category>
    </item>
    <item>
      <title>How To Set Up Docker Selenium GRID</title>
      <dc:creator>Debasmita Adhikari</dc:creator>
      <pubDate>Fri, 07 Jun 2024 13:34:53 +0000</pubDate>
      <link>https://dev.to/debasmita-a/how-to-set-up-docker-selenium-grid-2e8f</link>
      <guid>https://dev.to/debasmita-a/how-to-set-up-docker-selenium-grid-2e8f</guid>
      <description>&lt;h2&gt;
  
  
  What is a Selenium GRID?
&lt;/h2&gt;

&lt;p&gt;Selenium GRID is one of the 3 components of Selenium : Selenium WebDriver, GRID and IDE. The architecture consists of a Hub and several nodes. Through our test script, we will connect to the Selenium Hub url and it will run tests on the nodes.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Parallel execution&lt;/em&gt; : A grid helps in execution of test script on a virtual machine(s) instead of local machine. Suppose there are few hundred testcases, which will take couple of hours to complete execution and it would totally seize your local machine for that time duration.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Scaling up browser containers&lt;/em&gt; : A grid enables execution of test script on scaled up browser instances. If I want to run my tests only on Chrome browser and I have hundreds of testcases, I can scale up Chrome instances and run them in parallel which will significantly reduce execution time. After that I can scale it down as per my requirement.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cross browser testing&lt;/em&gt; : On my system, I don't have a specific browser and I don't want to set it up. I can always configure the grid to have those browsers and run my tests on them!&lt;/p&gt;

&lt;h2&gt;
  
  
  Standalone Selenium GRID :
&lt;/h2&gt;

&lt;p&gt;This is something Selenium itself provides. We need to download and install the Selenium Server (preferably latest version and Java version &amp;gt;= 11) on our machine.&lt;/p&gt;

&lt;p&gt;Navigate to &lt;a href="https://www.selenium.dev/downloads/"&gt;Selenium Server Download&lt;/a&gt; page and we can see all the language compatible zip files : Or directly click on the selenium-server-4.21.0.jar file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Famnnz1ui5w8hvq4tga4s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Famnnz1ui5w8hvq4tga4s.png" alt="Selenium Server grid official page" width="800" height="149"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We will see the complete installation and execution of test scripts using Selenium server in another article.&lt;/p&gt;

&lt;h2&gt;
  
  
  Docker Selenium GRID :
&lt;/h2&gt;

&lt;p&gt;Selenium provides Docker images to run on our machine and all the grid installation and different browser setup etc. will be done automatically, we don't need to do anything! (that means we don't need to configure the grid, browser instances etc. step by step- like in case of Selenium Server.)&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a Docker Compose file?
&lt;/h2&gt;

&lt;p&gt;According to official Docker documentations :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Docker Compose is a tool for defining and running multi-container applications. It is the key to unlocking a streamlined and efficient development and deployment experience.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Compose simplifies the control of your entire application stack, making it easy to manage services, networks, and volumes in a single, comprehensible YAML configuration file. Then, with a single command, you create and start all the services from your configuration file.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is a .yml/.yaml, where all the selenium grid configurations are defined. Selenium provides these files for all types of releases : &lt;a href="https://github.com/SeleniumHQ/docker-selenium/blob/trunk/README.md"&gt;SeleniumHQ/docker-selenium&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Run a Docker Compose file?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Start Docker&lt;/em&gt;&lt;/strong&gt;: Once we have installed Docker on our system, it is also know as the Docker Desktop, just open it. There. It has started.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Get a docker compose file and store it in a folder&lt;/em&gt;&lt;/strong&gt; : Here is a sample docker compose file :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# To execute this docker-compose yml file use `docker-compose -f docker-compose-v3-beta-channel.yml up`
# Add the `-d` flag at the end for detached execution
# To stop the execution, hit Ctrl+C, and then `docker-compose -f docker-compose-v3-beta-channel.yml down`
version: "3"
services:
  chrome:
    image: selenium/node-chrome:4.20.0-20240505
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443

  edge:
    image: selenium/node-edge:4.20.0-20240505
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443

  firefox:
    image: selenium/node-firefox:4.20.0-20240505
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443

  selenium-hub:
    image: selenium/hub:4.20.0-20240505
    container_name: selenium-hub
    ports:
      - "4442:4442"
      - "4443:4443"
      - "4444:4444"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;&lt;strong&gt;Run the docker compose file&lt;/strong&gt;&lt;/em&gt;: Go to docker compose folder and open command prompt.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxbkpz8e4mxr9jjqikn4t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxbkpz8e4mxr9jjqikn4t.png" alt="docker-compose file on local system" width="796" height="126"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the command prompt, run the command &lt;em&gt;&lt;strong&gt;docker compose up -d&lt;/strong&gt;&lt;/em&gt; . (-d means in detached mode. Your command prompt will be available to you for running further commands)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp73uhybogp6tlscan9fk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp73uhybogp6tlscan9fk.png" alt="Running docker compose up -d command" width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9bwovyfxv3ct0zw1zwwa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9bwovyfxv3ct0zw1zwwa.png" alt="Containers created from docker compose file" width="800" height="594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Pulling&lt;/em&gt; means the images are being downloaded and pulled from Docker image hub.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Open Selenium grid on browser &lt;/strong&gt;&lt;/em&gt;: After all the installations are complete, open any browser and enter the url : localhost:4444/ui . The grid runs on the port 4444 by default, as defined in the docker compose file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgwg8q1as5nntqo42o9i0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgwg8q1as5nntqo42o9i0.png" alt="Selenium Docker GRID on localhost" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"localhost", because it is not hosted on any cloud or other remote machines. It is running on local machine.&lt;/p&gt;

&lt;p&gt;That's it! The Selenium GRID is up and running. We just need to configure our test script, so it runs the tests on remote machine.&lt;/p&gt;

&lt;p&gt;Happy learning!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>grid</category>
      <category>selenium</category>
      <category>dockercompose</category>
    </item>
    <item>
      <title>Taking my first step with technical blogging!</title>
      <dc:creator>Debasmita Adhikari</dc:creator>
      <pubDate>Tue, 04 Jun 2024 12:02:58 +0000</pubDate>
      <link>https://dev.to/debasmita-a/taking-my-first-step-with-technical-blogging-2lo</link>
      <guid>https://dev.to/debasmita-a/taking-my-first-step-with-technical-blogging-2lo</guid>
      <description>&lt;h2&gt;
  
  
  About me..
&lt;/h2&gt;

&lt;p&gt;I am software engineer with avid interest in software quality testing. I have extensive experience is manual testing, though few years ago, I decided to move on to learning automation testing. Well, who doesn't like to see stuff happening on their screen on clicking Run button!&lt;/p&gt;

&lt;p&gt;I would always start, became inconsistent, then forgetting most of it!! Learning to be consistent even with failures took some time. Consistency will easily come when you see the results and with proper motivation.&lt;/p&gt;

&lt;p&gt;I believe in the old school ways of learning. Reading out loud (when we were kids), it engages both your visual and auditory senses, practicing with pen and paper, it engages your visual sense and your brain with fewer distractions.&lt;/p&gt;

&lt;p&gt;While these methods are unbeatable, at the end of the day, we have to use an IDE, keyboard and mouse. I am a fan of the dark theme for text editors and it makes coding more fun! As we move forward, I would love to share what I do to make it interesting to learn programming.&lt;/p&gt;

&lt;p&gt;As a person, I love lazy weekends, food, movies and series, working out, reading novels, cleaning and organizing, because it's therapeutic. And coffee! Let's not forget the coffee!&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I decided to start blogging?
&lt;/h2&gt;

&lt;p&gt;As we learn, we eventually tend to forget them. It's only natural. That's why we make notes to go back to. While I love a good pen and paper notes, it might not be right for programming concepts.&lt;/p&gt;

&lt;p&gt;This blog will be a way of documenting what and how I have learnt as a beginner. A repository where I can always refer to anytime anywhere. And in doing so, I wish to share my knowledge with you all.&lt;/p&gt;

&lt;h2&gt;
  
  
  What will I be writing about?
&lt;/h2&gt;

&lt;p&gt;I am planning to write on coding practices, we will see how to use some of the best automation testing tools and libraries available in the market and some tips and tricks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who will benefit from this blog?
&lt;/h2&gt;

&lt;p&gt;Although there are tons of awesome tech blogs out there, I certainly hope this blog will help you with your automation testing career journey, as well as mine! Ask me any questions, I will try to answer them with my best or redirect you to useful resources.&lt;/p&gt;

&lt;p&gt;Happy learning folks!&lt;/p&gt;

</description>
      <category>writing</category>
    </item>
  </channel>
</rss>
