{"id":16380,"date":"2019-10-25T00:28:30","date_gmt":"2019-10-25T00:28:30","guid":{"rendered":"https:\/\/app14743.cloudwayssites.com\/blog\/?p=6380"},"modified":"2022-03-22T09:05:17","modified_gmt":"2022-03-22T16:05:17","slug":"modern-functional-testing","status":"publish","type":"post","link":"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/","title":{"rendered":"How To Modernize Your Functional Testing"},"content":{"rendered":"<p>I\u2019m taking <a href=\"https:\/\/www.linkedin.com\/in\/rajaraodv\/\" target=\"_blank\" rel=\"noopener noreferrer\">Raja Rao<\/a>\u2019s course, <a href=\"https:\/\/testautomationu.applitools.com\/modern-functional-testing\/\">Modern Functional Testing with Visual AI<\/a>, on <a href=\"https:\/\/testautomationu.applitools.com\/\">Test Automation University<\/a>. This course challenged my perspective on software testing. I plan to summarize a chapter of Raja\u2019s course each week to share what I have learned.<\/p>\n<p><!--more--><\/p>\n<p>The first chapter compares modern <a href=\"https:\/\/app14743.cloudwayssites.com\/functional-testing\/\">functional testing<\/a> with Visual AI against legacy functional testing with coded assertions of application output. Raja states that Visual AI allows for modern functional testing while using an existing functional test tool that relies on coded assertions results in lost productivity.<\/p>\n<p>To back up his claim, Raja shows us a typical web app driven to a specific behavior. In this case, it\u2019s the log-in page of a web app, where the user hasn\u2019t entered a username and password, and yet selected the \u201cEnter\u201d button, and the app responds:<\/p>\n<p>\u201cPlease enter username and password\u201d<\/p>\n<p><img decoding=\"async\" class=\"wp-image-6370 aligncenter\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/Screen-Shot-2019-10-22-at-3.25.41-PM.png\" alt=\"Screen Shot 2019 10 22 at 3.25.41 PM\" \/><\/p>\n<p>From here, an enterprising test engineer will look at the page above and say:<\/p>\n<p>\u201cOkay, what can I test?\u201d<\/p>\n<p>There\u2019s the obvious functional response. There are other things to check, like:<\/p>\n<ul>\n<li>The existence of the logo at top<\/li>\n<li>The page title \u201cLogin Form\u201d<\/li>\n<li>The title and icons of the \u201cUsername\u201d and \u201cPassword\u201d text boxes<\/li>\n<li>The existence of the \u201cSign in\u201d button and the \u201cRemember Me\u201d checkbox &#8211; with the correct filler text<\/li>\n<li>The Twitter and Facebook icons below<\/li>\n<\/ul>\n<p>You can write code to validate that all these exist. And, if you\u2019re a test automation engineer focused on functional test, you probably do this today.<\/p>\n<p>Raja shows you what this code looks like:<\/p>\n<p><img decoding=\"async\" class=\"wp-image-6376 aligncenter\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/Screen-Shot-2019-10-22-at-3.55.24-PM.png\" alt=\"Screen Shot 2019 10 22 at 3.55.24 PM\" \/><\/p>\n<p>There are 18 total lines of code. There is a single line of navigation code to go to this page. One line of directs the browser to click the \u201cSign In\u201d button. The remaining 16 lines of code assert that all the elements exist on the page. Those 16 lines of code include 14 identifiers (IDs, Name, Xpath, etc.) that can change, and 7 references to hard-coded text.<\/p>\n<p>You might be aware that the test code can vary from app version to app version, as each release can change some or all of these identifiers.<\/p>\n<p>Why do identifiers change? Let\u2019s describe several reasons:<\/p>\n<ol>\n<li>Identifiers might change, while the underlying content does not.<\/li>\n<li>Some identifiers have different structures, such as additional data that was not previously tested.<\/li>\n<li>Path-based identifiers depend on the relative location on a page, which can change from version to version.<\/li>\n<\/ol>\n<p>So, in some cases, existing test code misses test cases. In others, existing test code generates an error even when no error exists.<\/p>\n<p>If you\u2019re a test engineer, you know that you have to maintain your tests every release. And that means you maintain all these assertions.<\/p>\n<h2 id=\"h.zghktoyl33cp\">Implications For Testing<\/h2>\n<p>Let\u2019s walk through all the tests for just this page. We covered the negative condition for hitting \u201cSign In\u201d without entering a username or password. Next, we must verify the error messages and other elements if one, or the other, field has data (the response messages may differ). Also, we need to handle the error condition where the username or password is incorrect.<\/p>\n<p>We also have to worry about all the cases where a valid login moves to a correct next page.<\/p>\n<p>Okay &#8211; lots of tests that need to be manually created and validated. And, then, there are a bunch of different browsers and operating systems. And, the apps can run on mobile browsers and mobile devices. Each of these different instances can introduce unexpected behavior.<\/p>\n<p>What are the implications of all these tests?<\/p>\n<p><img decoding=\"async\" class=\"wp-image-6378 aligncenter\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/Screen-Shot-2019-10-22-at-4.31.51-PM.png\" alt=\"Screen Shot 2019 10 22 at 4.31.51 PM\" \/><\/p>\n<p>Raja points out the key implication. Workload. For every team besides QA, it matters to make the app better &#8211; which means changes. A\/B testing, new ideas &#8211; applications need to change. And every version of the app means potential changes to identifiers &#8211; meaning that tests change and need to be validated. As a result, QA ends up with tons of work to validate apps. Or, QA becomes the bottleneck to all the change that everyone else wants to add to the app.<\/p>\n<p>In fact, every other team can design and spec their change effectively. Given the different platforms that QA must validate, the QA team really wants to hold off changes. And, that\u2019s a business problem.<\/p>\n<h2 id=\"h.kx96cat0c5c9\">Visual Validation with Visual AI &#8211; A Better Way<\/h2>\n<p>What would happen if QA had a better way of validating the output &#8211; not just line by line and assertion by assertion? What if QA could take a snapshot of the entire page after an action and compare that with the previous instance?<\/p>\n<p>QA Engineers have desired visual validation since browser-based applications could run easily on multiple platforms. And, using Applitools, Raja demonstrates why visual validation tools appeal so much to the engineering team.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-6382 aligncenter\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/Screen-Shot-2019-10-22-at-5.41.41-PM.png\" alt=\"\" width=\"653\" height=\"364\" \/><\/p>\n<p>In this screen, Raja shows that the 18 lines of code are down to five, and the sixteen lines of validation code are down to three. \u00a0 \u00a0The three lines of validation code read:<\/p>\n<p><a href=\"https:\/\/gist.github.com\/batmi02\/b5174f538e13e3226dba7fac61fc2afc\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/gist.github.com\/batmi02\/b5174f538e13e3226dba7fac61fc2afc<\/a><\/p>\n<p>So, we have a call to the capture session to start, a capture, and the close of the capture session. None of this code refers to a locator on the page.<\/p>\n<p>Crazy as it may seem, visual validation code requires no identifiers, no Xpath, no names. Two pages with different build structures but identical visual behavior are the same to Applitools.<\/p>\n<p>From a coding perspective, test code becomes simple to write:<\/p>\n<ol>\n<li>Drive behavior (with your favorite test runner)<\/li>\n<li>Take a screenshot<\/li>\n<\/ol>\n<p>You can open a capture session and capture multiple images. Each will be treated as unique images for validation purposes within that capture session.<\/p>\n<p>Once you have an image of a page, it becomes the baseline. \u00a0The Applitools service compares each subsequently captured image to the baseline. Any differences get highlighted, and you, as the tester, identify the differences that matter as either bugs or new features.<\/p>\n<h2 id=\"h.2ft9va8hmvl\">Handling Code Changes With Legacy Functional Test<\/h2>\n<p>The big benefit of visual validation with Visual AI comes from comparing new code with new features to old code.<\/p>\n<p>When Raja takes us back to his example page, he now shows a new version of the login page which has several differences &#8211; real improvements you might look to validate with your test code.<\/p>\n<p><img decoding=\"async\" class=\"wp-image-6374 aligncenter\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/Screen-Shot-2019-10-23-at-11.26.45-AM.png\" alt=\"Screen Shot 2019 10 23 at 11.26.45 AM\" \/><\/p>\n<p>And, here, there are bugs with the new code. But, does your existing test code capture all the changes?<\/p>\n<p>Let\u2019s go through them all:<\/p>\n<ol>\n<li>Your existing test <strong>misses<\/strong>\u00a0the broken logo (-1). The logo at the top no longer links to the proper icon file. Did you check for the logo? If you checked to see that the reference icon file was identical, your code misses the fact that the response file is a broken image.<\/li>\n<li>Your existing test <strong>misses<\/strong>\u00a0the text overlap of the alert and the \u201cLogin Form\u201d text (-1). The error message now overlaps the Login Form page title. You miss this error because the text remains identical &#8211; though their relative positions change<\/li>\n<li>Your existing test <strong>catches<\/strong>\u00a0the new text in the username and password boxes (+2). Your test code correctly identifies that there is new prompt text in the name and password boxes and registers an error. So, your test shows two errors.<\/li>\n<li>Your existing test <strong>misses<\/strong>\u00a0the new feature (-1). The new box with \u201cTerms and Conditions\u201d has no test. It is a new feature, and you need to code a test for the new feature.<\/li>\n<\/ol>\n<p>So, to summarize, your existing tests catch two bugs (different locators for the username and password field), miss two bugs (the broken logo and the text and alert overlap), and don\u2019t have anything to say about the new feature. You have to modify or write three new tests.<\/p>\n<p>But wait! There\u2019s more!<\/p>\n<p><img decoding=\"async\" class=\"wp-image-6377 aligncenter\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/Screen-Shot-2019-10-23-at-11.26.45-AM-1.png\" alt=\"Screen Shot 2019 10 23 at 11.26.45 AM 1\" \/><\/p>\n<ul>\n<li>Your existing test gives you <strong>two false alarms<\/strong>\u00a0that the Twitter and Facebook links are broken. Those links at the bottom used Xpath locators &#8211; which got changed by the new feature. Because the locators changed, these now show up as errors &#8211; false positives &#8211; that must be fixed to make the test code work again.<\/li>\n<\/ul>\n<h2>Handling Visual Changes with Visual AI<\/h2>\n<p>With Visual AI in Applitools, you actually capture all the important changes and correctly identify visual elements that remain unchanged, even if the underlying page structure is different.<\/p>\n<p><img decoding=\"async\" class=\"wp-image-6373 aligncenter\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/Screen-Shot-2019-10-23-at-11.38.40-AM.png\" alt=\"Screen Shot 2019 10 23 at 11.38.40 AM\" \/><\/p>\n<p>Visual AI captures:<\/p>\n<ul>\n<li>1 &#8211; Change &#8211; the broken logo on top<\/li>\n<li>2 &#8211; Change &#8211; The login form and alert overlap<\/li>\n<li>3 &#8211; Change &#8211; The fact that the alert text has moved from version to version (the reason for the text overlap)<\/li>\n<li>4 &#8211; Change\/Change &#8211; The changes to the Username and Password box text<\/li>\n<li>5 &#8211; Change &#8211; the new feature of the Terms and Conditions text<\/li>\n<li>6 &#8211; No Change &#8211; Twitter and Facebook logos remain unmoved (no false positives)<\/li>\n<\/ul>\n<p>So, note that Visual AI captures changes in the visual elements. All changes get captured and identified. There is no need to look at the test code afterward and ask, \u201cwhat did we miss?\u201d There is no need to look at the test code and say, \u201cHey, that was a false positive, we need to change that test.\u201d<\/p>\n<h2>Comparing Visual AI and Legacy Functional Code<\/h2>\n<p>With Visual AI, you no longer have to look at the screen and determine which code changes to make. You are asked to either accept the change as part of the new baseline or reject the change as an error.<\/p>\n<p>How powerful is that capability?<\/p>\n<p>Well, Raja makes a comparison of the work an engineer puts in to do validation using legacy functional testing and functional testing with Visual AI.<\/p>\n<p><img decoding=\"async\" class=\"wp-image-6379 aligncenter\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/Screen-Shot-2019-10-23-at-11.54.37-AM.png\" alt=\"Screen Shot 2019 10 23 at 11.54.37 AM\" \/><\/p>\n<p>With legacy functional testing:<\/p>\n<ul>\n<li>The real bug &#8211; the broken logo &#8211; can only be uncovered by manual testing. Once it is discovered, a tester needs to determine what code will find the broken representation. Typically, this can take 15 minutes (more or less). And you need to inform the developers of the bug.<\/li>\n<li>The visual bug &#8211; the text overlap &#8211; can only be uncovered by manual testing. Once the bug is discovered, the tester needs to determine what code will find the overlap and add the appropriate test (e.g. a CSS check). This could take 15 minutes (more or less) to add the test code. And, you need to inform the developers of the bug.<\/li>\n<li>The intentionally changed placeholder text for Username and Password text boxes need to be recoded, as they are flagged as errors. This could take 10 minutes (more or less).<\/li>\n<li>The new feature can only be identified by manual validation or by the developer. This test needs to be added (perhaps 5 minutes of coding). You may want to ask the developers about a better way to find out about the new features.<\/li>\n<li>The false positive errors around the Twitter and Facebook logos need to be resolved. The Xpath code needs to be inspected and updated. This could take 15 minutes (more or less)<\/li>\n<\/ul>\n<p>In summary, you could spend 60+ minutes, or 3,600+ seconds, for all this work.<\/p>\n<p>In contrast, automated visual validation with Visual AI does the following:<\/p>\n<ul>\n<li>You find the broken logo by running visual validation. No additional code or manual work needed. Incremental time: zero seconds. Alert developers of the error: 2 seconds. Alerting in Applitools can send a bug notification to developers when rejecting a difference.<\/li>\n<li>Visual validation uncovers the text overlap and moved alert text. Incremental time: zero secondsAlert developers of the error: 2 seconds. Alerting in Applitools can send a bug notification to developers when rejecting a difference.<\/li>\n<li>Visual validation identifies the new text in the Username and Password text boxes. Visual validation workflow lets you accept the visual change as the new baseline (2 seconds per change &#8211; or 4 seconds total)<\/li>\n<li>You uncover the new feature with no incremental change or new test code, and you accept the visual change as the new baseline (2 seconds).<\/li>\n<li>The Twitter and Facebook logos don\u2019t show up as differences &#8211; so you have no work to do (0 seconds)<\/li>\n<\/ul>\n<p>So, 10 seconds for Visual AI. Versus 3,600 for traditional functional testing. 360X faster.<\/p>\n<h2 id=\"h.lvkydkccsf6q\">Let\u2019s Get Real<\/h2>\n<p>I would think that a productivity gain of 360X might appear unreasonable. So did Raja. When he went through the real-world examples for writing and maintaining tests, he came up with a more reasonable-looking table.<\/p>\n<p><img decoding=\"async\" class=\"wp-image-6371 aligncenter\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/Screen-Shot-2019-10-23-at-12.15.46-PM.png\" alt=\"Screen Shot 2019 10 23 at 12.15.46 PM\" \/><\/p>\n<p>For just a single page, in development and just a single update, Raja concluded that the maintenance costs with Visual AI remain about 1000x better, and the overall test development and maintenance would be about 18x faster. Every subsequent update of the page would be that much faster with Visual AI.<\/p>\n<p>In addition, Visual AI catches all the visual differences without test changes and ignores underlying changes to locators that would cause functional tests to generate false positives. So, the accuracy of Visual AI ends up making Visual AI users much more productive.<\/p>\n<p>Finally, because Visual AI does not depend on locators for visual validation, Visual AI ends up depending only on the action locators &#8211; which would need to be maintained for any functional test. So, Visual AI becomes much more stable &#8211; again leading to Visual AI users being much more productive.<\/p>\n<p>Raja then looks at a more realistic app page to have you imagine the kind of development and test work you might need to ensure the functional and visual behavior of just this page.<\/p>\n<p><img decoding=\"async\" class=\"wp-image-6369 aligncenter\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/Screen-Shot-2019-10-23-at-12.25.42-PM.png\" alt=\"Screen Shot 2019 10 23 at 12.25.42 PM\" \/><\/p>\n<p>For a given page, with calculators, data sorting, user information\u2026 this is a large amount of real estate that involves display and action. How would you ensure proper behavior, error handling, and manage update?<\/p>\n<p>Extend this across your entire app and think about how much more stable and productive you can be with Visual AI.<\/p>\n<h2 id=\"h.vu9mkrefd246\">Chapter 1 Summary<\/h2>\n<p>Raja summarizes the chapter by pointing out that visual validation with Visual AI requires only the following:<\/p>\n<ol>\n<li>Take action<\/li>\n<li>Take a screenshot in Visual AI<\/li>\n<li>Compare the screenshot with the baseline in Visual AI<\/li>\n<\/ol>\n<p><img decoding=\"async\" class=\"wp-image-6372 aligncenter\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/Screen-Shot-2019-10-23-at-12.27.50-PM.png\" alt=\"Screen Shot 2019 10 23 at 12.27.50 PM\" \/><\/p>\n<p>That\u2019s it. \u00a0Visual AI catches all the relevant differences without manual intervention. Using Visual AI avoids both the test development tasks for ensuring that app responses match expectations, and it eliminates the more difficult steps of maintaining tests as part of app enhancement.<\/p>\n<p>Next Up &#8211; Chapter 2.<\/p>\n<h2 id=\"h.blocxnprbytc\">For More Information<\/h2>\n<ul>\n<li><a href=\"https:\/\/testautomationu.applitools.com\/login.html?utm_term=&amp;utm_source=web-referral&amp;utm_medium=blog&amp;utm_content=tau&amp;utm_campaign=&amp;utm_subgroup=\">Test Automation University<\/a><\/li>\n<li><a href=\"https:\/\/app14743.cloudwayssites.com\/tutorials?utm_term=&amp;utm_source=web-referral&amp;utm_medium=blog&amp;utm_content=tutorial&amp;utm_campaign=&amp;utm_subgroup=\">Applitools Tutorials<\/a><\/li>\n<li><a href=\"https:\/\/app14743.cloudwayssites.com\/free?utm_term=&amp;utm_source=web-referral&amp;utm_medium=blog&amp;utm_content=free-account&amp;utm_campaign=&amp;utm_subgroup=\">Sign up for a Free Account<\/a><\/li>\n<li><a href=\"https:\/\/app14743.cloudwayssites.com\/request-demo?utm_term=&amp;utm_source=web-referral&amp;utm_medium=blog&amp;utm_content=request-a-demo&amp;utm_campaign=&amp;utm_subgroup=\">Request a Demo<\/a><\/li>\n<li><a href=\"https:\/\/testautomationu.applitools.com\/automated-visual-testing-a-fast-path-to-test-automation-success\/index.html?utm_term=&amp;utm_source=web-referral&amp;utm_medium=blog&amp;utm_content=tau&amp;utm_campaign=&amp;utm_subgroup=\">Automated Visual Testing Course from Test Automation University<\/a><\/li>\n<li><a href=\"https:\/\/app14743.cloudwayssites.com\/blog\/functional-testing-visual-assertions?utm_term=&amp;utm_source=web-referral&amp;utm_medium=blog&amp;utm_content=blog&amp;utm_campaign=&amp;utm_subgroup=\">How Do I Validate Visually?<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>The first chapter compares modern functional testing with Visual AI against legacy functional testing with coded assertions of application output. Raja states that Visual AI allows for modern functional testing while using an existing functional test tool that relies on coded assertions results in lost productivity.<\/p>\n","protected":false},"author":77,"featured_media":16407,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[12271],"tags":[12689,10061,12688,10793,12690,10192,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 Modernize Your Functional Testing - AI-Powered End-to-End Testing | Applitools<\/title>\n<meta name=\"description\" content=\"Visual AI allows for modern functional testing while using an existing functional test tool that relies on coded assertions results in lost productivity.\" \/>\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\/modern-functional-testing\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How To Modernize Your Functional Testing\" \/>\n<meta property=\"og:description\" content=\"The first chapter compares modern functional testing with Visual AI against legacy functional testing with coded assertions of application output. Raja states that Visual AI allows for modern functional testing while using an existing functional test tool that relies on coded assertions results in lost productivity.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/\" \/>\n<meta property=\"og:site_name\" content=\"AI-Powered End-to-End Testing | Applitools\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-25T00:28:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-22T16:05:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/michael-seh-S66mTqg0nM8-unsplash-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1707\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Michael Battat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Michael Battat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/\"},\"author\":{\"name\":\"Michael Battat\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/#\/schema\/person\/410b5710e19f580ee19ef348537bc347\"},\"headline\":\"How To Modernize Your Functional Testing\",\"datePublished\":\"2019-10-25T00:28:30+00:00\",\"dateModified\":\"2022-03-22T16:05:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/\"},\"wordCount\":2386,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/michael-seh-S66mTqg0nM8-unsplash-scaled.jpg\",\"keywords\":[\"Business Leaders\",\"Functional Testing\",\"Technical Leaders\",\"Test Automation University\",\"Test Engineers\",\"Visual AI\",\"Visual Testing Strategies\",\"Visual Testing Tools\"],\"articleSection\":[\"Getting Started\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/\",\"url\":\"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/\",\"name\":\"How To Modernize Your Functional Testing - AI-Powered End-to-End Testing | Applitools\",\"isPartOf\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/michael-seh-S66mTqg0nM8-unsplash-scaled.jpg\",\"datePublished\":\"2019-10-25T00:28:30+00:00\",\"dateModified\":\"2022-03-22T16:05:17+00:00\",\"description\":\"Visual AI allows for modern functional testing while using an existing functional test tool that relies on coded assertions results in lost productivity.\",\"breadcrumb\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/#primaryimage\",\"url\":\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/michael-seh-S66mTqg0nM8-unsplash-scaled.jpg\",\"contentUrl\":\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/michael-seh-S66mTqg0nM8-unsplash-scaled.jpg\",\"width\":2560,\"height\":1707,\"caption\":\"Photo by Michael Seh on Unsplash\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/app14743.cloudwayssites.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Getting Started\",\"item\":\"https:\/\/app14743.cloudwayssites.com\/blog\/category\/getting-started\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How To Modernize Your Functional Testing\"}]},{\"@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\/410b5710e19f580ee19ef348537bc347\",\"name\":\"Michael Battat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b1216c259c20b8394687b91ff06f1af2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b1216c259c20b8394687b91ff06f1af2?s=96&d=mm&r=g\",\"caption\":\"Michael Battat\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/mdbattat\/\"],\"url\":\"https:\/\/app14743.cloudwayssites.com\/blog\/author\/michaelbattat\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How To Modernize Your Functional Testing - AI-Powered End-to-End Testing | Applitools","description":"Visual AI allows for modern functional testing while using an existing functional test tool that relies on coded assertions results in lost productivity.","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\/modern-functional-testing\/","og_locale":"en_US","og_type":"article","og_title":"How To Modernize Your Functional Testing","og_description":"The first chapter compares modern functional testing with Visual AI against legacy functional testing with coded assertions of application output. Raja states that Visual AI allows for modern functional testing while using an existing functional test tool that relies on coded assertions results in lost productivity.","og_url":"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/","og_site_name":"AI-Powered End-to-End Testing | Applitools","article_published_time":"2019-10-25T00:28:30+00:00","article_modified_time":"2022-03-22T16:05:17+00:00","og_image":[{"width":2560,"height":1707,"url":"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/michael-seh-S66mTqg0nM8-unsplash-scaled.jpg","type":"image\/jpeg"}],"author":"Michael Battat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Michael Battat","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/#article","isPartOf":{"@id":"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/"},"author":{"name":"Michael Battat","@id":"https:\/\/app14743.cloudwayssites.com\/#\/schema\/person\/410b5710e19f580ee19ef348537bc347"},"headline":"How To Modernize Your Functional Testing","datePublished":"2019-10-25T00:28:30+00:00","dateModified":"2022-03-22T16:05:17+00:00","mainEntityOfPage":{"@id":"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/"},"wordCount":2386,"commentCount":0,"publisher":{"@id":"https:\/\/app14743.cloudwayssites.com\/#organization"},"image":{"@id":"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/#primaryimage"},"thumbnailUrl":"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/michael-seh-S66mTqg0nM8-unsplash-scaled.jpg","keywords":["Business Leaders","Functional Testing","Technical Leaders","Test Automation University","Test Engineers","Visual AI","Visual Testing Strategies","Visual Testing Tools"],"articleSection":["Getting Started"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/","url":"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/","name":"How To Modernize Your Functional Testing - AI-Powered End-to-End Testing | Applitools","isPartOf":{"@id":"https:\/\/app14743.cloudwayssites.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/#primaryimage"},"image":{"@id":"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/#primaryimage"},"thumbnailUrl":"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/michael-seh-S66mTqg0nM8-unsplash-scaled.jpg","datePublished":"2019-10-25T00:28:30+00:00","dateModified":"2022-03-22T16:05:17+00:00","description":"Visual AI allows for modern functional testing while using an existing functional test tool that relies on coded assertions results in lost productivity.","breadcrumb":{"@id":"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/#primaryimage","url":"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/michael-seh-S66mTqg0nM8-unsplash-scaled.jpg","contentUrl":"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2019\/10\/michael-seh-S66mTqg0nM8-unsplash-scaled.jpg","width":2560,"height":1707,"caption":"Photo by Michael Seh on Unsplash"},{"@type":"BreadcrumbList","@id":"https:\/\/app14743.cloudwayssites.com\/blog\/modern-functional-testing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/app14743.cloudwayssites.com\/"},{"@type":"ListItem","position":2,"name":"Getting Started","item":"https:\/\/app14743.cloudwayssites.com\/blog\/category\/getting-started\/"},{"@type":"ListItem","position":3,"name":"How To Modernize Your Functional Testing"}]},{"@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\/410b5710e19f580ee19ef348537bc347","name":"Michael Battat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/app14743.cloudwayssites.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/b1216c259c20b8394687b91ff06f1af2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b1216c259c20b8394687b91ff06f1af2?s=96&d=mm&r=g","caption":"Michael Battat"},"sameAs":["https:\/\/www.linkedin.com\/in\/mdbattat\/"],"url":"https:\/\/app14743.cloudwayssites.com\/blog\/author\/michaelbattat\/"}]}},"_links":{"self":[{"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/posts\/16380"}],"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\/77"}],"replies":[{"embeddable":true,"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/comments?post=16380"}],"version-history":[{"count":0,"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/posts\/16380\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/media\/16407"}],"wp:attachment":[{"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/media?parent=16380"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/categories?post=16380"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/tags?post=16380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}