{"id":10025,"date":"2015-09-25T18:10:30","date_gmt":"2015-09-25T18:10:30","guid":{"rendered":"http:\/\/162.243.59.116\/2015\/09\/25\/how-to-get-started-with-automated-web-testing-ci\/"},"modified":"2022-04-22T07:28:59","modified_gmt":"2022-04-22T14:28:59","slug":"how-to-get-started-with-automated-web-testing-ci","status":"publish","type":"post","link":"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/","title":{"rendered":"How To Get Started with Automated Web Testing &#8212; CI Series by Dave Haeffner : Part 1\/3"},"content":{"rendered":"<p>In this 3-part series you will learn how to build simple and powerful automated web tests that will work on the browsers you care about and be configured to run automatically through the use of a continuous integration server (CI).<\/p>\n<h2><strong>How To Get Started with Automated Web Testing&nbsp;<\/strong><\/h2>\n<p><!--more--><\/p>\n<p><strong>The Problem<\/strong><\/p>\n<p>If you\u2019re new to automated <a href=\"https:\/\/app14743.cloudwayssites.com\/web-testing\/\">web testing<\/a> there\u2019s only a few things you need to know to become effective quickly. But unless someone tells you what they are you could easily head down the wrong path and end up wasting time on things which will yield very few results.<\/p>\n<p><!-- more --><\/p>\n<p><strong>A Solution<\/strong><\/p>\n<p>By learning the fundamentals of <a href=\"http:\/\/www.seleniumhq.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Selenium<\/a> (a popular free and open-source browser automation tool), you can be up and running with cross-browser automated web tests rather quickly. And when combined with a third-party automated visual testing solution like <a href=\"https:\/\/app14743.cloudwayssites.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Applitools Eyes<\/a>, you can have an impressively high amount of test coverage with surprisingly little effort.<\/p>\n<p><strong>An Example<\/strong><\/p>\n<p>Selenium is built to mimic human action and it works with two pieces of information to do it: the element on the page you want to interact with and the action you want to take on that element.<\/p>\n<p>If we take a common example like login for a website, here are the actions Selenium would take to step through it like a user would:<\/p>\n<ul>\n<li>visit the page<\/li>\n<li>find the username input field and type text into it<\/li>\n<li>find the password input field and type text into it<\/li>\n<li>find the submit button and click it<\/li>\n<\/ul>\n<p>Let\u2019s take <a href=\"http:\/\/the-internet.herokuapp.com\/login\" target=\"_blank\" rel=\"noopener noreferrer\">the login example<\/a> found on <a href=\"http:\/\/github.com\/tourdedave\/the-internet\" target=\"_blank\" rel=\"noopener noreferrer\">the-internet<\/a> and write a Selenium test for it. Let\u2019s use a scripting language (e.g., <a href=\"https:\/\/www.ruby-lang.org\/en\/\" target=\"_blank\" rel=\"noopener noreferrer\">Ruby<\/a>), since it is very approachable and reads a lot like English. And we\u2019ll use <a href=\"http:\/\/rspec.info\" target=\"_blank\" rel=\"noopener noreferrer\">RSpec<\/a>, which is another open source library. It will enable us to organize our tests easily and perform repeatable actions before and after each test.<\/p>\n<p>Here is what the initial Selenium test looks like once written:<\/p>\n<pre><code>\n\n# filename: login_spec.rb\n\nrequire 'selenium-webdriver'\n\ndescribe 'Login' do\n\n  before(:each) do\n    @driver = Selenium::WebDriver.for :firefox\n  end\n\n  after(:each) do\n    @driver.quit\n  end\n\n  it 'succeeded' do\n    @driver.get 'http:\/\/the-internet.herokuapp.com\/login'\n    @driver.find_element(id: 'username').send_keys 'tomssmith'\n    @driver.find_element(id: 'password').send_keys 'SuperSecretPassword!'\n    @driver.find_element(css: 'button').click\n  end\n  \n  end\n\n<\/code><\/pre>\n<blockquote><p><strong>NOTE:<\/strong> <a href=\"http:\/\/rspec.info\" target=\"_blank\" rel=\"noopener noreferrer\">RSpec<\/a> has some syntax that is worth pointing out. A test case starts with the word <code class=\"highlight-code\">describe<\/code>, tests start with the word <code class=\"highlight-code\">it<\/code> followed by the test name (e.g., <code class=\"highlight-code\">it 'succeeded' do`<\/code>), and you can specify actions to occur before and after each test with <code class=\"highlight-code\">before(:each)<\/code> and <code class=\"highlight-code\">after(:each)<\/code>. The words <code class=\"highlight-code\">do<\/code> and <code class=\"highlight-code\">end<\/code> are Ruby code which signify the beginning and end of a chunk of code (a.k.a. a block). And test files in RSpec are known as \u201cspecs\u201d, which need to end with <code class=\"highlight-code\">_spec.rb<\/code> in the filename (e.g., <code class=\"highlight-code\">login_spec.rb<\/code>).<\/p><\/blockquote>\n<p>At the top of the file we pull in the Selenium Ruby bindings (e.g., <code class=\"highlight-code\">require 'selenium-webdriver'<\/code>) and declare our test case (e.g., <code class=\"highlight-code\">describe 'Login' do<\/code>). Before each test we will create an instance of Firefox and store it in an instance variable to be used during and after our test (e.g., <code class=\"highlight-code\">@driver = Selenium::WebDriver.for :firefox<\/code>). After each test we will close the browser (e.g., <code class=\"highlight-code\">@driver.quit<\/code>).<\/p>\n<p>Next, we create our login test and fill it with our Selenium commands (which all work using the <code class=\"highlight-code\">@driver<\/code> variable created in <code class=\"highlight-code\">before(:each)<\/code>).<\/p>\n<p>The first command of the test visits the login page with <code class=\"highlight-code\">.get<\/code> followed by the URL as a string (e.g., <code class=\"highlight-code\">'http:\/\/the-internet.herokuapp.com'<\/code>). We then interact with the login form on the page by finding the username input field with <code class=\"highlight-code\">.find_element<\/code> and a locator for the element (e.g., <code class=\"highlight-code\">(id: 'username')<\/code>) along with the action we want to take (e.g., <code class=\"highlight-code\">.send_keys 'tomsmith'<\/code>). And we repeat the same approach again for the password field (e.g., <code class=\"highlight-code\">@driver.find_element(id: 'password').send_keys 'SuperSecretPassword!'<\/code>). For the last command we issue one more <code class=\"highlight-code\">.find_element<\/code> to find the submit button (e.g., <code class=\"highlight-code\">(css: 'button')<\/code>) and click it with <code class=\"highlight-code\">.click<\/code>.<\/p>\n<p>If we save this file and run it (e.g., <code class=\"highlight-code\">rspec login_spec.rb<\/code> from the command-line), it will open the browser and complete the login on the page. But it wouldn\u2019t tell us if the application behaved as expected. To handle this we need to add in automated visual checks with <a href=\"https:\/\/app14743.cloudwayssites.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Applitools Eyes<\/a>.<\/p>\n<p><strong>The Eyes Have It<\/strong><\/p>\n<blockquote><p><strong>NOTE:<\/strong> To use Applitools Eyes you need to <strong>grab a free account<\/strong> from <a href=\"https:\/\/app14743.cloudwayssites.com\/sign-up\/\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a> (no credit card required).<\/p><\/blockquote>\n<p>In order to incorporate Applitools Eyes into our test, we first need to make some modifications to our test setup and teardown.<\/p>\n<pre><code>\n\n# filename: login_spec.rb\n\nrequire 'selenium-webdriver'\nrequire 'eyes_selenium'\n\ndescribe 'Login' do\n\n  before(:each) do\n    @browser = Selenium::WebDriver.for :firefox\n    @eyes = Applitools::Eyes.new\n    @eyes.api_key = ENV['APPLITOOLS_API_KEY']\n    @driver = @eyes.open(app_name: 'the-internet', test_name: 'login', driver: @browser)\n  end\n# ...\n  after(:each) do\n    @eyes.abort_if_not_closed\n    @driver.quit\n  end\n# ...\n\n<\/code><\/pre>\n<p>Once we pull in the Applitools Eyes Ruby SDK (e.g., <code class=\"highlight-code\">require 'eyes_selenium'<\/code>) we update our test setup (e.g., <code class=\"highlight-code\">before(:each)<\/code>) by creating an instance of Applitools Eyes (storing it in another instance variable for later use), specifying our API key, and starting an Applitools Eyes session (which requires the name of the app, the name of the test, and the Selenium instance). After each test we make sure to abort the Eyes session if it was unable to close properly (e.g., <code class=\"highlight-code\">@eyes.abort_if_not_closed<\/code>) \u2013 more on that soon. And we do this before destroying the Selenium instance (since the Eyes instance relies on Selenium).<\/p>\n<blockquote><p><strong>NOTE:<\/strong> In this example the API key is being passed through an environment variable. You can just as easily hard-code your API key value here.<\/p><\/blockquote>\n<p>Now we\u2019re ready to add some visual checks to our test so we can verify that our application works as intended (and verify that the page renders correctly).<\/p>\n<pre><code>\n\n# ...\n  it 'succeeded' do\n    @driver.get 'http:\/\/the-internet.herokuapp.com\/login'\n    @eyes.check_window('Login Page')\n    @driver.find_element(id: 'username').send_keys 'tomsmith'\n    @driver.find_element(id: 'password').send_keys 'SuperSecretPassword!'\n    @driver.find_element(css: 'button').click\n    @eyes.check_window('Logged In')\n    @eyes.close\n  end\n\nend\n<\/code><\/pre>\n<p>With the <code class=\"highlight-code\">@eyes.check_window<\/code> command we\u2019re performing visual checks. We can specify a value with it or not (e.g., <code class=\"highlight-code\">('Login Page')<\/code>, <code class=\"highlight-code\">('Logged In')<\/code>). The value is optional, but it will appear in the test results in Applitools Eyes. It could add a helpful narrative for you (or other people on your team) to follow along with what the test was doing when the results are reviewed after the fact.<\/p>\n<p><code class=\"highlight-code\">@eyes.close<\/code> ends the Applitools Eyes session and triggers the final comparison of the visual checks.<\/p>\n<p><strong>Expected Behavior<\/strong><\/p>\n<p>When you save this file and run it (e.g., <code class=\"highlight-code\">rspec login_spec.rb<\/code> from the command-line) here is what will happen:<\/p>\n<ul>\n<li>Selenium opens the browser<\/li>\n<li>An Applitools Eyes session is created and connected with the Selenium instance<\/li>\n<li>The test runs the Selenium commands and captures visual checks along the way<\/li>\n<li>The Applitools Eyes session closes and performs validation on the visual checks<\/li>\n<li>Selenium closes the browser<\/li>\n<li>Failures (if any) are displayed in the console output<\/li>\n<\/ul>\n<p>If Applitools Eyes finds a visual anomaly it will fail the test and provide a URL to the test results in the console output. When viewing the results in Applitools Eyes you can choose to accept or reject the results, which will impact the way Eyes validates the test going forward.<\/p>\n<blockquote><p><strong>NOTE:<\/strong> A new test in Applitoosl Eyes will fail and prompt you to view the results. It\u2019s recommended that you review the results, but it\u2019s not mandatory. The results will automatically be saved as a baseline image for subsequent runs.<\/p><\/blockquote>\n<p><strong>A Small Bit of Cleanup<\/strong><\/p>\n<p>In order to make this example useful for more than one test, you need to make a small tweak to your test setup.<\/p>\n<pre><code>\n# filename: login_spec.rb\n# ...\n  before(:each) do |example|\n    @browser = Selenium::WebDriver.for :firefox\n    @eyes = Applitools::Eyes.new\n    @eyes.api_key = ENV['APPLITOOLS_API_KEY']\n    @driver = @eyes.open(app_name: 'the-internet', test_name: example.full_description, driver: @browser)\n  end\n# ...\n<\/code><\/pre>\n<p>Within RSpec you can access each test in the <code class=\"highlight-code\">before(:each)<\/code> by adding a block variable (e.g.,<code class=\"highlight-code\">before(:each) do |example|<\/code>). You can then put it to use <code class=\"highlight-code\">@eyes.open<\/code> when specifying the test name (e.g., <code class=\"highlight-code\">test_name: example.full_description<\/code>).<\/p>\n<p>Now when you add another test to this file the name will be dynamically passed to Applitools Eyes.<\/p>\n<p><strong>Outro<\/strong><\/p>\n<p>By combining your Selenium tests with an automated visual testing solution you are armed with a powerful combination that gives you a staggering level of coverage (e.g., hundreds of assertions) for only a few lines of code. And as a bonus you\u2019ve automated something that many people think can only be done manually (and as a result tends to get relegated to the end of a software development cycle) \u2013 moving you and your team one massive step closer to <a href=\"https:\/\/en.wikipedia.org\/wiki\/Continuous_delivery\" target=\"_blank\" rel=\"noopener noreferrer\">Continuous Delivery<\/a>. Bravo!<\/p>\n<p><strong>In PART 2 of this series: <a href=\"https:\/\/saucelabs.com\/blog\/how-to-run-your-automated-web-tests-on-any-browser\" target=\"_blank\" rel=\"noopener noreferrer\">\u201cHow To Run Your Automated Web Tests From Any Browser\u201d<\/a>, I\u2019ll show you how to run your tests against whatever browser and operating system combination you need.<\/strong><\/p>\n<p><strong>You can read the third and final post in this series: <a href=\"https:\/\/app14743.cloudwayssites.com\/automating-your-test-runs-with-continuous\/\" target=\"_blank\" rel=\"noopener noreferrer\">\u201cAutomating Your Test Runs with Continuous Integration\u201d<\/a>.<\/strong><\/p>\n<p><span style=\"font-weight: 400;\">To read more about Applitools\u2019 visual UI testing and<\/span><a href=\"https:\/\/app14743.cloudwayssites.com\/downloads\/The_Rise_of_AVM_Applitools_June_18_2018.pdf\"> <span style=\"font-weight: 400;\">Application Visual Management<\/span><\/a><span style=\"font-weight: 400;\"> (AVM) solutions, check out the<\/span><a href=\"https:\/\/app14743.cloudwayssites.com\/resources\"> <span style=\"font-weight: 400;\">resources<\/span><\/a><span style=\"font-weight: 400;\"> section on the Applitools website. To get started with Applitools, request a<\/span><a href=\"https:\/\/app14743.cloudwayssites.com\/request-demo\"> <span style=\"font-weight: 400;\">demo<\/span><\/a><span style=\"font-weight: 400;\"> or<\/span><a href=\"https:\/\/app14743.cloudwayssites.com\/users\/register\"> <span style=\"font-weight: 400;\">sign up<\/span><\/a><span style=\"font-weight: 400;\"> for a free Applitools account.<\/span><\/p>\n<p><a href=\"https:\/\/app14743.cloudwayssites.com\/free_account_signup_lp\/\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-135 size-full\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2016\/12\/Automation_expert_coverage-1.png\" alt=\"Increase coverage in minutes - with Applitools Eyes Automated Visual Testing\" width=\"600\" height=\"90\"><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this 3-part series you will learn how to build simple and powerful automated web tests that will work on the browsers you care about and be configured to run&#8230;<\/p>\n","protected":false},"author":9,"featured_media":10126,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[10004],"tags":[12782,10051,10052,10086,10139,12690,12686,10262],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.5 (Yoast SEO v24.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How To Get Started with Automated Web Testing - CI Series by Dave Haeffner : Part 1\/3 - AI-Powered End-to-End Testing | Applitools<\/title>\n<meta name=\"description\" content=\"In this 3-part series you will learn how to build simple and powerful automated web tests that will work on the browsers you care about and be configured to run...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How To Get Started with Automated Web Testing -- CI Series by Dave Haeffner : Part 1\/3\" \/>\n<meta property=\"og:description\" content=\"In this 3-part series you will learn how to build simple and powerful automated web tests that will work on the browsers you care about and be configured\" \/>\n<meta property=\"og:url\" content=\"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/\" \/>\n<meta property=\"og:site_name\" content=\"AI-Powered End-to-End Testing | Applitools\" \/>\n<meta property=\"article:published_time\" content=\"2015-09-25T18:10:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-04-22T14:28:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2016\/12\/ROI.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"479\" \/>\n\t<meta property=\"og:image:height\" content=\"365\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Dave Piacente\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dave Piacente\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/\"},\"author\":{\"name\":\"Dave Piacente\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/#\/schema\/person\/67438d02e5b94c15beed6b102593b108\"},\"headline\":\"How To Get Started with Automated Web Testing &#8212; CI Series by Dave Haeffner : Part 1\/3\",\"datePublished\":\"2015-09-25T18:10:30+00:00\",\"dateModified\":\"2022-04-22T14:28:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/\"},\"wordCount\":1342,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2016\/12\/ROI.jpg\",\"keywords\":[\"CICD\",\"Dave Haeffner\",\"DevOps\",\"Jenkins\",\"Selenium\",\"Test Engineers\",\"Visual Testing Strategies\",\"Visual Testing Tools\"],\"articleSection\":[\"Advanced Topics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/\",\"url\":\"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/\",\"name\":\"How To Get Started with Automated Web Testing - CI Series by Dave Haeffner : Part 1\/3 - AI-Powered End-to-End Testing | Applitools\",\"isPartOf\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2016\/12\/ROI.jpg\",\"datePublished\":\"2015-09-25T18:10:30+00:00\",\"dateModified\":\"2022-04-22T14:28:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/#primaryimage\",\"url\":\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2016\/12\/ROI.jpg\",\"contentUrl\":\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2016\/12\/ROI.jpg\",\"width\":479,\"height\":365},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/app14743.cloudwayssites.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Advanced Topics\",\"item\":\"https:\/\/app14743.cloudwayssites.com\/blog\/category\/advanced-topics\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How To Get Started with Automated Web Testing &#8212; CI Series by Dave Haeffner : Part 1\/3\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/#website\",\"url\":\"https:\/\/app14743.cloudwayssites.com\/\",\"name\":\"Applitools Visual AI\",\"description\":\"Applitools delivers full end-to-end test automation with AI infused at every step.\",\"publisher\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/app14743.cloudwayssites.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/#organization\",\"name\":\"Applitools\",\"url\":\"https:\/\/app14743.cloudwayssites.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/applitools.png\",\"contentUrl\":\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/applitools.png\",\"width\":156,\"height\":28,\"caption\":\"Applitools\"},\"image\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/#\/schema\/person\/67438d02e5b94c15beed6b102593b108\",\"name\":\"Dave Piacente\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1d6bf65fe994753d88257ed370111fdc?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1d6bf65fe994753d88257ed370111fdc?s=96&d=mm&r=g\",\"caption\":\"Dave Piacente\"},\"url\":\"https:\/\/app14743.cloudwayssites.com\/blog\/author\/dave\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How To Get Started with Automated Web Testing - CI Series by Dave Haeffner : Part 1\/3 - AI-Powered End-to-End Testing | Applitools","description":"In this 3-part series you will learn how to build simple and powerful automated web tests that will work on the browsers you care about and be configured to run...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/","og_locale":"en_US","og_type":"article","og_title":"How To Get Started with Automated Web Testing -- CI Series by Dave Haeffner : Part 1\/3","og_description":"In this 3-part series you will learn how to build simple and powerful automated web tests that will work on the browsers you care about and be configured","og_url":"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/","og_site_name":"AI-Powered End-to-End Testing | Applitools","article_published_time":"2015-09-25T18:10:30+00:00","article_modified_time":"2022-04-22T14:28:59+00:00","og_image":[{"width":479,"height":365,"url":"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2016\/12\/ROI.jpg","type":"image\/jpeg"}],"author":"Dave Piacente","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Dave Piacente","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/#article","isPartOf":{"@id":"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/"},"author":{"name":"Dave Piacente","@id":"https:\/\/app14743.cloudwayssites.com\/#\/schema\/person\/67438d02e5b94c15beed6b102593b108"},"headline":"How To Get Started with Automated Web Testing &#8212; CI Series by Dave Haeffner : Part 1\/3","datePublished":"2015-09-25T18:10:30+00:00","dateModified":"2022-04-22T14:28:59+00:00","mainEntityOfPage":{"@id":"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/"},"wordCount":1342,"commentCount":0,"publisher":{"@id":"https:\/\/app14743.cloudwayssites.com\/#organization"},"image":{"@id":"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/#primaryimage"},"thumbnailUrl":"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2016\/12\/ROI.jpg","keywords":["CICD","Dave Haeffner","DevOps","Jenkins","Selenium","Test Engineers","Visual Testing Strategies","Visual Testing Tools"],"articleSection":["Advanced Topics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/","url":"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/","name":"How To Get Started with Automated Web Testing - CI Series by Dave Haeffner : Part 1\/3 - AI-Powered End-to-End Testing | Applitools","isPartOf":{"@id":"https:\/\/app14743.cloudwayssites.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/#primaryimage"},"image":{"@id":"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/#primaryimage"},"thumbnailUrl":"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2016\/12\/ROI.jpg","datePublished":"2015-09-25T18:10:30+00:00","dateModified":"2022-04-22T14:28:59+00:00","breadcrumb":{"@id":"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/#primaryimage","url":"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2016\/12\/ROI.jpg","contentUrl":"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2016\/12\/ROI.jpg","width":479,"height":365},{"@type":"BreadcrumbList","@id":"https:\/\/app14743.cloudwayssites.com\/blog\/how-to-get-started-with-automated-web-testing-ci\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/app14743.cloudwayssites.com\/"},{"@type":"ListItem","position":2,"name":"Advanced Topics","item":"https:\/\/app14743.cloudwayssites.com\/blog\/category\/advanced-topics\/"},{"@type":"ListItem","position":3,"name":"How To Get Started with Automated Web Testing &#8212; CI Series by Dave Haeffner : Part 1\/3"}]},{"@type":"WebSite","@id":"https:\/\/app14743.cloudwayssites.com\/#website","url":"https:\/\/app14743.cloudwayssites.com\/","name":"Applitools Visual AI","description":"Applitools delivers full end-to-end test automation with AI infused at every step.","publisher":{"@id":"https:\/\/app14743.cloudwayssites.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/app14743.cloudwayssites.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/app14743.cloudwayssites.com\/#organization","name":"Applitools","url":"https:\/\/app14743.cloudwayssites.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/app14743.cloudwayssites.com\/#\/schema\/logo\/image\/","url":"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/applitools.png","contentUrl":"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/applitools.png","width":156,"height":28,"caption":"Applitools"},"image":{"@id":"https:\/\/app14743.cloudwayssites.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/app14743.cloudwayssites.com\/#\/schema\/person\/67438d02e5b94c15beed6b102593b108","name":"Dave Piacente","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/app14743.cloudwayssites.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1d6bf65fe994753d88257ed370111fdc?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1d6bf65fe994753d88257ed370111fdc?s=96&d=mm&r=g","caption":"Dave Piacente"},"url":"https:\/\/app14743.cloudwayssites.com\/blog\/author\/dave\/"}]}},"_links":{"self":[{"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/posts\/10025"}],"collection":[{"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/comments?post=10025"}],"version-history":[{"count":0,"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/posts\/10025\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/media\/10126"}],"wp:attachment":[{"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/media?parent=10025"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/categories?post=10025"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/tags?post=10025"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}