{"id":6783,"date":"2021-01-04T15:43:47","date_gmt":"2021-01-04T15:43:47","guid":{"rendered":"https:\/\/codoid.com\/?p=6783"},"modified":"2023-02-02T09:16:59","modified_gmt":"2023-02-02T09:16:59","slug":"selenium-grid-tutorial","status":"publish","type":"post","link":"https:\/\/codoid.com\/selenium-testing\/selenium-grid-tutorial\/","title":{"rendered":"Selenium Grid Tutorial"},"content":{"rendered":"<p>Selenium Grid helps you to leverage parallel execution and cross-platform testing at the same time. You would most definitely know how much valuable time this can save. If you are running a race against time on a project with a quick deadline then this right here can be a lifesaver. So let\u2019s get to know more about Selenium Grid and how to make this wonder possible.<\/p>\n<p>If you have multiple testbeds (i.e, Virtual Machines or Desktop PCs which are allocated for automated script execution), then you can use Selenium Grid to send Selenium Commands and Session creation request to a centralized server (i.e., Hub) which receives the client requests and assign it to the applicable nodes.<\/p>\n<p>In this blog article, you will learn what is Selenium Grid, how to use it, and all the prominent Selenium Grid 4 features.<\/p>\n<h3>Remote WebDriver (Selenium Standalone)<\/h3>\n<p>Before learning Selenium Grid, you should be familiar with \u2018Selenium Remote WebDriver\u2019.<\/p>\n<p>Let\u2019s say you have Selenium Scripts on a Windows machine and want to run the scripts on a Safari browser on a Mac machine. The older approach needed you to move the scripts from the Windows machine to the Mac machine and then only execute them on a Safari browser.<\/p>\n<p>But now, if you know how to use Selenium Remote WebDriver, you can execute the scripts from Windows itself by pointing to the Mac machine Selenium Server URL. This technique makes the otherwise tedious process very simple. Let\u2019s dive deeper into it, shall we?<\/p>\n<p><b>Download Selenium Server<\/b><\/p>\n<p>Download the Selenium Server Jar file from Selenium.dev website.<\/p>\n<p><b>Start Selenium Server<\/b><\/p>\n<p>Use the below command to start the Selenium server.<\/p>\n<div class=\"editor editor-dark\">\n<div class=\"editor-top\">\n<ul class=\"editor-controls\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<\/div>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\njava -jar selenium-server-standalone-3.141.59.jar\r\n<\/pre>\n<\/div>\n<p>By default, Selenium Standalone Server runs on port 4444. You can use the below snippet to launch the browser.<\/p>\n<div class=\"editor editor-dark\">\n<div class=\"editor-top\">\n<ul class=\"editor-controls\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<\/div>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nDesiredCapabilities capability = new DesiredCapabilities();\r\ncapability.setBrowserName(&quot;chrome&quot;);\r\n\r\nRemoteWebDriver driver = new RemoteWebDriver(new URL(&quot;http:\/\/localhost:4444\/wd\/hub&quot;),capability);\r\n<\/pre>\n<\/div>\n<h3>Selenium Standalone Server Configuration<\/h3>\n<ul>\n<li><b>BrowserTimeout<\/b> &#8211; You can use this option to make the WebDriver Browser Session wait while a WebDriver command is being executed. Let\u2019s say driver.get(url) is being executed with BrowserTimeout=60 secs. The WebDriver Session will wait for 60 secs and quit the session if the command is not complete within the given timeframe. Note: If the BrowserTimeout is not specified when starting the server, then the session will wait indefinitely if a command request does not get a response.<\/li>\n<li><b>Config<\/b> &#8211; If you have the Standalone Server configurations in a Json file, you can use the config option to mention the json file path. If the config option is not used, it will take the default values.<\/li>\n<li><b>Port<\/b> &#8211; As we mentioned earlier, Selenium Server\u2019s default port is 4444. If you would like to override, you can do it using the Port option.<\/li>\n<li>Role &#8211; Selenium WebDriver has three roles for the server. (Standalone, Hub, and Node)<\/li>\n<li><b>Timeout\/SessionTimeout<\/b> &#8211; The Selenium Standalone server has multiple session slots. Each slot should be released for other test executions. Let\u2019s say a session is idle for 240 seconds (i.e., The Remote WebDriver session is not receiving any commands from the client for 240 seconds). In this case, the standalone server will release the session slot for other tests. 240 seconds is not a default value. You can mention any value based on your requirement.<\/li>\n<\/ul>\n<h3>Why Selenium Grid?<\/h3>\n<p>Selenium Standalone server is not sufficient for distributed execution. If you have 5 testbeds for automated test script execution, then you have to manage 5 Selenium Servers. Moreover, each server has its own URL. So you need to update the test suites with 5 server URLs as well. All of this can be easily simplified when using the Selenium Grid.<\/p>\n<p>Selenium Grid has only two components, one is Hub and another one is Node. All your tests point Hub. The Hub acts as a centralized server that is responsible for assigning a Node for WebDriver session initialization and command execution requests.<\/p>\n<p>Let\u2019s assume you have three Windows machines and one Mac machine. One of the Windows machines is used for Hub &#038; its nodes. The other three machines (2 Windows &#038; 1 Mac) are used for the other Node setup.<\/p>\n<p>Refer to the below diagram.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/codoid.com\/wp-content\/uploads\/2021\/01\/selenium-grid-tutorial.png\" alt=\"Selenium Grid Tutorial\" title=\"Selenium Grid Tutorial\"\/><\/p>\n<p>To run your Selenium test scripts on Safari using a Mac machine, you can use any of the following port numbers 5564, 5565, and 5566 as per the diagram. Since this is a Selenium Grid Architecture, you can use the Hub URL instead of Node\u2019s URL.<\/p>\n<p>When you use the Hub URL, all the session creations and command requests will go to the Hub. The Hub will decide which node is suitable for the client request. Desired Capabilities plays a crucial role in node allocation.<\/p>\n<p>If you are planning to add or remove any node, you need not change the Remote URL in your test suite, because all your scripts are using Hub URL not Node URL.<\/p>\n<p>Selenium Grid helps you in setting up a cross-browser testing infrastructure and it eases the Selenium Server management using Hub and Node roles. When you have a simple execution architecture, you can go with the Selenium Standalone server. If you are planning for parallel execution, cross-browser testing execution, and performance test script execution on local browsers, then the Selenium Grid setup is a must.<\/p>\n<p>As an <b>automation testing company<\/b>, we use Selenium Grid for multiple automation testing projects to enable parallel execution.<\/p>\n<h3>Starting Hub<\/h3>\n<p>Starting a Selenium Grid Hub is easy. Just run the below command in Terminal\/Command Prompt and it will start Hub on port 4444.<\/p>\n<div class=\"editor editor-dark\">\n<div class=\"editor-top\">\n<ul class=\"editor-controls\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<\/div>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\njava -jar selenium-server-standalone-3.141.59.jar -role hub\r\n<\/pre>\n<\/div>\n<h3>Hub Configuration<\/h3>\n<ul>\n<li><b>Matcher\/CapabilityMatcher<\/b> &#8211; Hub has its own logic to select a node to start a WebDriver session. However, you can override this logic using the Matcher option. All you need to do is create a class and write the logic. Refer <a href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/blob\/031456c438d0671caec1eb5d64253ada7b1a4bff\/java\/server\/src\/org\/openqa\/grid\/internal\/utils\/DefaultCapabilityMatcher.java\" target=\"_blank\" rel=\"noopener noreferrer\">DefaultCapablityMatcher<\/a> Java class to write a custom matcher.<\/li>\n<li><b>CleanUpCycle<\/b> &#8211; Hub needs to check &#038; kill the idle sessions at frequent intervals. How often the cleanup needs to be carried out is determined using  the CleanUpCycle option. The default value is 5000 milliseconds.<\/li>\n<li><b>Log<\/b> &#8211; If you want all the Hub logs in a file instead of STDOUT, then pass the filename in the log option.<\/li>\n<li><b>MaxSession<\/b> &#8211; MaxSession is used at the Hub level to mention how many WebDriver sessions are allowed in parallel on a node. The default max session at Node level is 5. If Hub has Max Session configuration, then it will override the Node\u2019s Max Session.<\/li>\n<li><b>NewSessionWaitTimeout<\/b> &#8211; Sometimes Nodes may not be available for a new session request. You can use the NewSessionWaitTimeout option to make your test wait for the specified milliseconds instead of waiting for a Node indefinitely.<\/li>\n<li><b>ThrowOnCapabilityNotPresent<\/b> &#8211; If ThrowOnCapabilityNotPresent=true and no node is available for the specified desired capabilities, then your test will throw an error else the test will wait until the supporting node is registered under the hub.<\/li>\n<li><b>Registry<\/b> &#8211; Hub\u2019s Kernel logic is written in DefaultGridRegistry.java which is responsible to check free &#038; used nodes and assign nodes to the incoming client requests. If you would like to override this logic, use the Registry option.<\/li>\n<li><b>JettyThreads<\/b> &#8211; The default value is 200. Let\u2019s say you are going to attach 50 nodes under a Hub. Then JettyThreads=200 is not sufficient. You need to increase the JettyThreads. 50 nodes mean each node supports 5 max sessions by default. So 50 X 30 = 250 threads are required. Use JettyThreads\/JettyMaxThreads to increase the thread pool.<\/li>\n<\/ul>\n<h3>Attaching Nodes<\/h3>\n<p>Once the Hub is started, you can start and attach a node from any machine. All you need is the Hub\u2019s URL.<\/p>\n<p>Use the below command to register a node.<\/p>\n<div class=\"editor editor-dark\">\n<div class=\"editor-top\">\n<ul class=\"editor-controls\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<\/div>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\njava -jar selenium-server-standalone-3.141.59.jar -role node -hub http:\/\/ip-address:4444\/grid\/register\/\r\n<\/pre>\n<\/div>\n<h3>Node Configuration<\/h3>\n<ul>\n<li><b>Capabilities<\/b> &#8211; This is an optional parameter. By default, you will get 5 Chrome, 5 Firefox, 1 Internet Explorer instance. If you want all the 11 instances as Chrome browser, then use the capabilities parameter while creating a node. Example:\n<div class=\"editor editor-dark\">\n<div class=\"editor-top\">\n<ul class=\"editor-controls\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<\/div>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\njava -jar selenium-server-standalone-3.141.59.jar -role node -hub http:\/\/ip-address:4444\/grid\/register\/ -capabilities browserName=Chrome, maxInstances=11\r\n<\/pre>\n<\/div>\n<\/li>\n<li><b>NodePolling<\/b> &#8211; Hub needs to check whether the registered nodes are alive in a frequent interval. By default, Hub will check the nodes\u2019 availability every 5 seconds. <\/li>\n<li><b>DownPollingLimit<\/b> &#8211; Let\u2019s say DownPollingLimit=3. If the node is not responding in three-node polling, then the node will be marked as Down in Hub. The default value for DownPollingLimit is 2 attempts.<\/li>\n<li><b>Register<\/b> &#8211; This is a boolean parameter. If the Hub is unavailable, then the nodes will try to re-register with Hub. If register=false, the nodes will never try to re-register.<\/li>\n<li><b>RegisterCycle<\/b> &#8211; How often the nodes can try to re-register with Hub is determined using the RegisterCycle parameter. The default value is 5000 milliseconds. Every 5 seconds the nodes will try to re-register if the Hub is unavailable.<\/li>\n<li><b>UnregisterIfStillDownAfter<\/b> &#8211; If a node is down for more than 60 seconds, then the node will stop attempting to re-register with Hub. If you would like to increase\/decrease the default 60 seconds, then use the UnregisterIfStillDownAfter parameter.<\/li>\n<\/ul>\n<h3>Grid Console<\/h3>\n<p>Hub and nodes creation initiated on Command Prompts\/Terminal Windows. Checking the status of Hub and Nodes in the Terminal Window is a cumbersome task. Selenium Grid has a Web GUI to view the registered nodes and Hub configuration. Once the hub has started, you can view the Hub configuration in the following Grid Console URL http:\/\/localhost:4444\/grid\/console.<\/p>\n<h3>VisGrid<\/h3>\n<p>If you use <a href=\"https:\/\/codoid.com\/visgrid\/\">VisGrid Selenium Grid UI<\/a>, you don\u2019t need to start Hub &#038; Nodes in Command Prompt. Stopping\/Managing Hub &#038; Nodes is easy with VisGrid. As a leading <a href=\"https:\/\/codoid.com\/testing-services\/selenium-testing-services\/\">Selenium Testing Services<\/a> provider, we at Codoid created this UI to ease the Selenium Grid setup. However, after using VisGrid internally for a month, we released it as freeware. Now, VisGrid is widely used by the test automation community.<\/p>\n<p>You can manage multiple nodes in a single window. Moreover, Selenium Browser Drivers come with the VisGrid package.<\/p>\n<h3>Selenium Grid 4<\/h3>\n<p>As we mentioned before, by using Selenium Server Jar you can setup Standalone Server and Selenium Grid Hub &#038; Node. Hub takes care of the below-mentioned tasks.<\/p>\n<ul>\n<li>Identify a suitable node to create a WebDriver Session.<\/li>\n<li>Find a node with a session ID to assign a WebDriver command execution request from the client.<\/li>\n<li>Check whether the registered nodes are alive using NodePolling.<\/li>\n<\/ul>\n<p>Hub plays a crucial role in the Selenium Grid set up. If a machine is dedicated for Hub and you are registering local nodes, then the memory consumption to operate Hub and execute Selenium commands on the same machine will be high.<\/p>\n<p>When you are planning for a complex Selenium Grid execution architecture, you need to go for Selenium Grid 4\u2019s Distributed execution setup. What is new in Selenium Grid 4 you might wonder. The Hub\u2019s processes are separated in Selenium Grid 4. So instead of overloading the Hub, you can setup each task of Hub in different machines.<\/p>\n<p><a href=\"https:\/\/codoid.com\/selenium-grid-4-distributed-execution\/\">Selenium Grid 4<\/a> is not released yet. But there is no need to worry as you can try it in the Selenium Alpha version.<\/p>\n<p><b>Sessions<\/b> &#8211; In Selenium Grid 4, first you need to start sessions.<\/p>\n<div class=\"editor editor-dark\">\n<div class=\"editor-top\">\n<ul class=\"editor-controls\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<\/div>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\njava -jar selenium-server-4.0.0-alpha-5.jar sessions\r\n<\/pre>\n<\/div>\n<p>Sessions are used to store Node URI and Session ID.<\/p>\n<p><b>Distributor<\/b> &#8211; Distributor is responsible to start a new WebDriver session on a suitable node and update the Session ID in Sessions Map against the node URI.<\/p>\n<div class=\"editor editor-dark\">\n<div class=\"editor-top\">\n<ul class=\"editor-controls\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<\/div>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\njava -jar selenium-server-4.0.0-alpha-5.jar distributor --sessions http:\/\/localhost:5556\r\n<\/pre>\n<\/div>\n<p><b>Router<\/b> &#8211; Router receives WebDriver command requests and a new session request from the client. If the request is for a new session, then it will be redirected to the Distributor. If the request is for command execution, then Router will query the node URI using a Session ID in Sessions.<\/p>\n<p>Once the node URI is received from Sessions, the Router will redirect the command execution to the node.<\/p>\n<div class=\"editor editor-dark\">\n<div class=\"editor-top\">\n<ul class=\"editor-controls\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<\/div>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\njava -jar selenium-server-4.0.0-alpha-5.jar  router --sessions http:\/\/localhost:5556 --distributor http:\/\/localhost:5553\r\n<\/pre>\n<\/div>\n<p><b>Node<\/b> &#8211; In Selenium Grid 4 distributed execution set up, Node will be registered under Router. If you have setup the router in a separate machine, you can mention the host parameter to point the router while starting the node.<\/p>\n<div class=\"editor editor-dark\">\n<div class=\"editor-top\">\n<ul class=\"editor-controls\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<\/div>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\njava -jar selenium-server-4.0.0-alpha-5.jar node --detect-drivers\r\n<\/pre>\n<\/div>\n<p>In Selenium Grid 4, you will get a new GUI to view nodes. However, it is not released in the Alpha version yet.<\/p>\n<h3>Conclusion<\/h3>\n<p>So the biggest takeaways from this Selenium Grid Tutorial are learning about Selenium Grid 3 &#038; 4 and all the important configurations. If you are trying to achieve parallel execution in test automation, creating independent automated tests and elegant Selenium Grid setups are a must.<\/p>\n<p>If the Selenium Standalone server is sufficient for you, then the Selenium Grid is not necessary at this point. However, knowledge of the Selenium grid will help you to setup distributed execution when you want to scale up the automated test execution.<\/p>\n<h3 class=\"text-center\"> Frequently Asked Questions<\/h3>\n<div class=\"faq-section\">\n\r\n            \r\n              <ul class=\"accordion\"><li>\r\n                  <span class=\"toggle\">What is selenium grid used for?<\/span>\r\n                  <div class=\"inner \" style=\"\" >\r\n                    <p>Selenium Grid is used to perform Cross Browser Testing at a scale, by running a test on different browser-device combinations simultaneously.<\/p>\r\n                  <\/div>\r\n                <\/li><li>\r\n                  <span class=\"toggle\">What is the difference between selenium and selenium grid?<\/span>\r\n                  <div class=\"inner \" style=\"\" >\r\n                    <p>Selenium is a suite of tools for automating web browsers, while Selenium Grid is a tool within the suite that enables parallel testing. Selenium Grid specializes in running multiple tests across different browsers, operating systems, and machines.<\/p>\r\n                  <\/div>\r\n                <\/li><li>\r\n                  <span class=\"toggle\">How many nodes does a selenium grid have?<\/span>\r\n                  <div class=\"inner \" style=\"\" >\r\n                    <p>A Grid can contain multiple Nodes. Each Node manages the slots for the available browsers of the machine where it is running.<\/p>\r\n                  <\/div>\r\n                <\/li><li>\r\n                  <span class=\"toggle\">Can we use a selenium grid for performance testing?<\/span>\r\n                  <div class=\"inner \" style=\"\" >\r\n                    <p>Yes, Selenium grid can be used for performance testing, and it provides the advantage of easily and quickly incorporating performance tests into the continuous testing environment. It is critical to use the proper tools like  JMeter or k6.<\/p>\r\n                  <\/div>\r\n                <\/li><li>\r\n                  <span class=\"toggle\">What are the major components of the Selenium grid?<\/span>\r\n                  <div class=\"inner \" style=\"\" >\r\n                    <p>The major components of the Selenium Grid are Router, Distributor, Session Map, Session Queue, Node, and Event Bus.<\/p>\r\n                  <\/div>\r\n                <\/li><li>\r\n                  <span class=\"toggle\">Is Selenium Grid free?<\/span>\r\n                  <div class=\"inner \" style=\"\" >\r\n                    <p>Yes, Selenium Grid is a free and open-source testing tool that allows users to test web applications across different browsers and platforms.<\/p>\r\n                  <\/div>\r\n                <\/li><\/ul>\r\n            \n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Selenium Grid helps you to leverage parallel execution and cross-platform testing at the same time. You would most definitely know how much valuable time this can save. If you are running a race against time on a project with a quick deadline then this right here can be a lifesaver. So let\u2019s get to know [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6797,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[187,20],"tags":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.3 (Yoast SEO v20.3) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Selenium Grid Tutorial | Selenium Grid 4 Setup | Codoid<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Selenium Grid Tutorial\" \/>\n<meta property=\"og:description\" content=\"Selenium Grid helps you to leverage parallel execution and cross-platform testing at the same time. You would most definitely know how much valuable time this can save. If you are running a race against time on a project with a quick deadline then this right here can be a lifesaver. So let\u2019s get to know [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/codoid.com\/learn\/selenium-testing\/selenium-grid-tutorial\/\" \/>\n<meta property=\"og:site_name\" content=\"Codoid\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/codoid.softwaretestingcompany\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-04T15:43:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-02-02T09:16:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/codoid.com\/wp-content\/uploads\/2021\/01\/Selenium-Grid-Tutorial-Blog.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"800\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@codoid\" \/>\n<meta name=\"twitter:site\" content=\"@codoid\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Selenium Grid Tutorial | Selenium Grid 4 Setup | Codoid","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Selenium Grid Tutorial","og_description":"Selenium Grid helps you to leverage parallel execution and cross-platform testing at the same time. You would most definitely know how much valuable time this can save. If you are running a race against time on a project with a quick deadline then this right here can be a lifesaver. So let\u2019s get to know [&hellip;]","og_url":"https:\/\/codoid.com\/learn\/selenium-testing\/selenium-grid-tutorial\/","og_site_name":"Codoid","article_publisher":"https:\/\/www.facebook.com\/codoid.softwaretestingcompany","article_published_time":"2021-01-04T15:43:47+00:00","article_modified_time":"2023-02-02T09:16:59+00:00","og_image":[{"width":1200,"height":800,"url":"https:\/\/codoid.com\/wp-content\/uploads\/2021\/01\/Selenium-Grid-Tutorial-Blog.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_creator":"@codoid","twitter_site":"@codoid","twitter_misc":{"Written by":"admin","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/codoid.com\/learn\/selenium-testing\/selenium-grid-tutorial\/#article","isPartOf":{"@id":"https:\/\/codoid.com\/learn\/selenium-testing\/selenium-grid-tutorial\/"},"author":{"name":"admin","@id":"https:\/\/codoid.com\/#\/schema\/person\/360ee1d38151acb7c746787fbfa8e586"},"headline":"Selenium Grid Tutorial","datePublished":"2021-01-04T15:43:47+00:00","dateModified":"2023-02-02T09:16:59+00:00","mainEntityOfPage":{"@id":"https:\/\/codoid.com\/learn\/selenium-testing\/selenium-grid-tutorial\/"},"wordCount":2157,"commentCount":0,"publisher":{"@id":"https:\/\/codoid.com\/#organization"},"articleSection":["Selenium Testing","Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/codoid.com\/learn\/selenium-testing\/selenium-grid-tutorial\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/codoid.com\/learn\/selenium-testing\/selenium-grid-tutorial\/","url":"https:\/\/codoid.com\/learn\/selenium-testing\/selenium-grid-tutorial\/","name":"Selenium Grid Tutorial | Selenium Grid 4 Setup | Codoid","isPartOf":{"@id":"https:\/\/codoid.com\/#website"},"datePublished":"2021-01-04T15:43:47+00:00","dateModified":"2023-02-02T09:16:59+00:00","breadcrumb":{"@id":"https:\/\/codoid.com\/learn\/selenium-testing\/selenium-grid-tutorial\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/codoid.com\/learn\/selenium-testing\/selenium-grid-tutorial\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/codoid.com\/learn\/selenium-testing\/selenium-grid-tutorial\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/codoid.com\/"},{"@type":"ListItem","position":2,"name":"Selenium Grid Tutorial"}]},{"@type":"WebSite","@id":"https:\/\/codoid.com\/#website","url":"https:\/\/codoid.com\/","name":"Codoid","description":"","publisher":{"@id":"https:\/\/codoid.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/codoid.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/codoid.com\/#organization","name":"Codoid - Software Testing Company","url":"https:\/\/codoid.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/codoid.com\/#\/schema\/logo\/image\/","url":"https:\/\/codoid.com\/wp-content\/uploads\/2020\/09\/Codoid_Software_Testing_Company_Logo.png","contentUrl":"https:\/\/codoid.com\/wp-content\/uploads\/2020\/09\/Codoid_Software_Testing_Company_Logo.png","width":500,"height":500,"caption":"Codoid - Software Testing Company"},"image":{"@id":"https:\/\/codoid.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/codoid.softwaretestingcompany","https:\/\/twitter.com\/codoid","https:\/\/www.instagram.com\/codoid.softwaretestingcompany\/","https:\/\/www.linkedin.com\/company\/codoid-qacompany","https:\/\/www.pinterest.com\/codoid9282\/codoid-software-testing-company\/","https:\/\/www.youtube.com\/channel\/UCCmOTDQgcf4W8oo22mBMUYA"]},{"@type":"Person","@id":"https:\/\/codoid.com\/#\/schema\/person\/360ee1d38151acb7c746787fbfa8e586","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/codoid.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4d33f9036c9d60684b9478f738779823?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4d33f9036c9d60684b9478f738779823?s=96&d=mm&r=g","caption":"admin"},"sameAs":["https:\/\/codoid.com"]}]}},"_links":{"self":[{"href":"https:\/\/codoid.com\/wp-json\/wp\/v2\/posts\/6783"}],"collection":[{"href":"https:\/\/codoid.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codoid.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codoid.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/codoid.com\/wp-json\/wp\/v2\/comments?post=6783"}],"version-history":[{"count":15,"href":"https:\/\/codoid.com\/wp-json\/wp\/v2\/posts\/6783\/revisions"}],"predecessor-version":[{"id":25411,"href":"https:\/\/codoid.com\/wp-json\/wp\/v2\/posts\/6783\/revisions\/25411"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/codoid.com\/wp-json\/wp\/v2\/media\/6797"}],"wp:attachment":[{"href":"https:\/\/codoid.com\/wp-json\/wp\/v2\/media?parent=6783"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codoid.com\/wp-json\/wp\/v2\/categories?post=6783"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codoid.com\/wp-json\/wp\/v2\/tags?post=6783"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}