{"id":18453,"date":"2020-05-15T20:23:46","date_gmt":"2020-05-15T20:23:46","guid":{"rendered":"https:\/\/app14743.cloudwayssites.com\/?page_id=18453"},"modified":"2024-02-06T09:03:19","modified_gmt":"2024-02-06T17:03:19","slug":"automated-visual-testing-best-practices-guide","status":"publish","type":"page","link":"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/","title":{"rendered":"Learn &#8211; Automated Visual Testing Best Practices Guide"},"content":{"rendered":"\n<div class=\"wp-block-group toc-section-true\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"h-introduction\">Introduction<\/h2>\n\n\n\n<p class=\"is-style-lead-paragraph\">This guide, authored by Angie Jones, provides a set of best practices and our recommendations for implementing and maintaining automated visual tests with Applitools based on our customers\u2019 experiences.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Many of the top high-performing companies in software, financial services, and healthcare verticals are using Applitools Eyes for their visual test automation needs. <\/p>\n\n\n\n<p class=\"has-medium-font-size\">We\u2019ve talked with these companies to gain a better understanding of how they are using the product and to identify common practices that are working well for teams. <\/p>\n\n\n\n<p class=\"has-medium-font-size\">This guide provides a set of best practices and our recommendations for implementing and maintaining automated <a href=\"https:\/\/app14743.cloudwayssites.com\/blog\/visual-testing\/\">visual tests<\/a> with Applitools based on our customers\u2019 experiences.<\/p>\n\n\n<div class=\"small-cta is-style-card-vertical\">\n      <div class=\"body\">\n            <p>Looking for a PDF version of the Automated Visual Testing Best Practices Guide?<\/p>\n    <\/div>\n    <div class=\"action\">\n      <a href=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/Automated_Visual_Testing_Best_Practices_Guide_2020_May_05-1.pdf\" class=\"btn\">Download PDF<\/a>\n    <\/div>\n  <\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-group toc-section-true\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"h-summary-of-recommendations\">Summary of Recommendations<\/h2>\n\n\n\n<p class=\"has-medium-font-size\">Here is a summary of our top recommendations contained within this guide. Details on each of these, including when to detour from the recommendation can be found within the following sections of the guide.<\/p>\n\n\n  <section class=\"block icon-list theme- best-practices-list pb-sm pt-sm\">\n    <div class=\"container\">\n                    <div class=\"item\">\n          <img decoding=\"async\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/icon-check.png\" alt=\"\" class=\"item-img\" loading=\"lazy\">\n          <div class=\"item-content\">\n            <h2 class=\"title\">Use Eyes for both visual &#038; functional assertions<\/h2>\n            <p>The Applitools Eyes API should be used to complement or encompass functional assertions with less lines of code and more test coverage.<br \/>\n<a href=\"#what-is-visual-testing\">Read more<\/a><\/p>\n          <\/div>\n        <\/div>\n                <div class=\"item\">\n          <img decoding=\"async\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/icon-check.png\" alt=\"\" class=\"item-img\" loading=\"lazy\">\n          <div class=\"item-content\">\n            <h2 class=\"title\">Verify the entire page<\/h2>\n            <p>While there are various options to visually verify your application with Applitools Eyes, we recommend verifying the entire page of your application to obtain the most coverage from your visual testing.<br \/>\n<a href=\"#visual-testing-techniques\">Read more<\/a><\/p>\n          <\/div>\n        <\/div>\n                <div class=\"item\">\n          <img decoding=\"async\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/icon-check.png\" alt=\"\" class=\"item-img\" loading=\"lazy\">\n          <div class=\"item-content\">\n            <h2 class=\"title\">Use the Strict match level<\/h2>\n            <p>By default, Applitools Eyes uses the Strict match level algorithm (our recommended comparison method), which employs AI to compare your baseline image with the current image from a regression run.<a href=\".\/#StrictMatchLevel\"><br \/>\nRead more<\/a><\/p>\n          <\/div>\n        <\/div>\n                <div class=\"item\">\n          <img decoding=\"async\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/icon-check.png\" alt=\"\" class=\"item-img\" loading=\"lazy\">\n          <div class=\"item-content\">\n            <h2 class=\"title\">Use Ignore annotation for data that is not relevant to the test<\/h2>\n            <p>We recommend using our Ignore annotation to ignore parts of your application\u2019s page that are not pertinent to the test.<br \/>\n<a href=\".\/#Annotations\">Read more<\/a><\/p>\n<p>&nbsp;<\/p>\n          <\/div>\n        <\/div>\n                <div class=\"item\">\n          <img decoding=\"async\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/icon-check.png\" alt=\"\" class=\"item-img\" loading=\"lazy\">\n          <div class=\"item-content\">\n            <h2 class=\"title\">Programmatically apply annotations when possible<\/h2>\n            <p>When annotations are needed, use fluent checks to programmatically apply them to baseline images before the test is executed.<br \/>\n<a href=\".\/#annotations-continued\">Read more<\/a><\/p>\n<p>&nbsp;<\/p>\n          <\/div>\n        <\/div>\n                <div class=\"item\">\n          <img decoding=\"async\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/icon-check.png\" alt=\"\" class=\"item-img\" loading=\"lazy\">\n          <div class=\"item-content\">\n            <h2 class=\"title\">Use steps to include multiple visual checkpoints in a single test<\/h2>\n            <p>It\u2019s recommended to perform multiple visual checks where there are multiple visual states that need to be verified in a given scenario.<br \/>\n<a href=\"#multiple-checks-within-a-test\">Read more<\/a><\/p>\n          <\/div>\n        <\/div>\n                <div class=\"item\">\n          <img decoding=\"async\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/icon-check.png\" alt=\"\" class=\"item-img\" loading=\"lazy\">\n          <div class=\"item-content\">\n            <h2 class=\"title\">Group related tests into batches to enable easier management as well as automated maintenance of baselines<\/h2>\n            <p>For related tests, it\u2019s recommended to use batches so that the tests display together on the Applitools Dashboard within an aggregated view.<br \/>\n<a href=\"#GroupingTests\">Read more<\/a><\/p>\n<p>&nbsp;<\/p>\n          <\/div>\n        <\/div>\n                <div class=\"item\">\n          <img decoding=\"async\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/icon-check.png\" alt=\"\" class=\"item-img\" loading=\"lazy\">\n          <div class=\"item-content\">\n            <h2 class=\"title\">Utilize a wrapper class to encapsulate visual checks<\/h2>\n            <p>It\u2019s a good practice to create a wrapper class that isolates the Eyes API calls so that if there are any changes to the API, the required changes to the test code will be limited to an individual class.<a href=\".\/#TestCodeDesign\"><br \/>\nRead more<\/a><\/p>\n          <\/div>\n        <\/div>\n                <div class=\"item\">\n          <img decoding=\"async\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/icon-check.png\" alt=\"\" class=\"item-img\" loading=\"lazy\">\n          <div class=\"item-content\">\n            <h2 class=\"title\">Use Layout mode for early unverified localization testing<\/h2>\n            <p>Before your localized app has been verified by a specialist, use Layout mode. After you\u2019re sure the content is correct, use Strict mode.<br \/>\n<a href=\".\/#LocalizationTesting\">Read more<\/a><\/p>\n          <\/div>\n        <\/div>\n                <div class=\"item\">\n          <img decoding=\"async\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/icon-check.png\" alt=\"\" class=\"item-img\" loading=\"lazy\">\n          <div class=\"item-content\">\n            <h2 class=\"title\">Tag visual tests and execute them any time the UI is under test<\/h2>\n            <p>Utilize tagging capabilities of your test runner to easily include and exclude visual tests when executing.<a href=\".\/#ExecutingVisualTests\"><br \/>\nRead more<\/a><\/p>\n<p>&nbsp;<\/p>\n          <\/div>\n        <\/div>\n                <div class=\"item\">\n          <img decoding=\"async\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/icon-check.png\" alt=\"\" class=\"item-img\" loading=\"lazy\">\n          <div class=\"item-content\">\n            <h2 class=\"title\">Use the Ultrafast Grid to run cross-platform tests<\/h2>\n            <p>Applitools\u2019 Ultrafast Grid enables you to execute your tests across many different browsers, viewports, and devices at a fraction of the time it takes with other solutions.<br \/>\n<a href=\".\/#Platforms\">Read more<\/a><\/p>\n<p>&nbsp;<\/p>\n          <\/div>\n        <\/div>\n                <div class=\"item\">\n          <img decoding=\"async\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/icon-check.png\" alt=\"\" class=\"item-img\" loading=\"lazy\">\n          <div class=\"item-content\">\n            <h2 class=\"title\">Gate your builds with relevant visual checks<\/h2>\n            <p>With the accuracy of Eyes API, we feel confident recommending that you have your visual tests follow the same gating strategy used for your functional tests.<br \/>\n<a href=\".\/#GatingDeployments\">Read more<\/a><\/p>\n          <\/div>\n        <\/div>\n                <div class=\"item\">\n          <img decoding=\"async\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/icon-check.png\" alt=\"\" class=\"item-img\" loading=\"lazy\">\n          <div class=\"item-content\">\n            <h2 class=\"title\">Visual checks can be used when using feature files<\/h2>\n            <p>When practicing BDD, continue to write feature files without implementation detail and use the step definition code to execute visual checks where necessary.<br \/>\n<a href=\".\/#BDD\">Read more<\/a><\/p>\n          <\/div>\n        <\/div>\n                <div class=\"item\">\n          <img decoding=\"async\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/icon-check.png\" alt=\"\" class=\"item-img\" loading=\"lazy\">\n          <div class=\"item-content\">\n            <h2 class=\"title\">Use the Applitools dashboard to collaborate<\/h2>\n            <p>The Applitools Dashboard should be used to annotate screenshots of failures with bug regions, assign failures to developers to review, and remark on questionable changes.<br \/>\n<a href=\".\/#Collaborating-On-Bugs\">Read more<\/a><\/p>\n          <\/div>\n        <\/div>\n                <div class=\"item\">\n          <img decoding=\"async\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/03\/icon-check.png\" alt=\"\" class=\"item-img\" loading=\"lazy\">\n          <div class=\"item-content\">\n            <h2 class=\"title\">Integrate Applitools with Slack for faster collaboration on failed visual tests<\/h2>\n            <p>If your team already uses Slack for collaboration, we recommend integrating Applitools with Slack, which makes sharing and resolving failures easier.<br \/>\n<a href=\".\/#Slack-Integration\">Read more<\/a><\/p>\n          <\/div>\n        <\/div>\n            <\/div>\n  <\/section>\n  <\/div><\/div>\n\n\n\n<div class=\"wp-block-group toc-section-true\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"h-what-is-visual-testing\">What is Visual Testing<\/h2>\n\n\n\n<p>Automated <a href=\"https:\/\/app14743.cloudwayssites.com\/blog\/visual-testing\/\" target=\"_blank\" rel=\"noreferrer noopener\">visual testing<\/a> is a technique to verify that your application appears to the user as you intended. The Applitools Eyes API can be used to complement or <strong><a href=\"https:\/\/dev.to\/michaelvisualai\/how-to-modernize-your-functional-testing-3p9f\" target=\"_blank\" rel=\"noreferrer noopener\">encompass functional assertions<\/a> <\/strong>with less lines of code and more test coverage.<\/p>\n\n\n\n<p>Applitools Eyes is both flexible and powerful, and makes a wonderful addition to any UI or mobile test automation toolkit.<\/p>\n\n\n\n<p>Visual testing can be used whenever there\u2019s a need to verify the display of data on a web or mobile application.<\/p>\n\n\n\n<p>Functional assertion libraries verify information in the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Document_Object_Model\" target=\"_blank\" rel=\"noreferrer noopener\">DOM<\/a>, but are incapable of verifying how that data is actually presented to the user.<\/p>\n\n\n\n<p>For example, here\u2019s a visual bug on Instagram. Functional assertions that check if the text exists would pass because yes, it does indeed exist in the DOM. However, it misses the fact that all of the text is overlapping and therefore is unreadable by the user.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"524\" height=\"204\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image.png\" alt=\"\" class=\"wp-image-18466\" srcset=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image.png 524w, https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-300x117.png 300w\" sizes=\"(max-width: 524px) 100vw, 524px\" \/><\/figure><\/div>\n\n\n<p>To avoid missing such bugs, Applitools should be used in your mobile and web UI tests.<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group toc-section-true\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"h-where-to-use-visual-testing\">Where to Use Visual Testing<\/h2>\n\n\n\n<p>Our recommendation is to use Applitools Eyes as a superset for both visual and functional assertions.<\/p>\n\n\n\n<p>Just like functional assertions, visual assertions are used at the point of verification. An automation tool (e.g. Selenium, Cypress, Appium, etc) is used to interact with the application and then Applitools Eyes is used to visually verify the outcome.<\/p>\n\n\n\n<p>Also, just like with functional assertions, it\u2019s important to make the visual assertion only when the application is ready to be verified. For example, if your app needs to load data, your test code will need to wait until that data is loaded before verifying it. This is true of both functional and visual assertions.<\/p>\n\n\n\n<p>Some users create separate tests for their functional and visual checks. They utilize the functional tests to assert that all data is accurate, and they use the visual tests to assert that there are no visual bugs.<\/p>\n\n\n\n<p>While this is certainly a viable option, it is redundant. Not only is the visual check asserting that there are no visual bugs, but it is also asserting that everything on the page is correct, including the data.<\/p>\n\n\n\n<p>Therefore, visual checks are a superset of functional checks, and in many cases can do the job of both.<\/p>\n\n\n\n<p>For example, consider a test that adds an item to a shopping cart, and then wants to verify that the item was properly added.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"691\" height=\"725\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-1.png\" alt=\"\" class=\"wp-image-18469\" srcset=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-1.png 691w, https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-1-286x300.png 286w, https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-1-30x30.png 30w\" sizes=\"(max-width: 691px) 100vw, 691px\" \/><\/figure><\/div>\n\n\n<p>Including functional assertions for everything here is unnecessary if using a visual assertion. Not only will the visual assertion make sure all of the items are displayed properly, it is inherently also making sure that the product title, size, color, quantity, price, total, etc are also correct.<\/p>\n\n\n\n<p>An exception to this suggestion would be when it\u2019s necessary to verify things that are not visible on the UI, for example for backend databases or web service calls. In these cases, we recommend using visual assertions for the UI and coupling these with functional assertions for the backend.<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group toc-section-true\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"h-visual-testing-techniques\">Visual Testing Techniques<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Full Page<\/strong><\/h3>\n\n\n\n<p>While there are various options to visually verify your application with Applitools Eyes, we recommend verifying the entire page of your application to obtain the most coverage from your visual testing. This is the most common usage of visual testing.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"422\" height=\"191\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-2.png\" alt=\"\" class=\"wp-image-18470\" srcset=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-2.png 422w, https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-2-300x136.png 300w\" sizes=\"(max-width: 422px) 100vw, 422px\" \/><\/figure><\/div>\n\n\n<p>The benefit of using this approach is that everything on the entire screen will be captured and verified so you don\u2019t have to worry about missing key assertion points.<\/p>\n\n\n\n<p>For web tests, we recommend setting the viewport size when calling Eyes\u2019 open method and specifying a size that\u2019s at least 50 pixels below the maximum possible viewport size. This ensures that your test is run against the same window size each time. Otherwise, browser viewport variances can result in a new baseline being created.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"418\" height=\"168\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-3.png\" alt=\"\" class=\"wp-image-18471\" srcset=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-3.png 418w, https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-3-300x121.png 300w\" sizes=\"(max-width: 418px) 100vw, 418px\" \/><\/figure><\/div>\n\n\n<p>When using Applitools Eyes to check the entire page, we also recommend setting the API to capture a full page screenshot. This will ensure that the entire screen will be captured, even if Applitools has to scroll to capture it in its entirety. When requesting a full page screenshot, Eyes will capture a screenshot of the visible portion of the page, then scroll and capture a screenshot of the newly visible portion of the page. It will continue this until the entire page has been captured. Once done, Eyes will stitch together each of the individual images to make one single image of the entire page. In most cases, this is all that\u2019s needed. However, on applications with sticky headers (meaning the header of the page is visible even when scrolling), then you don\u2019t want to have the header duplicated in every portional screenshot and appearing multiple times in the stitched version of the full image. To avoid this, you can make a call to the Eyes command to <strong><a rel=\"noreferrer noopener\" href=\"https:\/\/app14743.cloudwayssites.com\/docs\/api\/eyes-sdk\/enums-gen\/enum-global-stitchmode-selenium-java.html\" target=\"_blank\">set the stitch level <\/a><\/strong>to CSS.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"279\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-4.png\" alt=\"\" class=\"wp-image-18472\" srcset=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-4.png 472w, https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-4-300x177.png 300w\" sizes=\"(max-width: 472px) 100vw, 472px\" \/><\/figure><\/div>\n\n\n<p>While validating the entire page is the most common and thorough approach, we do realize that in some cases, this may be too much for your needs.<\/p>\n\n\n\n<p>Examples:<\/p>\n\n\n\n<ul>\n<li>page is undergoing active development so is not yet stable<\/li>\n\n\n\n<li>page contains information that is irrelevant to the test<\/li>\n<\/ul>\n\n\n\n<p>In these cases, you can scope your visual test down to a specific element on the page.<\/p>\n\n\n\n<p>Applitools is extremely flexible and allows you to visually verify as much or as little as you desire. Let\u2019s look at when it may be better to use alternative techniques.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Element<\/h3>\n\n\n\n<p>Applitools provides a method to allow you to check a specific element, region, or frame of the page. This is very useful for those cases when your test does not need to verify the entire page.<\/p>\n\n\n\n<p>For example, for a test that adds something to a shopping cart, perhaps the only thing you\u2019d like to verify is the actual cart.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"611\" height=\"347\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-6.png\" alt=\"\" class=\"wp-image-18476\" srcset=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-6.png 611w, https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-6-300x170.png 300w\" sizes=\"(max-width: 611px) 100vw, 611px\" \/><\/figure><\/div>\n\n\n<p>This is possible by calling the Applitools Eyes method that checks a specific element.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"510\" height=\"198\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-5.png\" alt=\"\" class=\"wp-image-18475\" srcset=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-5.png 510w, https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-5-300x116.png 300w\" sizes=\"(max-width: 510px) 100vw, 510px\" \/><\/figure><\/div>\n\n\n<p>This allows you to only verify the part of the page that you care about.<\/p>\n\n\n\n<p>When using this approach, be careful to think about what you could be missing. Are there any other elements on the page that are also important? Perhaps the cart icon up top that is showing how many items are present? You can add an additional visual assertion to this test to verify this element as well.<\/p>\n\n\n\n<p>Be careful not to scope your test too narrowly. For example, scoping the cart test just to the product line would miss other important information about the cart like the cart totals and button states. Scope wide enough to catch everything you need to test, but narrow enough that you\u2019re not capturing parts of the screen that would be problematic to include in your test.<\/p>\n\n\n\n<p>Also consider coupling your visual assertions with functional ones when using this approach if you need additional coverage.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Components<\/h3>\n\n\n\n<p>If creating frontend components, you can also use visual validation to unit test these components. We recommend testing the visual states (hover, focused, open, etc) of all of your components separately from testing the pages of your application. We recommend using Storybook for building a component library with all their states, along with the <a href=\"https:\/\/app14743.cloudwayssites.com\/tutorials\/storybook-react.html#how-it-works\">Applitools Storybook SDK<\/a> for testing it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Match Levels<\/h3>\n\n\n\n<p>In addition to being able to specify <em>what<\/em> to visually validate, you can also specify <em>how<\/em> it should be validated. Applitools provides various comparison algorithms called match levels which can be applied on either the entire page, or to specific regions of the page.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"StrictMatchLevel\">Strict<\/h4>\n\n\n\n<p>By default, Applitools Eyes uses the Strict match level. This is our recommended strategy for verifying stable and static pages. This algorithm will compare your baseline image with the current image from a regression run and use AI to detect the things that the human eye would. The Strict match level is the most widely used match level.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Content<\/h4>\n\n\n\n<p>The Content match level is similar to the Strict match level except that it ignores color differences. You may have an application where you&#8217;re only interested in verifying the content and not necessarily the color of it. For example, if colors are customizable by your users (e.g. profiles), your test may not be certain what colors it will see, and this may be irrelevant to what is being verified. In this case, Content match level is a great solution.<\/p>\n\n\n\n<p>However, our <a href=\"https:\/\/app14743.cloudwayssites.com\/docs\/features\/baseline-variations.html\">Baseline Variation feature<\/a> is recommended if the color differences are because of A\/B testing of your application.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Layout<\/h4>\n\n\n\n<p>The Layout match level allows you to verify dynamic content. It does not verify the actual data of the tested area but it does utilize AI to determine the pattern of the layout of your page. Customers who utilize this approach are verifying applications such as news sites and social media applications, where the data is dynamic and will always change but the structure of the page is the same.<\/p>\n\n\n\n<p>The Layout match level will ensure there are no visual bugs, but with this approach, you lose the ability to also verify the functional data, as this technique does not consider the text, images, or other data on the UI; it will only verify that structurally the page looks ok.<\/p>\n\n\n\n<p>As for full page testing, we do not recommend using Layout mode as your complete automation solution. Layout mode is great for light-weight testing such as smoke tests to ensure your application is up and loaded properly. It should be followed by additional tests that verify the actual functionality and data of your application.<\/p>\n\n\n\n<p>However, it is valid to use Layout mode on regions for greater test stability.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Exact<\/h4>\n\n\n\n<p>The Exact match level uses pixel-to-pixel to compare the images. We highly discourage you from using this technique, as in general, pixel-to-pixel comparisons are highly flaky and prone to false negatives. This match level is mostly in the product for demonstration purposes of what not to do.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Annotations\">Annotations<\/h3>\n\n\n\n<p>In addition to various match levels and check types, Applitools Eyes also allows you to annotate your images for even more flexibility.<\/p>\n\n\n\n<p>The Ignore annotation is a customer favorite and is the most popular annotation used. It allows you to mask any part of your screenshots to be ignored.<\/p>\n\n\n\n<p>We recommend using the Ignore annotation for data that is not relevant to the test. For example, with mobile app testing, there\u2019s usually a status bar visible at the top of the application which displays dynamic content such as the time, battery level, notifications, etc.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"348\" height=\"734\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-7.png\" alt=\"\" class=\"wp-image-18477\" srcset=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-7.png 348w, https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-7-142x300.png 142w\" sizes=\"(max-width: 348px) 100vw, 348px\" \/><\/figure><\/div>\n\n\n<p>This data is highly dynamic, and more importantly is irrelevant for the tests, so we recommend using an Ignore annotation for such cases.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"annotations-continued\">Annotations (continued)<\/h3>\n\n\n\n<p>Annotations can be applied in two ways: programmatically and via <a href=\"https:\/\/help.applitools.com\/hc\/en-us\/articles\/360006915192-Adding-Ignorable-Regions\">the Dashboard<\/a>.<\/p>\n\n\n\n<p>We recommend programmatically applying the annotation by using a fluent check. The fluent check will allow you to specify your target (window, element, frame, etc) as well as any annotations that should be applied to specific regions of that target.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"526\" height=\"171\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-8.png\" alt=\"\" class=\"wp-image-18478\" srcset=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-8.png 526w, https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-8-300x98.png 300w\" sizes=\"(max-width: 526px) 100vw, 526px\" \/><\/figure><\/div>\n\n\n<p>By using this technique, the annotation will be applied before the verification is done on the baseline and checkpoint images thus eliminating the need for you to annotate and pass each test manually in the Dashboard.<\/p>\n\n\n\n<p>Adding annotations programmatically also allows you to easily mask areas across different browsers, viewport sizes, and operating systems with one line of code, thus saving maintenance time.<\/p>\n\n\n\n<p>Other annotations include Floating, Strict, Layout, and Content. Each of these can be used on specific regions of the screenshot. They can even be mixed and matched on a given image, thus enabling really flexible tests to meet your needs.<\/p>\n\n\n\n<p>For example, the Layout annotation comes in very handy for use on dynamic portions of the page such as timestamps, prices, etc. This is the recommended approach for when the area has a known layout but the data is dynamic.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"531\" height=\"167\" src=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-9.png\" alt=\"\" class=\"wp-image-18479\" srcset=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-9.png 531w, https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/image-9-300x94.png 300w\" sizes=\"(max-width: 531px) 100vw, 531px\" \/><\/figure><\/div>\n\n\n<p>And the <a href=\"https:\/\/help.applitools.com\/hc\/en-us\/articles\/360006915372-Dealing-with-shifting-content\">Floating annotation<\/a> enables a stricter verification than Ignore and Layout annotations, as it will verify the content of the specified region and ensure it\u2019s within a given scope of the image. The Floating annotation is recommended in cases where the content can shift on the page (e.g. an item within a list of search results).<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group toc-section-true\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"h-multiple-checks-within-a-test\">Multiple Checks Within a Test<\/h2>\n\n\n\n<p>Tests are not limited to a single visual check. You can perform multiple visual checks within a single test and we recommend doing that when there are multiple visual states you need to verify for a given scenario.<\/p>\n\n\n\n<p>For example, in a test where you want to reinstate a completed item from a Todo list, you may want to verify that the item is actually marked completed before verifying its reinstatement. Otherwise, you could miss a bug if the item was never marked completed in the first place.<\/p>\n\n\n\n<p>These multiple checkpoints are known as <strong>steps<\/strong> within the test.<\/p>\n\n\n\n<p><em>Step 1: marking item complete<\/em><\/p>\n\n\n\n<p><em>Step 2: reinstating completed item<\/em><\/p>\n\n\n\n<p>To complete all steps within one test, call the check commands between Eyes\u2019 open and close commands.<\/p>\n\n\n\n<p>In the Applitools Dashboard, the steps will show as multiple images within a single test, and can be managed and maintained individually as well as collectively.<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group toc-section-true\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"GroupingTests\">Grouping Tests<\/h2>\n\n\n\n<p>You may have multiple tests in which it makes sense to group them into a suite. With Applitools, this is known as a batch. We recommend using <a href=\"https:\/\/app14743.cloudwayssites.com\/docs\/topics\/working-with-test-batches\/how-to-group-tests-into-batches.html\">batches<\/a> for tests that have page elements in common (e.g. Shopping Cart tests).<\/p>\n\n\n\n<p>In the Applitools Dashboard, when tests are run as part of a batch, they will all display together as individual tests within one aggregate view.<\/p>\n\n\n\n<p>In addition to being able to see related tests in one view, a major benefit of using batches is the automated maintenance provided within the Applitools Dashboard. For example, if a common element (e.g. title of the page) changes within multiple tests within the batch, you only need to update one of the tests and by default, Applitools will apply that update to all tests within the batch, thereby automating the maintenance and reducing the manual headache of doing so.<\/p>\n\n\n\n<p>In addition to functional groupings, a batch can be further grouped by commonalities such as device, browser, operating system, viewport, etc. For example, the following batch contains 40 tests.<\/p>\n\n\n\n<p>This is a lot to look through, and many of the tests have the same name but differ by the environment. You can use the dashboard to group this batch by device, for example.<\/p>\n\n\n\n<p>While Applitools offers many grouping options by default, you can also <a href=\"https:\/\/help.applitools.com\/hc\/en-us\/articles\/360007188191-Customized-Properties\">create custom ones<\/a>.<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group toc-section-true\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"h-test-code-design\">Test Code Design<\/h2>\n\n\n\n<p>While calls to the Eyes API can be made directly within a test function, we recommend abstracting the calls into a separate utility class. In doing so, if there are any changes to the API, the required changes to the test code will be limited to an individual class.&nbsp;<\/p>\n\n\n\n<p>The wrapper class can serve to not only encapsulate visual checks, but also initializing and configuring the Eyes SDK.<\/p>\n\n\n\n<p>An example of this would be <a href=\"https:\/\/github.com\/TestAutomationU\/automated-visual-testing\/blob\/master\/src\/test\/java\/base\/EyesManager.java\">such a class<\/a> which contains wrapper methods to make calls to the Eyes functions.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Before Tests<\/h3>\n\n\n\n<p>It\u2019s recommended to utilize a prerequisite method (e.g. @BeforeClass) to set up the Eyes object and set the API key before all tests run, and another prerequisite method (e.g. @Before) to make a call to Eyes\u2019 <em>open <\/em>method before each visual test is executed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Within Tests<\/h3>\n\n\n\n<p>Inside of the test itself, we recommend calling any Eyes <em>check*<\/em><strong><em> <\/em><\/strong>methods necessary. You do not need to open Eyes before every visual check; once is enough per test, even if there are multiple checks within the test.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">After Tests<\/h3>\n\n\n\n<p>We recommend utilizing postrequisite methods (e.g. @After) to <em>close<\/em> the Eyes object after each test. In addition, it\u2019s also recommended to make a call to Eyes\u2019 <em>abortIfNotClosed<\/em> method to ensure that no visual tests hang without completion.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Framework Classes<\/h3>\n\n\n\n<p>It is not recommended to use Eyes within framework classes such as ones that utilize the Page Object Model design pattern. These classes are typically reused across multiple tests, and adding visual checks within the page object methods could cause ambiguity, and be called in events where visual testing is not yet required.<\/p>\n\n\n\n<p>However, creating reusable utility methods to execute the visual checks is encouraged.<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group toc-section-true\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"h-localization-testing\">Localization Testing<\/h2>\n\n\n\n<p>When utilizing Applitools for visual testing, we recommend approaching this in stages. If your translated site has not yet been manually verified by a localization specialist, we recommend you use the Layout mode of Applitools eyes for basic sanity checking. This will ensure that the translated content has not broken the layout of your application.<\/p>\n\n\n\n<p>After the translated site has been verified by a localization expert and you\u2019re sure that the content is correct, we then recommend switching to Strict mode.<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group toc-section-true\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"h-executing-visual-tests\">Executing Visual Tests<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Tagging<\/h3>\n\n\n\n<p>Not every test in your framework will be a visual test. So, we recommend using the tagging capabilities of your test runner to denote your visual tests (e.g. @visual). This will allow you to easily include or exclude visual tests from your executions based on the features under test.<\/p>\n\n\n\n<p>This tag can be coupled with any other tags such as ones denoting functional areas (e.g. @search). Given this, if testing the UI of the search functionality, you can also include the visual tests. Alternatively, if testing search on the backend, the @visual tests can be skipped.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Disabling<\/h3>\n\n\n\n<p>We also recommend using properties or environment variables to denote when not to run visual tests at all. Given the state of the property\/variable, you can call the <em>setIsDisabled<\/em> method of Eyes passing in a boolean (true\/false) value indicating whether to run the visual checks or not.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Frequency<\/h3>\n\n\n\n<p>We recommend executing your visual tests any time your UI tests run, or a UI-related feature check-in is made. By using the tagging convention above, this will reduce the number of visual checks needed to execute.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Platforms\">Platforms<\/h3>\n\n\n\n<p><a href=\"https:\/\/app14743.cloudwayssites.com\/ultrafast-grid\">Applitools Ultrafast Grid<\/a> enables you to execute your UI tests across many different browsers, devices, and viewports at a fraction of the time it takes with other solutions. We recommend using the Grid for all cross-platform and responsive-width web tests and also for any mobile tests that are not specifically verifying native gestures (swipe, pinch, etc).&nbsp;<\/p>\n\n\n\n<p>There is no need to strategically choose which of your supported environments to execute against, as the duration will be roughly the same no matter if you run against 10 or 20 configurations.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"GatingDeployments\">Gating Deployments<\/h3>\n\n\n\n<p>A common question is should development builds be gated by visual checks. With the accuracy of the Eyes API, we feel confident recommending that you treat your visual tests just as you would your functional ones. If your UI, integration, and end-to-end tests should work before any new code is integrated, then you can include the visual checks for these tests in your pipeline to gate check-ins as well.<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group toc-section-true\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"h-collaboration\">Collaboration<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">API Keys<\/h3>\n\n\n\n<p>When using Teams within Applitools, we recommend every member of the team using their own unique Applitools API key as opposed to having a public one for the team. This is important for security purposes, so that if a user leaves the company, their private API key can be disabled and will not affect any other user.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BDD\">Behavior-Driven Development (BDD)<\/h3>\n\n\n\n<p>When practicing BDD, <a href=\"http:\/\/angiejones.tech\/writing-good-gherkin-enables-good-test-automation\/\">there\u2019s no need to consider the implementation details<\/a> of how you will automate the tests. This remains true when using visual validation. Continue to write your feature files as normal, and use the step definition code to call the Eyes API.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Collaborating-On-Bugs\">Bugs<\/h3>\n\n\n\n<p>When your visual tests run, the results are stored in the Applitools dashboard. Within the dashboard, there are several collaboration features, including the ability to annotate regions of the screenshots as bugs.&nbsp;<\/p>\n\n\n\n<p>We strongly recommend indicating the bugs and using the Root Cause Analysis dashboard feature to capture and specify the exact cause of the bug. The bug annotations can be assigned to specific developers, if integrated with a bug tracking system such as Jira. Clearly annotated bugs will allow for easier debugging and faster fixes by the developers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Remarks<\/h3>\n\n\n\n<p>We recommend utilizing the Remarks annotation within the dashboard to pose questions to developers about changes within the screenshot. Remark regions are great for changes where you aren\u2019t quite sure if the change is intended or not.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Slack-Integration\">Slack Integration<\/h3>\n\n\n\n<p><a href=\"https:\/\/app14743.cloudwayssites.com\/docs\/features\/batch-completion-slack-integration.html\">Applitools integrates with Slack<\/a>. If your team already uses Slack for collaboration, we recommend integrating Applitools with Slack, which makes sharing and resolving failures easier.&nbsp;<\/p>\n\n\n\n<p>This integration can be configured to send notifications to slack on every batch completion, or for only the batches that result in an Unresolved state &#8211; meaning visual differences were detected.<\/p>\n\n\n<div class=\"small-cta is-style-card-vertical\">\n      <div class=\"body\">\n            <p>Looking for a PDF version of the Automated Visual Testing Best Practices Guide?<\/p>\n    <\/div>\n    <div class=\"action\">\n      <a href=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2020\/05\/Automated_Visual_Testing_Best_Practices_Guide_2020_May_05-1.pdf\" class=\"btn\">Download PDF<\/a>\n    <\/div>\n  <\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Introduction This guide, authored by Angie Jones, provides a set of best practices and our recommendations for implementing and maintaining automated visual tests with Applitools based on our customers\u2019 experiences&#8230;.<\/p>\n","protected":false},"author":3,"featured_media":25497,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"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>Best Practices for Automated Visual UI Testing | Applitools<\/title>\n<meta name=\"description\" content=\"Introduction This guide, authored by Angie Jones, provides a set of best practices and our recommendations for implementing and maintaining automated visual tests with Applitools based on our customers\u2019 experiences....\" \/>\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\/automated-visual-testing-best-practices-guide\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Learn - Automated Visual Testing Best Practices Guide\" \/>\n<meta property=\"og:description\" content=\"Introduction This guide, authored by Angie Jones, provides a set of best practices and our recommendations for implementing and maintaining automated\" \/>\n<meta property=\"og:url\" content=\"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/\" \/>\n<meta property=\"og:site_name\" content=\"AI-Powered End-to-End Testing | Applitools\" \/>\n<meta property=\"article:modified_time\" content=\"2024-02-06T17:03:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2021\/01\/hero-placeholder.png\" \/>\n\t<meta property=\"og:image:width\" content=\"631\" \/>\n\t<meta property=\"og:image:height\" content=\"324\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"18 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/\",\"url\":\"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/\",\"name\":\"Best Practices for Automated Visual UI Testing | Applitools\",\"isPartOf\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2021\/01\/hero-placeholder.png\",\"datePublished\":\"2020-05-15T20:23:46+00:00\",\"dateModified\":\"2024-02-06T17:03:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/#primaryimage\",\"url\":\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2021\/01\/hero-placeholder.png\",\"contentUrl\":\"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2021\/01\/hero-placeholder.png\",\"width\":631,\"height\":324},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/app14743.cloudwayssites.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Learn &#8211; Automated Visual Testing Best Practices Guide\"}]},{\"@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\/\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Best Practices for Automated Visual UI Testing | Applitools","description":"Introduction This guide, authored by Angie Jones, provides a set of best practices and our recommendations for implementing and maintaining automated visual tests with Applitools based on our customers\u2019 experiences....","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\/automated-visual-testing-best-practices-guide\/","og_locale":"en_US","og_type":"article","og_title":"Learn - Automated Visual Testing Best Practices Guide","og_description":"Introduction This guide, authored by Angie Jones, provides a set of best practices and our recommendations for implementing and maintaining automated","og_url":"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/","og_site_name":"AI-Powered End-to-End Testing | Applitools","article_modified_time":"2024-02-06T17:03:19+00:00","og_image":[{"width":631,"height":324,"url":"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2021\/01\/hero-placeholder.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"18 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/","url":"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/","name":"Best Practices for Automated Visual UI Testing | Applitools","isPartOf":{"@id":"https:\/\/app14743.cloudwayssites.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/#primaryimage"},"image":{"@id":"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2021\/01\/hero-placeholder.png","datePublished":"2020-05-15T20:23:46+00:00","dateModified":"2024-02-06T17:03:19+00:00","breadcrumb":{"@id":"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/#primaryimage","url":"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2021\/01\/hero-placeholder.png","contentUrl":"https:\/\/app14743.cloudwayssites.com\/wp-content\/uploads\/2021\/01\/hero-placeholder.png","width":631,"height":324},{"@type":"BreadcrumbList","@id":"https:\/\/app14743.cloudwayssites.com\/automated-visual-testing-best-practices-guide\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/app14743.cloudwayssites.com\/"},{"@type":"ListItem","position":2,"name":"Learn &#8211; Automated Visual Testing Best Practices Guide"}]},{"@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\/"}}]}},"_links":{"self":[{"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/pages\/18453"}],"collection":[{"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/comments?post=18453"}],"version-history":[{"count":0,"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/pages\/18453\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/media\/25497"}],"wp:attachment":[{"href":"https:\/\/app14743.cloudwayssites.com\/wp-json\/wp\/v2\/media?parent=18453"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}