<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Reflect</title>
		<link>https://reflect.run/articles/</link>
		<description>Recent content on Reflect</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<atom:link href="https://reflect.run/articles/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>The Next Chapter: Why we are excited to join SmartBear</title>
				<link>https://reflect.run/articles/reflect-acquired-by-smartbear/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/reflect-acquired-by-smartbear/</guid>
				<description>&lt;h2 id=&#34;joining-smartbear&#34;&gt;Joining SmartBear&lt;/h2&gt;&#xA;&lt;p&gt;When my co-founder Fitz and I set out to build Reflect five years ago, we had a vision of building a product that makes&#xA;testing faster, easier, and more efficient for software teams. It&amp;rsquo;s been an amazing journey.&lt;/p&gt;&#xA;&lt;p&gt;Today, we&amp;rsquo;re thrilled to announce that&#xA;&lt;a href=&#34;https://smartbear.com/news/news-releases/smartbear-acquires-reflect/&#34;&gt;Reflect is joining forces with SmartBear&lt;/a&gt;, a&#xA;respected and well-known leader in products for software development, testing, and developer visibility. This&#xA;acquisition will accelerate our shared mission to improve the state of testing, and ultimately to shape the future of&#xA;software development.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lightning&#39;s Chaos, Thunder&#39;s Speed: The Illusion of &#39;Using the Platform&#39; with LWC</title>
				<link>https://reflect.run/articles/salesforce-using-the-platform-lwc/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/salesforce-using-the-platform-lwc/</guid>
				<description>&lt;h2 id=&#34;lightning-web-components&#34;&gt;Lightning Web Components&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Lightning Web Components UI framework uses core Web Components standards and provides only what’s necessary to perform&#xA;well in browsers. Because it’s built on code that runs natively in browsers, the framework is lightweight and delivers&#xA;exceptional performance. Most of the code you write is standard JavaScript and HTML. &lt;a href=&#34;https://lwc.dev/guide/introduction&#34;&gt;via lwc.dev&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Lightning Web Components (LWC) is a framework developed by Salesforce to build web applications. It is meant to be a replacement&#xA;for their older &amp;ldquo;Aura&amp;rdquo; framework, and justifies its existence a number of ways. All of these justifications stem from the&#xA;thinking that &amp;ldquo;using the platform&amp;rdquo; delivers better performance, greater portability, and more predictability. If you&amp;rsquo;ve built&#xA;software that runs in modern browsers, you already know how LWC works! They&amp;rsquo;re simply providing some thin wrappers that help&#xA;solve common problems faced when building webapps, along with tooling that prioritizes writing code that uses the Salesforce&#xA;platform. From a Salesforce developer&amp;rsquo;s perspective, this may appear to be the case. In general, code that&amp;rsquo;s written to conform&#xA;to the LWC standard looks just like code you&amp;rsquo;d write without any framework at all and delivers on functionality the browser&#xA;supports out of the box (scoped styles, reusable &amp;ldquo;components&amp;rdquo;, templates, slot, etc).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Reflect AI: The Next Step in Automated End-to-End Web Tests</title>
				<link>https://reflect.run/articles/element-selection-ai/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/element-selection-ai/</guid>
				<description>&lt;h2 id=&#34;the-problem-with-code-based-test-automation&#34;&gt;The Problem with Code-based Test Automation&lt;/h2&gt;&#xA;&lt;p&gt;Reflect is a platform for building and running automated regression tests for web applications.&#xA;The allure of automated end-to-end tests is straightforward because the alternative is manual testing,&#xA;which is slow and error-prone.&#xA;Automated tests increase development velocity by executing quickly and producing structured results.&#xA;However, the challenge historically with automated tests for the web&#xA;was that the tests had to be expressed in code,&#xA;which means that a programmer had to build them.&#xA;More importantly, though, since the tests were in code, they were by definition syntactically &lt;strong&gt;specific&lt;/strong&gt; and &lt;strong&gt;exact&lt;/strong&gt;&#xA;to the underlying structure of the webapp.&#xA;This specificity causes major frustration for the tester&#xA;when the underlying structure of the application changes and the tests break,&#xA;despite the application&amp;rsquo;s user-visible functionality being identical.&#xA;As a result, code-based test automation is inherently flaky and not resilient.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Testing emails using Cypress</title>
				<link>https://reflect.run/articles/testing-emails-using-cypress/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/testing-emails-using-cypress/</guid>
				<description>&lt;p&gt;More and more web apps have adopted automated emails to interact with users. These emails play a key role in the user&#xA;journey. Thus, a bug in one of these email workflows can represent a serious problem for the reputation of your web&#xA;application.&lt;/p&gt;&#xA;&lt;p&gt;In this tutorial, you will learn how to create a script to test an email workflow using Cypress. Specifically, you will&#xA;see how to fill out a passwordless form in a Cypress script, wait for the authentication email, extract the&#xA;authentication URL, and use it to log in to a web application.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How Reflect uses WireGuard to test non-public web applications</title>
				<link>https://reflect.run/articles/automated-testing-private-environments/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/automated-testing-private-environments/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Many businesses have private applications that are not publicly-accessible on the Internet.&#xA;These applications are generally used by employees, but sometimes external partners might use them as well.&#xA;To access the applications, the user is generally within some restricted boundary of the organization&amp;rsquo;s network.&lt;/p&gt;&#xA;&lt;p&gt;Despite users of these applications having a formal and friendly relationship with the provider,&#xA;the applications themselves are still often mission-critical.&#xA;This means that the cost of a bug in these applications can be quite high,&#xA;and there is a strong incentive to thoroughly test new application versions before releasing them.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Accessing pseudo-elements in Playwright</title>
				<link>https://reflect.run/articles/accessing-pseudo-elements-in-playwright/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/accessing-pseudo-elements-in-playwright/</guid>
				<description>&lt;p&gt;Pseudo-elements are one of the stranger constructs supported in the HTML and CSS specs. Pseudo-elements don&amp;rsquo;t just&#xA;modify the styling of an existing element, but can also &lt;strong&gt;add&lt;/strong&gt; content to the page. But unlike a normal element,&#xA;pseudo-elements are not considered a distinct node within the Document Object Model (DOM) and thus cannot be accessed&#xA;through the &lt;code&gt;querySelector&lt;/code&gt; or &lt;code&gt;querySelectorAll&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Because of these pecularities, pseudo-elements can be quite difficult to test in an automated way, lack native support&#xA;in many testing libraries including Microsoft&amp;rsquo;s popular &lt;a href=&#34;https://playwright.dev/&#34;&gt;Playwright&lt;/a&gt; testing framework. In this&#xA;article we&amp;rsquo;ll show you how you can workaround these limitations to test pseudo-elements in Playwright.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Introduction to vue-test-utils</title>
				<link>https://reflect.run/articles/introduction-to-vue-test-utils/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/introduction-to-vue-test-utils/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;If you use &lt;a href=&#34;https://vuejs.org/&#34;&gt;Vue.js&lt;/a&gt;, then you&amp;rsquo;ve likely come across the need to test components. This article&#xA;introduces &lt;code&gt;vue-test-utils&lt;/code&gt; - a suite of helper functions that improve overall development &amp;amp; testing experience with Vue&#xA;applications.&lt;/p&gt;&#xA;&lt;p&gt;In the book&#xA;&lt;a href=&#34;https://www.amazon.com/Extreme-Programming-Explained-Embrace-Change/dp/0321278658&#34;&gt;Extreme Programming Explained&lt;/a&gt;, Kent&#xA;Beck recommends to &amp;ldquo;test everything that could possibly break.&amp;rdquo; This goal is quite difficult to achieve, but the closer&#xA;we get to achieving it roughly maps to how effective our approach to testing actually is. Software testing approaches&#xA;can be split into two categories: manual testing and automated testing. With manual testing, a developer tests their app&#xA;as if they were an end-use rto ensure that the changes they&amp;rsquo;ve made are working as expected. With manual testing, every&#xA;time you make a change you&amp;rsquo;re either going to need to re-test both new and existing behavior, or have confidence that&#xA;the change you made has not left anything in a broken state.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Guide to testing Angular apps</title>
				<link>https://reflect.run/articles/guide-to-testing-angular-apps/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/guide-to-testing-angular-apps/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://angular.io/&#34;&gt;Angular&lt;/a&gt; is one of the most popular frameworks for creating web applications. Angular is designed&#xA;to be a &amp;ldquo;batteries included&amp;rdquo; framework, meaning that many of the things you&amp;rsquo;d need to build and maintain a web&#xA;application are included with the framework.&lt;/p&gt;&#xA;&lt;p&gt;In this article, we&amp;rsquo;ll cover how you can start implementing the following types of tests in Angular:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Unit tests&lt;/li&gt;&#xA;&lt;li&gt;Component tests&lt;/li&gt;&#xA;&lt;li&gt;End-to-end tests&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s get started!&lt;/p&gt;&#xA;&lt;h2 id=&#34;setting-up-our-angular-project&#34;&gt;Setting up our Angular project&lt;/h2&gt;&#xA;&lt;p&gt;When you initialize an Angular project with the &lt;code&gt;ng new&lt;/code&gt; command, Angular defaults to setting up&#xA;&lt;a href=&#34;https://jasmine.github.io&#34;&gt;Jasmine&lt;/a&gt; which is a popular library for unit testing. However Angular does support the use&#xA;of alternative unit testing libraries. For example, you could instead opt to use &lt;a href=&#34;https://jestjs.io/&#34;&gt;Jest&lt;/a&gt;, a unit&#xA;testing library developed by Facebook which is very popular in the React community. In this article, we&amp;rsquo;ll assume that&#xA;you&amp;rsquo;re using the default library: Jasmine.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Introduction to Ladle</title>
				<link>https://reflect.run/articles/introduction-to-ladle/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/introduction-to-ladle/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://ladle.dev/&#34;&gt;Ladle&lt;/a&gt; is a tool for developing, testing, and documenting large-scale React apps. Large-scale React&#xA;apps are hard to manage, test, and develop because of the overhead of working with a bloated application. Ladle allows&#xA;you to isolate your React components in an environment where you can test and develop them independently.&lt;/p&gt;&#xA;&lt;p&gt;If you’ve heard of or used &lt;a href=&#34;https://storybook.js.org/&#34;&gt;Storybook&lt;/a&gt; before, Ladle is a highly performant alternative to&#xA;Storybook. The best part is it supports Component Story Format right out of the box; hence your Storybook application&#xA;will work the same way with Ladle. It was developed as a drop-in replacement for Storybook without any external&#xA;configurations.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Guide to creating your first Cypress test</title>
				<link>https://reflect.run/articles/guide-to-creating-your-first-cypress-test/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/guide-to-creating-your-first-cypress-test/</guid>
				<description>&lt;p&gt;Looking to create automated tests for your web application? In this guide we&amp;rsquo;ll walk through how to install and create&#xA;your first tests using &lt;a href=&#34;cypress.io&#34;&gt;Cypress&lt;/a&gt;, an end-to-end testing framework.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installing-cypress&#34;&gt;Installing Cypress&lt;/h2&gt;&#xA;&lt;p&gt;There are two ways to install Cypress: via the command-line using npm, or by using one of the standalone installers&#xA;provided for Windows, macOS, and Linux at &lt;a href=&#34;https://www.cypress.io/&#34;&gt;https://www.cypress.io/&lt;/a&gt;. The standalone installer&#xA;has some limitations, including not being to view the results of your Cypress tests online, so we recommend installing&#xA;Cypress via npm.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Testing drag-and-drop workflows in Cypress</title>
				<link>https://reflect.run/articles/testing-drag-and-drop-workflows-using-cypress/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/testing-drag-and-drop-workflows-using-cypress/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;From the introduction of the mouse to the ubiquity of touchscreens in modern computing, the way we interact with devices&#xA;keeps evolving. One key user interaction that is found throughout these evolutions is the drag-and-drop action. Within&#xA;web applications, there&amp;rsquo;s two main reasons for the popularity of drag-and-drop:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Web applications are now more popular than traditional desktop apps, taking on more of the interactive features of&#xA;their predecessors, including drag-and-drop functionality.&lt;/li&gt;&#xA;&lt;li&gt;The Web is now mobile-first, which means you are supposed to support mobile-native interactions such as swiping.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;In this article, you will learn how to test drag-and-drop workflows with Cypress. Specifically, you will see how to test&#xA;drag and drop in a Cypress script, both with the &lt;code&gt;cypress-drag-drop&lt;/code&gt; plugin and custom JavaScript logic.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to deal with StaleElementReferenceException in Selenium</title>
				<link>https://reflect.run/articles/how-to-deal-with-staleelementreferenceexception-in-selenium/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/how-to-deal-with-staleelementreferenceexception-in-selenium/</guid>
				<description>&lt;p&gt;In Selenium, a &lt;a href=&#34;https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/WebElement.html&#34;&gt;WebElement&lt;/a&gt; is a&#xA;reference to an HTML element within the Document Object Model (DOM) of a web page. In Java, when you interact with a&#xA;&lt;code&gt;WebElement&lt;/code&gt; that is no longer associated with an HTML element within the DOM, Selenium throws a&#xA;&lt;a href=&#34;https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/StaleElementReferenceException.html&#34;&gt;StaleElementReferenceException&lt;/a&gt;.&#xA;This exception is pretty common in web apps that are based on client-side frameworks, such as React. This is because&#xA;React uses its own “&lt;a href=&#34;https://reactjs.org/docs/faq-internals.html#what-is-the-virtual-dom&#34;&gt;virtual DOM&lt;/a&gt;”, which is a&#xA;lightweight JavaScript representation of the actual DOM, and continually sends batched DOM changes from the virtual DOM&#xA;into the actual DOM.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to fix an InvalidSelectorException in Selenium</title>
				<link>https://reflect.run/articles/fixing-invalidselectorexception-in-selenium/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/fixing-invalidselectorexception-in-selenium/</guid>
				<description>&lt;p&gt;In Selenium, a &lt;em&gt;selector&lt;/em&gt;, which is also called a &lt;em&gt;locator&lt;/em&gt;, is what&amp;rsquo;s used to identify elements within a web page.&#xA;Selenium supports two types of selectors: &lt;strong&gt;CSS selectors&lt;/strong&gt;, and &lt;strong&gt;XPath selectors&lt;/strong&gt;. In Java, when an invalid CSS or&#xA;XPath selector is malformed, Selenium throws an&#xA;&lt;a href=&#34;https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/InvalidSelectorException.html&#34;&gt;InvalidSelectorException&lt;/a&gt;.&#xA;This exception represents one of the most common Selenium exceptions, and chances are that you&amp;rsquo;ve already encountered it&#xA;if you&amp;rsquo;ve used Selenium for any length of time.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to mock API requests in React tests with Mirage JS</title>
				<link>https://reflect.run/articles/how-to-mock-api-requests-in-react-tests-with-mirage-js/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/how-to-mock-api-requests-in-react-tests-with-mirage-js/</guid>
				<description>&lt;p&gt;In modern web development, frontend and backend developers typically end up integrating their respective code at the API&#xA;layer. While there are many benefits to true &lt;a href=&#34;https://reflect.run/regression-testing-guide/&#34;&gt;end-to-end regression tests&lt;/a&gt;, having test&#xA;coverage that uses mocked API calls can provide a number of benefits as well, including increased stability and faster&#xA;execution time.&lt;/p&gt;&#xA;&lt;p&gt;This article will discuss how you can leverage Mirage JS to mock backend services in tests for your React applications.&#xA;We&amp;rsquo;ll provide an overview of Mirage, followed by a step-by-step guide that creates tests against &lt;code&gt;create-react-app&lt;/code&gt;&amp;rsquo;s&#xA;example &amp;ldquo;TODO&amp;rdquo; application.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Guide to Safari Developer Tools</title>
				<link>https://reflect.run/articles/guide-to-safari-developer-tools/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/guide-to-safari-developer-tools/</guid>
				<description>&lt;p&gt;Despite the fact that Safari is so popular amongst users, web developers often forgo testing in Safari and instead test&#xA;solely in Google Chrome. It&amp;rsquo;s understandable; Chrome has a&#xA;&lt;a href=&#34;https://www.oberlo.com/statistics/browser-market-share&#34;&gt;huge lead in marketshare&lt;/a&gt; and has invested a lot of effort in&#xA;making their developer tools easy to use. What you may not know is that Safari also includes a fully-featured&#xA;development toolkit that has feature-parity with the major features found in Chrome Dev Tools.&lt;/p&gt;</description>
			</item>
			<item>
				<title>UI Testing with Postman</title>
				<link>https://reflect.run/articles/ui-testing-with-postman/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/ui-testing-with-postman/</guid>
				<description>&lt;p&gt;Postman is a popular tool for &lt;a href=&#34;https://reflect.run/api-testing/&#34;&gt;API testing&lt;/a&gt;, but did you know that you can also use it for UI testing? In&#xA;this article we&amp;rsquo;ll cover how to use Postman to create end-to-end tests for a few simple testing scenarios.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-postman&#34;&gt;What is Postman&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.postman.com/&#34;&gt;Postman&lt;/a&gt; is a testing platform for developing, testing, and documenting APIs. You can think&#xA;of Postman as an alternative to writing automated tests in a library like Python&amp;rsquo;s&#xA;&lt;a href=&#34;https://pypi.org/project/requests/&#34;&gt;Requests&lt;/a&gt; HTTP library, or JavaScript&amp;rsquo;s &lt;a href=&#34;https://axios-http.com/docs/intro&#34;&gt;Axios&lt;/a&gt;&#xA;library. Postman is also a great alternative to writing one-off scripts using command-line tools like&#xA;&lt;a href=&#34;https://curl.se/&#34;&gt;curl&lt;/a&gt; and &lt;a href=&#34;https://stedolan.github.io/jq/&#34;&gt;jq&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to test drag-and-drop interactions in Playwright</title>
				<link>https://reflect.run/articles/how-to-test-drag-and-drop-interactions-in-playwright/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/how-to-test-drag-and-drop-interactions-in-playwright/</guid>
				<description>&lt;p&gt;The way we interact with devices is constantly evolving. The mouse and then touchscreens introduced new forms of&#xA;interaction, and one of the most popular is drag and drop. This involves dragging an object on the screen from point X&#xA;to point Y.&lt;/p&gt;&#xA;&lt;p&gt;Two phenomena have led to an increased prevalence of drag-and-drop interactions:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;As web applications continue to replace traditional desktop apps, they have taken on more of the interactive features&#xA;of their predecessors, including more drag-and-drop functionality.&lt;/li&gt;&#xA;&lt;li&gt;The web is increasing mobile-first, which makes it critical to support mobile-native interactions such as swiping.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;In this article, you will learn how to test drag-and-drop interactions with Playwright. In detail, you will see how to&#xA;test drag and drop in a TypesScript script, both with Playwright&amp;rsquo;s drag-and-drop API as well as with custom logic.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Testing pseudo-elements in Cypress</title>
				<link>https://reflect.run/articles/testing-pseudo-elements-in-cypress/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/testing-pseudo-elements-in-cypress/</guid>
				<description>&lt;p&gt;Ever needed to make an assertion on a pseudo element in a Cypress test? It’s not as straightforward as you might expect.&#xA;Trying to access a pseudo element with &lt;code&gt;cy.get(pseudoElementSelector)&lt;/code&gt; will fail, and if you can’t access it, how can&#xA;you test it? In this article, you’ll learn how to access pseudo elements so you can test them in Cypress.&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-a-pseudo-element&#34;&gt;What’s a pseudo-element?&lt;/h2&gt;&#xA;&lt;p&gt;As you can tell from the name, a pseudo element isn’t really an HTML element. It’s a CSS selector that allows you to&#xA;target a part of a real element’s content, or to insert CSS-defined content before / after the element’s content. The&#xA;most popular examples of pseudo elements are &lt;code&gt;::before&lt;/code&gt; and &lt;code&gt;::after&lt;/code&gt; (which allow you to insert content), although&#xA;there are &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements#alphabetical_index&#34;&gt;a lot more&lt;/a&gt;, like&#xA;&lt;code&gt;::first-line&lt;/code&gt;, &lt;code&gt;::first-letter&lt;/code&gt;, and &lt;code&gt;::marker&lt;/code&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Using Postman to test SOAP web services</title>
				<link>https://reflect.run/articles/using-postman-to-test-soap-web-services/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/using-postman-to-test-soap-web-services/</guid>
				<description>&lt;p&gt;Nowadays most server-to-server communication over HTTP is done via REST APIs that use JSON as its serialization format.&#xA;However, if you&amp;rsquo;re working with applications that integrate with any legacy systems, you may find yourself needing to&#xA;communicate via the SOAP messaging standard.&lt;/p&gt;&#xA;&lt;p&gt;In this article, we&amp;rsquo;ll walk through how to test SOAP services using a popular API testing tool called&#xA;&lt;a href=&#34;https://www.postman.com/&#34;&gt;Postman&lt;/a&gt;. But first, let&amp;rsquo;s cover some of the key things to know about SOAP.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Testing mobile web apps in Cypress</title>
				<link>https://reflect.run/articles/testing-mobile-web-apps-in-cypress/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/testing-mobile-web-apps-in-cypress/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Nowadays, the importance of mobile traffic should not be underestimated. Statistically speaking, it is more likely that&#xA;you’re reading this article on a mobile device than on a desktop device. This fact has not only a huge impact on&#xA;adapting the contents of a website to both mobile and desktop devices, but also for how to test a web application being&#xA;rendered on mobile devices. This article will give you an overview of the distribution of the internet traffic between&#xA;mobile and desktop devices and how to test web applications on mobile devices using Cypress.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Using Playwright for API testing</title>
				<link>https://reflect.run/articles/using-playwright-for-api-testing/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/using-playwright-for-api-testing/</guid>
				<description>&lt;p&gt;Starting in version 1.16, Playwright introduced the&#xA;&lt;a href=&#34;https://playwright.dev/docs/api/class-apirequestcontext&#34;&gt;APIRequestContext&lt;/a&gt; class which allows users to make API calls&#xA;and create assertions for various aspects of the HTTP response. API calls in Playwright are flexible: they are made&#xA;outside of the browser runtime but can optionally share the cookie state of the browser runtime. This means that you can&#xA;create both standalone API tests in Playwright, as well as make API calls intermingled with UI actions like clicks and&#xA;inputs. There are two situations in particular where you might want to incorporate &lt;a href=&#34;https://reflect.run/api-testing/&#34;&gt;API testing&lt;/a&gt; as part&#xA;of an end-to-end test:&lt;/p&gt;</description>
			</item>
			<item>
				<title>API testing in Cypress</title>
				<link>https://reflect.run/articles/api-testing-in-cypress/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/api-testing-in-cypress/</guid>
				<description>&lt;p&gt;APIs form the foundation of most modern-day web applications, delivering data to the client-side code which is then&#xA;parsed and rendered in the UI. Since most UI interactions operate on data retrieved from an API, you can think of&#xA;end-to-end tests (i.e. tests that use your UI to replicate user workflows) as &lt;em&gt;implicitly&lt;/em&gt; testing your API as well.&lt;/p&gt;&#xA;&lt;p&gt;There are definitely cases where we&amp;rsquo;ll want to write tests against our APIs directly, but when thinking about doing&#xA;&lt;a href=&#34;https://reflect.run/api-testing/&#34;&gt;API testing&lt;/a&gt; in addition to end-to-end testing, a key principle to consider is to &lt;strong&gt;avoid duplicative&#xA;tests&lt;/strong&gt;. We provide the following advice in our&#xA;&lt;a href=&#34;https://reflect.run/regression-testing-guide/&#34;&gt;regression testing guide&lt;/a&gt;:&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to automatically generate social share images for your blog</title>
				<link>https://reflect.run/articles/how-to-automatically-generate-social-share-images/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/how-to-automatically-generate-social-share-images/</guid>
				<description>&lt;p&gt;Encouraging your readers to share your blog posts on social channels like Reddit, LinkedIn, Twitter, and Facebook is a&#xA;great way to increase your audience. But with so much content being shown to social media users, how do you ensure your&#xA;content cuts through the noise?&lt;/p&gt;&#xA;&lt;p&gt;One way to increase engagement is with high quality imagery. A recent study showed that Facebook posts that contained&#xA;images have&#xA;&lt;a href=&#34;https://buzzsumo.com/blog/how-to-massively-boost-your-blog-traffic-with-these-5-awesome-image-stats/#Facebook-image-posts&#34;&gt;2.3x more engagement&lt;/a&gt;&#xA;compared to posts without images.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Creating automated tests for Safari and WebKit</title>
				<link>https://reflect.run/articles/creating-automated-tests-for-safari-and-webkit/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/creating-automated-tests-for-safari-and-webkit/</guid>
				<description>&lt;p&gt;Safari is the default browser for all Apple devices, and is the second most popular web browser worldwide. Despite its&#xA;popularity, building test automation to run on Safari or its underlying WebKit engine remains difficult, especially&#xA;compared to the relative ease of other popular browsers like Chrome, Firefox, and Edge.&lt;/p&gt;&#xA;&lt;p&gt;In this article, you will learn about some challenges faced by developers who want to automate testing in Safari.&#xA;Additionally, you&amp;rsquo;ll read about what currently works to automate testing in Safari, and what is still lacking. Finally,&#xA;you will explore some options for continuous integration and virtualization of the MacOS platform to help automate your&#xA;Safari testing.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Introduction to Remix</title>
				<link>https://reflect.run/articles/introduction-to-remix/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/introduction-to-remix/</guid>
				<description>&lt;h2 id=&#34;what-is-remix&#34;&gt;What is Remix?&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://remix.run/&#34;&gt;Remix&lt;/a&gt; is a full stack web application framework with some unique design decisions centered around&#xA;application performance, developer experience, and portability. It’s part of a recent trend around JavaScript frameworks&#xA;that move most rendering and logic off of the client and into the server. Remix in particular encourages developers to&#xA;deliver as little JavaScript to the client as possible.&lt;/p&gt;&#xA;&lt;p&gt;Starting with the advent of AJAX and increasing through the introduction of front-end frameworks like React and Angular,&#xA;web applications have seen more and more server-side functionality being moved into client-side JavaScript code. For the&#xA;frontend of a typical web application, things like template rendering, handling data mutations, handling routing (e.g.&#xA;functioning as an SPA), and fetching data from the backend API are all now responsibilities of the frontend.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Testing two-factor authentication with Cypress</title>
				<link>https://reflect.run/articles/testing-two-factor-authentication-with-cypress/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/testing-two-factor-authentication-with-cypress/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Two-factor authentication (2FA) adds an extra layer of security to web applications by verifying a secondary credential&#xA;beyond the user&amp;rsquo;s username and password. Common methods for issuing a two-factor challenge include: sending an email,&#xA;sending an SMS, or requiring the user to enter a &amp;ldquo;time-based one-time password (TOTP)&amp;rdquo; via a mobile app like Google&#xA;Authenticator or &lt;a href=&#34;https://authy.com/&#34;&gt;Authy&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This article will cover how to automatically test these scenarios using Cypress, with a working code example for testing&#xA;email-based authentication.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Simulating hovers in Cypress</title>
				<link>https://reflect.run/articles/simulating-hovers-in-cypress/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/simulating-hovers-in-cypress/</guid>
				<description>&lt;p&gt;Despite being among Cypress&amp;rsquo;s &lt;a href=&#34;https://github.com/cypress-io/cypress/issues/10&#34;&gt;most requested features&lt;/a&gt;, native support&#xA;for triggering hover actions remains unsupported in Cypress. In other words, there&amp;rsquo;s no &lt;code&gt;cy.hover()&lt;/code&gt; command that you&#xA;can call to get the element to act like you hovered over it. If you try to use &lt;code&gt;cy.hover()&lt;/code&gt;, you’ll get a detailed error&#xA;message that looks like the one below:&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://reflect.run/images/articles/simulating-hovers-in-cypress/image2.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Not to fear: in this article we&amp;rsquo;ll cover several different workarounds that allow you to test end-to-end scenarios that&#xA;require hover actions.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Introduction to the T3 stack and create-t3-app</title>
				<link>https://reflect.run/articles/introduction-to-t3-stack-and-create-t3-app/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/introduction-to-t3-stack-and-create-t3-app/</guid>
				<description>&lt;p&gt;There are many JavaScript frameworks and libraries, and people often joke that we might have way too many of these&#xA;tools. If you&amp;rsquo;re building a web application, you&amp;rsquo;re likely going to need to implement basic functionality like user&#xA;authentication, database access, and a responsive mobile-friendly UI. The right frameworks and libraries can make these&#xA;table-stakes features a lot faster and easier to implement.&lt;/p&gt;&#xA;&lt;p&gt;What if just one tool helps you bring everything you’ll need to build a feature-rich application fast? Well,&#xA;&lt;a href=&#34;https://github.com/t3-oss/create-t3-app&#34;&gt;create-t3-app&lt;/a&gt; does just that. So in this guide, I’ll walk you through the&#xA;essentials of &lt;code&gt;create-t3-app&lt;/code&gt; and cover its similarities and differences with the more well known &lt;code&gt;create-react-app&lt;/code&gt;&#xA;utility.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Visual testing in Playwright</title>
				<link>https://reflect.run/articles/visual-testing-in-playwright/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/visual-testing-in-playwright/</guid>
				<description>&lt;p&gt;As programming libraries, and frameworks continue to evolve, so do effective testing strategies. One aspect of testing&#xA;that has gained popularity in recent years is &lt;strong&gt;&lt;a href=&#34;https://reflect.run/visual-testing/&#34;&gt;visual testing&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Visual testing verifies that updates to an application have not caused any unexpected visual changes that would be&#xA;perceived as a bug by an end user. In this article, you will learn how to create a visual regression test based on the&#xA;screen comparison features with the Playwright test framework. Specifically, we&amp;rsquo;ll cover how to script Playwright to&#xA;visit a website, take a screenshot, and compare it to the screenshot of a known-good screenshot of the website in order&#xA;to detect any visual changes.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Testing Shadow DOM elements in Selenium</title>
				<link>https://reflect.run/articles/testing-shadow-dom-elements-in-selenium/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/testing-shadow-dom-elements-in-selenium/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Shadow DOM is a relatively new addition to the W3C spec which enables web developers to create isolated and reusable&#xA;components. While there are major benefits to using Shadow DOM, one of the historic drawbacks has been poor testing&#xA;support.&lt;/p&gt;&#xA;&lt;p&gt;In this article, we’ll cover how to access and manipulate Shadow DOM elements within Selenium tests, both via the new&#xA;native support for Shadow DOM in Selenium 4, as well as using workarounds that are compatible with older versions of&#xA;Selenium.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Introduction to RedwoodJS</title>
				<link>https://reflect.run/articles/introduction-to-redwood-js/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/introduction-to-redwood-js/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://redwoodjs.com&#34;&gt;RedwoodJS&lt;/a&gt; is one of several new full-stack web frameworks in the JavaScript ecosystem. It’s&#xA;designed to be easy to pick up, but equally easy to scale from a small side project to a fully-fledged startup.&lt;/p&gt;&#xA;&lt;p&gt;RedwoodJS combines several popular libraries into a single all-in-one framework, as well as implements its own features&#xA;to make the process of building and maintaining applications easier. This includes the RedwoodJS CLI, as well as helpful&#xA;features like route-based code-splitting.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to run Selenium tests inside a Docker container</title>
				<link>https://reflect.run/articles/how-to-run-selenium-tests-inside-a-docker-container/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/how-to-run-selenium-tests-inside-a-docker-container/</guid>
				<description>&lt;p&gt;As you probably know, &lt;a href=&#34;https://www.selenium.dev/&#34;&gt;Selenium&lt;/a&gt; is a popular open-source library for creating automated&#xA;tests. But did you know that Selenium does not operate as a single standalone tool? It’s true! When you’re running even&#xA;a simple Selenium test, you’re actually using &lt;strong&gt;three&lt;/strong&gt; separate executables:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Selenium script itself, which is running within a programming runtime like Java or Python.&lt;/li&gt;&#xA;&lt;li&gt;A &lt;a href=&#34;https://www.selenium.dev/documentation/webdriver/&#34;&gt;WebDriver&lt;/a&gt; executable which serves as the integration layer&#xA;between Selenium and a target browser. Each browser that integrates with Selenium (Google Chrome, Opera, Safari, and&#xA;Firefox) has its own version of WebDriver that translates Selenium API calls into browser actions.&lt;/li&gt;&#xA;&lt;li&gt;The browser process itself, such as Google Chrome or Apple Safari.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Because of the complexity of running multiple executables, as well as due to the frequency of updates necessary to keep&#xA;up to date with the latest browser versions, having an automated process for installing and upgrading these three&#xA;components can be a huge time-saver. This is where Docker comes in!&lt;/p&gt;</description>
			</item>
			<item>
				<title>Introduction to Bun</title>
				<link>https://reflect.run/articles/introduction-to-bun/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/introduction-to-bun/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://bun.sh&#34;&gt;Bun&lt;/a&gt; is a new runtime for JavaScript and TypeScript applications. Created by&#xA;&lt;a href=&#34;https://github.com/jarred-sumner&#34;&gt;Jarred Sumner&lt;/a&gt;, Bun has undergone rapid development since its inception in early&#xA;2021, and saw its first beta release in July of 2022.&lt;/p&gt;&#xA;&lt;p&gt;Bun aims to provide an “all-in-one” runtime for building JavaScript and TypeScript applications. Bun’s built-in bundler&#xA;replaces the need for Webpack or esbuild, and supports a variety of file-types including Javascript, Typescript, &lt;code&gt;tsx&lt;/code&gt;,&#xA;&lt;code&gt;jsx&lt;/code&gt;, &lt;code&gt;css&lt;/code&gt;, and &lt;code&gt;svg&lt;/code&gt;. Bun also includes a built-in web server for use in local development, which eliminates the need&#xA;for a plugin like webpack-dev-server. Additionally, common web APIs like &lt;code&gt;fetch&lt;/code&gt; and WebSockets are included in its&#xA;standard library. Bun also implements the Node module resolution algorithm, which makes migrating applications from Node&#xA;easier when compared to another alternative runtime like Deno.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Testing HTTP Basic Authentication in Selenium</title>
				<link>https://reflect.run/articles/testing-http-basic-authentication-in-selenium/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/testing-http-basic-authentication-in-selenium/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;HTTP Basic Authentication is an authentication method that&amp;rsquo;s built into the HTTP spec. It can be a very easy means of&#xA;implementing authentication on a web application, and is a common way to secure non-production environments like QA and&#xA;Staging environments without having to add an application-level auth mechanism.&lt;/p&gt;&#xA;&lt;p&gt;Browsers have built-in support for supporting HTTP Basic Authentication. When a browser request receives an&#xA;&lt;code&gt;HTTP 401 Unauthorized&lt;/code&gt; response code, together with a &lt;code&gt;WWW-Authenticate: Basic realm=&amp;quot;&amp;lt;realm&amp;gt;&amp;quot;&lt;/code&gt; response header field&#xA;(where &lt;code&gt;&amp;lt;realm&amp;gt;&lt;/code&gt; can be any user-defined string), it will automatically prompt the user to enter a username and&#xA;password. When the user enters their credentials, the request will be re-issued with the credentials passed via an&#xA;&lt;code&gt;Authorization&lt;/code&gt; request header and, if the credentials are correct, the user will be authorized to access the protected&#xA;page.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to test SMS workflows in Selenium</title>
				<link>https://reflect.run/articles/how-to-test-sms-workflows-in-selenium/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/how-to-test-sms-workflows-in-selenium/</guid>
				<description>&lt;p&gt;Many web applications now rely on your phone number for authentication or to deliver critical information. Specifically,&#xA;these applications tend to send SMS messages to your personal phone number. Considering how rarely a person changes&#xA;their phone number in life and how much we check our phones, SMS messages are one of the best ways to authenticate a&#xA;user, get in touch with them, or communicate something urgent.&lt;/p&gt;&#xA;&lt;p&gt;One of the most common workflows where automatic SMS is used is when a user logs in to a service. If two-factor&#xA;authentication is enabled, an automated SMS containing a secure code is sent to the phone number of the user. Similarly,&#xA;automated SMS workflows are used when a new user registers with an online service. Registration forms frequently ask for&#xA;a personal phone number. After signing up, you will be asked to confirm your phone number via an automated SMS that&#xA;contains a short verification code (often called a one-time password or OTP).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Introduction to Astro</title>
				<link>https://reflect.run/articles/introduction-to-astro/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/introduction-to-astro/</guid>
				<description>&lt;p&gt;Astro is a new static site builder that allows you to build static sites with your favorite frameworks like React,&#xA;Svelte, Vue, Preact, and Solid. Static site builders or generators are frameworks that make web applications on top of&#xA;UI frameworks into full static HTML content.&lt;/p&gt;&#xA;&lt;p&gt;Most of them ship JavaScript to the client-side for further client-side interaction on a web page, but Astro, by&#xA;default, renders directly to HTML and CSS, shipping as little JavaScript as possible to the client, which can result in&#xA;faster load time.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to save and load cookies in Selenium WebDriver</title>
				<link>https://reflect.run/articles/how-to-save-and-load-cookies-in-selenium-webdriver/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/how-to-save-and-load-cookies-in-selenium-webdriver/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;From the user&amp;rsquo;s point of view, cookies and the related cookie banners can sometimes be annoying. However from the&#xA;developer&amp;rsquo;s perspective, cookies are a convenient way to easily store session and user related information. Just imagine&#xA;a scenario where users login to a web page and the login state wouldn’t be stored. Everytime the web page would be&#xA;reloaded, the users would have to log in again. The same problem also occurs when you’re testing your web app&#xA;automatically using Selenium WebDriver. The coding effort and the test execution time would unnecessarily increase if&#xA;cookies couldn’t be stored/loaded automatically.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to save and restore state in Cypress tests</title>
				<link>https://reflect.run/articles/how-to-save-and-restore-state-in-cypress-tests/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/how-to-save-and-restore-state-in-cypress-tests/</guid>
				<description>&lt;h2 id=&#34;best-practices-on-sharing-state&#34;&gt;Best Practices on Sharing State&lt;/h2&gt;&#xA;&lt;p&gt;Sharing state across multiple tests is considered a bad practice. Consider the following passage from&#xA;&lt;a href=&#34;https://docs.cypress.io/guides/references/best-practices#Having-tests-rely-on-the-state-of-previous-tests&#34;&gt;Cypress’s “Best Practices” docs&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;You only need to do one thing to know whether you&amp;rsquo;ve coupled your tests incorrectly, or if one test is relying on the&#xA;state of a previous one. Change &lt;code&gt;it&lt;/code&gt; to &lt;code&gt;it.only&lt;/code&gt; on the test and refresh the browser. If this test can run by itself&#xA;and pass - congratulations you have written a good test. If this is not the case, then you should refactor and change&#xA;your approach.”&lt;/p&gt;</description>
			</item>
			<item>
				<title>Fixing Cypress cross-origin errors</title>
				<link>https://reflect.run/articles/fixing-cypress-cross-origin-errors/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/fixing-cypress-cross-origin-errors/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Although older versions of Cypress did not support testing across domains, with the addition of &lt;code&gt;cy.origin()&lt;/code&gt; in version&#xA;9.6, tests can now be created that span multiple domains.&lt;/p&gt;&#xA;&lt;p&gt;In this article, we will cover how to create cross-domain tests with Cypress using the new &lt;code&gt;cy.origin()&lt;/code&gt; and&#xA;&lt;code&gt;cy.session()&lt;/code&gt; functions, and identify some limitations with these new commands that you may run into in your own&#xA;testing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-cypress&#34;&gt;What is Cypress?&lt;/h2&gt;&#xA;&lt;p&gt;Cypress is a JavaScript-based end-to-end testing framework for browser-based applications. Due to its tight integration&#xA;with the browser, it is possible to use browser-based tools like Chrome Dev Tools and popular browser extensions like&#xA;React Dev Tools to debug Cypress tests. The fact that you can use familiar tools when building tests is one of the&#xA;reasons that Cypress is popular with developers. Cypress offers several testing features including: automatic waiting&#xA;(to avoid timing issues), integrated debugging and stack tracing, snapshot support, network traffic control with the&#xA;possibility to see DOM elements, cookies, local storage items and more.&lt;/p&gt;</description>
			</item>
			<item>
				<title>React State Management with Recoil</title>
				<link>https://reflect.run/articles/recoil-js-state-management/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/recoil-js-state-management/</guid>
				<description>&lt;h2 id=&#34;react-state-management&#34;&gt;React State Management&lt;/h2&gt;&#xA;&lt;p&gt;React comes out of the box with state management in the form of &lt;a href=&#34;https://reactjs.org/docs/hooks-state.html&#34;&gt;Hooks&lt;/a&gt;.&#xA;Hooks provide a functional programming approach to create, update and maintain state. We can visualise how Hooks work by&#xA;considering the state of a simple Counter application:&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://reflect.run/images/articles/recoil-js-state-management/image2.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;In the example above, a Counter component keeps a running count. The Counter has a default state of zero, which is what&#xA;is initially displayed to the user. After some user interaction (e.g. clicking a button), a state change will be&#xA;triggered and the internal state will change from 0 to 1. This in turn will trigger a re-render of the UI. Note that&#xA;this is perhaps the simplest example of state management within an application. Real-world applications typically have a&#xA;much larger and more complicated set of internal state.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Testing email workflows with Selenium</title>
				<link>https://reflect.run/articles/testing-email-workflows-with-selenium/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/testing-email-workflows-with-selenium/</guid>
				<description>&lt;p&gt;Many web applications have functionality that generates automated emails. These emails often represent critical parts of&#xA;a user’s journey through the application, and any bugs affecting them could have serious negative implications.&lt;/p&gt;&#xA;&lt;p&gt;One of most common workflows where automated emails are used are new user registration scenarios. Often after signing up&#xA;for an account, you’ll be asked to confirm your email address via an automated email that sends a confirmation email or&#xA;by entering a short verification code (which is sometimes called a one-time password or OTP for short).&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to test file uploads in Selenium</title>
				<link>https://reflect.run/articles/how-to-test-file-uploads-in-selenium/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/how-to-test-file-uploads-in-selenium/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Testing workflows that include a file upload step can be quite difficult to automate. Popular testing tools like&#xA;Selenium lack the ability to test file uploads out of the box, but luckily there are third-party tools that make&#xA;automatically testing file uploads possible.&lt;/p&gt;&#xA;&lt;p&gt;In this article, we’ll cover how a third-party tool called AutoIT can be used in combination with Selenium to build&#xA;end-to-end tests that include file upload functionality.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Introduction to Chrome DevTools Protocol</title>
				<link>https://reflect.run/articles/introduction-to-chrome-devtools-protocol/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/introduction-to-chrome-devtools-protocol/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://chromedevtools.github.io/devtools-protocol/&#34;&gt;Chrome DevTools Protocol&lt;/a&gt; (CDP) is a set of APIs that allows&#xA;developers to communicate with Chromium-based browsers, including Google Chrome. CDP was originally developed to power&#xA;the Developer Tools features within Chrome, but since its introduction its usage has extended to much more than this&#xA;initial use-case.&lt;/p&gt;&#xA;&lt;p&gt;In this article, we’ll provide some practical examples for interacting with the Chrome DevTools Protocol, as well as&#xA;cover how some popular testing libraries utilize CDP.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Comparing screenshots in Cypress</title>
				<link>https://reflect.run/articles/comparing-screenshots-in-cypress/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/comparing-screenshots-in-cypress/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;A failed test is ten times better than failed code. - Anonymous Developer&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;On a more serious note, as a developer, embracing the practices of test-driven development (TDD) and test automation&#xA;will do you a lot of good today and the day after. Although the purpose of this article is not to preach to you about&#xA;TDD, I will instead be taking you through one of the most popular tools there is in &lt;em&gt;Javascript Land&lt;/em&gt; when it comes to&#xA;writing automated tests - &lt;strong&gt;Cypress&lt;/strong&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Accessing a new window in Cypress tests</title>
				<link>https://reflect.run/articles/accessing-a-new-window-in-cypress-tests/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/accessing-a-new-window-in-cypress-tests/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;When you find yourself in the process of developing a more complex web page, you’ll surely come across a situation where&#xA;the users click on buttons/links that will take them to a new tab or window. While it is straightforward to code such a&#xA;button/link, testing this behavior can be quite a bit more difficult. Cypress, for instance, doesn’t have native support&#xA;for accessing a new window or browser tab.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Introduction to Nuxt Test Utils</title>
				<link>https://reflect.run/articles/introduction-to-nuxt-test-utils/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/introduction-to-nuxt-test-utils/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://nuxtjs.org/&#34;&gt;Nuxt&lt;/a&gt; is a free and open-source JavaScript library built upon Vue that allows you to develop&#xA;server-rendered web applications. Nuxt Test Utils is a test utility library for Nuxt.js for creating tests for Nuxt&#xA;projects and modules. It offers several helpful methods for testing Nuxt applications, writing browser tests, and&#xA;validating module test results.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-nuxt-test-utils&#34;&gt;What is Nuxt Test Utils?&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://test-utils.nuxtjs.org/&#34;&gt;nuxt/test-utils&lt;/a&gt; is a test utility library for Nuxt.js that allows you to create tests&#xA;easily for Nuxt projects and modules. It provides several useful functions and methods for testing Nuxt applications,&#xA;writing browser tests, and validating the module’s test result.&lt;/p&gt;</description>
			</item>
			<item>
				<title>What is Selenium WebDriverManager?</title>
				<link>https://reflect.run/articles/what-is-selenium-webdrivermanager/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/what-is-selenium-webdrivermanager/</guid>
				<description>&lt;p&gt;Selenium is one of the most well-known technologies in the software testing space. With built-in support for all major&#xA;browsers, Selenium is a powerful tool for building automated tests that can be run in a variety of environments.&lt;/p&gt;&#xA;&lt;p&gt;In order for Selenium to communicate with a browser, the browser needs to implement something called a WebDriver. This&#xA;is the interface that defines how Selenium can execute various operations within the browser, like clicks and text&#xA;entries. Each major browser has its own WebDriver implementation that is updated with every major browser release. The&#xA;communication protocol between the Selenium runtime and the browser’s WebDriver is known as the WebDriver API. The&#xA;WebDriver API is the only standards-based communication protocol across browsers and is defined in a&#xA;&lt;a href=&#34;https://www.w3.org/TR/webdriver/&#34;&gt;W3C Spec&lt;/a&gt; that is written and updated by representatives from browser vendors, tool&#xA;vendors, and the open-source community.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Strategies for handling async code in Cypress</title>
				<link>https://reflect.run/articles/strategies-for-handling-async-code-in-cypress/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/strategies-for-handling-async-code-in-cypress/</guid>
				<description>&lt;p&gt;It can be difficult to determine what is executing synchronously vs asynchronously within a web application. Static&#xA;assets in the page, such as images, CSS, and other media, are requested in order but can be processed either&#xA;synchronously or asynchronously depending on the type of asset it is, and how it’s defined within the page. Cascading&#xA;style sheets (CSS) are evaluated synchronously by the browser, but images, fonts, and videos referenced inside the CSS&#xA;are loaded and display asynchronously. Meanwhile, JavaScript exposes a single-threaded, asynchronous programming model&#xA;to the developer, but is executed in the order it appears on the page unless otherwise specified by the developer.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Deno&#39;s Networking and File Permissions Model</title>
				<link>https://reflect.run/articles/deno-networking-and-file-permissions-model/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/deno-networking-and-file-permissions-model/</guid>
				<description>&lt;h2 id=&#34;what-is-deno&#34;&gt;What is Deno?&lt;/h2&gt;&#xA;&lt;p&gt;Deno is a secure Typescript runtime that aims to replace NodeJS for JavaScript users. Deno aims to be a secure computing&#xA;platform, and as such has a permissions model that forces all scripts to be executed within a sandbox. This is done to&#xA;protect both you, the developer, and any user of your script from running into any of the common security issues found&#xA;with NodeJS. Deno essentially makes your environment immutable to any changes, unless you explicitly change its&#xA;permissions.&lt;/p&gt;</description>
			</item>
			<item>
				<title>What is Deno Deploy?</title>
				<link>https://reflect.run/articles/what-is-deno-deploy/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/what-is-deno-deploy/</guid>
				<description>&lt;p&gt;Deno is a new runtime environment for JavaScript, TypeScript, and WebAssembly designed to be simple, secure, and&#xA;efficient. Deno is built on the V8 JavaScript engine and the Rust programming language. Deno aims to be a more modern&#xA;runtime than Node.js, with better security, performance, and developer productivity support.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://deno.com/deploy&#34;&gt;Deno Deploy&lt;/a&gt; is a platform that makes it easy to deploy your Deno applications. It handles all&#xA;the details of setting up a production-ready environment, so you can focus on writing your core business logic.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Installing ChromeDriver and Python Selenium</title>
				<link>https://reflect.run/articles/installing-chromedriver-and-python-selenium/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/installing-chromedriver-and-python-selenium/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Automated testing is an essential part of web development that massively increases productivity in a team. By&#xA;outsourcing the repetitive task of testing our web applications to computers, we free up more time to work on shipping&#xA;features while ensuring a bug-free experience for our users.&lt;/p&gt;&#xA;&lt;p&gt;With this in mind, we’ll be exploring how to use one of the most capable automated testing tools,&#xA;&lt;a href=&#34;https://www.selenium.dev/&#34;&gt;Selenium&lt;/a&gt;, to run a sample automated test using the&#xA;&lt;a href=&#34;https://www.selenium.dev/documentation/webdriver/&#34;&gt;WebDriver API&lt;/a&gt; on a live page.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Everything you need to know about NoSuchElementException in Selenium</title>
				<link>https://reflect.run/articles/everything-you-need-to-know-about-nosuchelementexception-in-selenium/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/everything-you-need-to-know-about-nosuchelementexception-in-selenium/</guid>
				<description>&lt;p&gt;Most web tests involve interacting with elements on a web page. This would not possible without first locating and&#xA;retrieving these elements on the page. When the process of locating the elements of interest in the web page fails,&#xA;Selenium throws a &lt;code&gt;NoSuchElementException&lt;/code&gt;. This represents one of the most common Selenium exceptions, which is why it&#xA;is so important to know about it and how to handle it correctly.&lt;/p&gt;&#xA;&lt;p&gt;In this article, you will learn what a &lt;code&gt;NoSuchElementException&lt;/code&gt; is, what the most common causes behind this exception&#xA;are, and everything you need to know to handle it in your Selenium WebDriver&#xA;&lt;a href=&#34;https://reflect.run/regression-testing-guide/&#34;&gt;regression tests&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Introduction to React Testing Library</title>
				<link>https://reflect.run/articles/introduction-to-react-testing-library/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/introduction-to-react-testing-library/</guid>
				<description>&lt;p&gt;Introduced in 2018 by the developer &lt;a href=&#34;https://kentcdodds.com/&#34;&gt;Kent C . Dodds&lt;/a&gt;,&#xA;&lt;a href=&#34;https://testing-library.com/docs/react-testing-library/intro/&#34;&gt;React Testing Library&lt;/a&gt; is a set of testing utilities&#xA;that quickly made a splash in the React developer community. Contrary to React testing approaches up to that point, Kent&#xA;pushed a different view of testing which can be summarized by this tweet:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The more your tests resemble the way your software is used, the more confidence they can give you.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This was a clear departure from the approach of existing front-end testing libraries which tended to test implementation&#xA;rather than what the user was actually seeing.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Interacting with iframes in Selenium</title>
				<link>https://reflect.run/articles/interacting-with-iframes-in-selenium/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/interacting-with-iframes-in-selenium/</guid>
				<description>&lt;p&gt;Iframes, also known as inline frames, allow you to embed web pages within another web page. The &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; tag is&#xA;extremely useful in web development because it can be used to load external web pages into the current page without the&#xA;two pages interfering with each other.&lt;/p&gt;&#xA;&lt;p&gt;This article will explain iframes and show you how to use Selenium, a popular open-source library used for&#xA;&lt;a href=&#34;https://reflect.run/regression-testing-guide/&#34;&gt;regression testing&lt;/a&gt;, to automate operations that interact properly with iframes on your&#xA;website.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Building tests with Cypress Studio</title>
				<link>https://reflect.run/articles/building-tests-with-cypress-studio/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/building-tests-with-cypress-studio/</guid>
				<description>&lt;p&gt;There have been lots of Cypress features over the years. They include Cypress Test Runner; this allows developers to see&#xA;all test files and which browsers are available for running tests. Another is the Cypress code coverage feature, which&#xA;lets you measure code coverage to know which parts of your code are tested.&lt;/p&gt;&#xA;&lt;p&gt;In this article, we will look at one of Cypress&amp;rsquo; experimental features, Cypress Studio. We will learn about it and how&#xA;to create and modify tests with Cypress Studio. We will also look at some limitations of Cypress studio and why Cypress&#xA;removed it in its version 10 release.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Writing end-to-end tests in Node.js using Selenium</title>
				<link>https://reflect.run/articles/writing-end-to-end-tests-in-nodejs-using-selenium/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/writing-end-to-end-tests-in-nodejs-using-selenium/</guid>
				<description>&lt;p&gt;The importance of software testing cannot be overstated in software engineering, and it is even more crucial in&#xA;front-end development. Testing your application with functional and unit tests alone may not guarantee its correctness.&#xA;In this case, end-to-end (E2E) testing can be very helpful, as it can replicate user behavior in your application to&#xA;guarantee that it functions correctly. Usually, this process involves writing a script to simulate users navigating&#xA;through an application, testing certain features and behavior along the way.&lt;/p&gt;</description>
			</item>
			<item>
				<title>What is the Next.js equivalent for Angular?</title>
				<link>https://reflect.run/articles/what-is-the-nextjs-equivalent-for-angular/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/what-is-the-nextjs-equivalent-for-angular/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://nextjs.org/&#34;&gt;Next.js&lt;/a&gt; is one of the most popular full-stack frameworks available, and it has rapidly become one&#xA;of the most adopted technologies when it comes to web development.&lt;/p&gt;&#xA;&lt;p&gt;In addition to adding SSR (Server-Side Rendering) capabilities to React, Next.js provides a complete toolset for&#xA;building fast, efficient, high-performance websites with low load times.&lt;/p&gt;&#xA;&lt;p&gt;In this article, we will provide an overview of Angular Universal, which is the closest equivalent to Next.js in the&#xA;Angular ecosystem.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Why code-first tools are failing</title>
				<link>https://reflect.run/articles/why-code-first-tools-are-failing/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/why-code-first-tools-are-failing/</guid>
				<description>&lt;p&gt;Automated testing is now relatively mainstream. In the United Kingdom, where I am based, any decent-sized project can&#xA;expect to have team members dedicated to writing coded automation tests. This new breed of developer&amp;rsquo;s duties is to test&#xA;the correctness of the applications being built by writing code that uses an existing test framework. The resultant&#xA;tests are then run in a continuous integration environment whenever the application code is modified. The goal is to&#xA;alleviate the tedious repetitiveness of manual testing and cut our reliance on human beings to execute the tests.&lt;/p&gt;</description>
			</item>
			<item>
				<title>What is headless browser testing?</title>
				<link>https://reflect.run/articles/what-is-headless-browser-testing/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/what-is-headless-browser-testing/</guid>
				<description>&lt;p&gt;Headless browsers have several use-cases including web scraping, automated testing, automating interactions with&#xA;websites, or more nefarious uses like performing&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Denial-of-service_attack#Distributed_DoS&#34;&gt;DDOS attacks&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The term isn&amp;rsquo;t self-explanatory though, and knowing exactly what a headless browser is can be a little confusing.&lt;/p&gt;&#xA;&lt;p&gt;In this article, we&amp;rsquo;re going to discuss:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What is a headless browser?&lt;/li&gt;&#xA;&lt;li&gt;How do headless browsers apply to testing?&lt;/li&gt;&#xA;&lt;li&gt;What are the advantages of a headless browser?&lt;/li&gt;&#xA;&lt;li&gt;What are the disadvantages of a headless browser?&lt;/li&gt;&#xA;&lt;li&gt;Finally, we&amp;rsquo;ll implement a headless browser in Puppeteer.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;what-is-a-headless-browser&#34;&gt;What is a headless browser?&lt;/h2&gt;&#xA;&lt;p&gt;A headless browser reads, parses, and interacts with web pages without rendering a graphical user interface (GUI), and&#xA;without requiring a user to operate the browser. For normal web browsing, having a GUI is essential for viewing content&#xA;and interacting with the underlying web page. With a headless browser, you can replicate and automate almost anything a&#xA;user can do, and do it in a host of programming languages.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Cross-browser testing using Selenium IDE</title>
				<link>https://reflect.run/articles/cross-browser-testing-using-selenium-ide/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/cross-browser-testing-using-selenium-ide/</guid>
				<description>&lt;h2 id=&#34;getting-started&#34;&gt;Getting Started&lt;/h2&gt;&#xA;&lt;p&gt;Selenium IDE is a record-and-playback tool with a simple interface that helps in building automated test scripts.&lt;/p&gt;&#xA;&lt;p&gt;As you interact with a website in your browser, Selenium IDE records those same actions so they can be replayed later as&#xA;part of an automated test. Selenium IDE is available as a browser extension for either Google Chrome or Mozilla Firefox,&#xA;however, the next major release will be a standalone Electron application, although there is currently no published&#xA;release date for this upcoming version.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Interacting with native alerts using Selenium WebDriver</title>
				<link>https://reflect.run/articles/interacting-with-native-alerts-using-selenium-webdriver/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/interacting-with-native-alerts-using-selenium-webdriver/</guid>
				<description>&lt;p&gt;Sometimes web pages notify you about the result of an operation or ask you for confirmation through dialog windows.&#xA;These dialogs will appear on top of whatever is displayed on the current web page and prevent you from performing any&#xA;other operation until the dialog is dismissed. These dialogs, which are often referred to as “alerts”, cannot be styled&#xA;and utilize the browser’s default look-and-feel.&lt;/p&gt;&#xA;&lt;p&gt;In this article, you will learn what a native alert is, what are the most important types of alerts you should be able&#xA;to deal with, and everything you need to know to interact with them with Selenium WebDriver in Java. But first, let’s&#xA;delve into Selenium WebDriver.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Async waits in React Testing Library</title>
				<link>https://reflect.run/articles/async-waits-in-react-testing-library/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/async-waits-in-react-testing-library/</guid>
				<description>&lt;p&gt;In this guide, we will cover how to handle asynchronous operations while testing our React components using React&#xA;Testing Library. To follow this tutorial, a basic knowledge of React is required, as well as some familiarity with&#xA;&lt;a href=&#34;https://testing-library.com/docs/react-testing-library/intro/&#34;&gt;React Testing Library&lt;/a&gt;, which is sometimes referred to&#xA;as RTL.&lt;/p&gt;&#xA;&lt;h2 id=&#34;javascript-asynchronous-by-default&#34;&gt;JavaScript: Asynchronous by default&lt;/h2&gt;&#xA;&lt;p&gt;For all but the simplest JavaScript applications, some form of asynchronous behavior is practically a given. Imagine a&#xA;simple web application that fetches some data from an API and displays it on the UI. At a minimum, an asynchronous call&#xA;will be used to fetch the API response. Other asynchronous behavior in this simple app could include things like:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Sending command-line arguments to an npm script</title>
				<link>https://reflect.run/articles/sending-command-line-arguments-to-an-npm-script/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/sending-command-line-arguments-to-an-npm-script/</guid>
				<description>&lt;p&gt;Node.js is full of utilities and CLI tools that let you customize them to do exactly what you want. If you need&#xA;something really custom, though, &amp;ldquo;npm scripts&amp;rdquo; are the way to go. You might have used this for your &amp;ldquo;build&amp;rdquo; or &amp;ldquo;dev&amp;rdquo;&#xA;scripts, but there&amp;rsquo;s a lot more you can do with them. npm scripts are the commands you can execute in a Node.js project&#xA;using &lt;code&gt;npm run&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;When you&amp;rsquo;re developing an npm script, you&amp;rsquo;ll need some input to be able to tell the script what needs to be done with&#xA;these values. This is where command-line arguments will come in handy! In this guide, you will learn how to create a&#xA;simple npm script and pass input values to the script using command-line arguments.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to use Node.js modules in Deno</title>
				<link>https://reflect.run/articles/how-to-use-node-modules-in-deno/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/how-to-use-node-modules-in-deno/</guid>
				<description>&lt;h2 id=&#34;what-is-deno&#34;&gt;What is Deno?&lt;/h2&gt;&#xA;&lt;p&gt;Deno is a V8-based runtime for Javascript and Typescript that was created by Ryan Dahl, the original creator of Node.js.&#xA;Deno seeks to address perceived shortcomings in the design of Node.js, specifically around security, ease of use, and&#xA;dependency management.&lt;/p&gt;&#xA;&lt;p&gt;Some key differences between Node.js and Deno are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Deno seeks to improve the security of applications by providing a more secure default configuration. By default, Deno&#xA;has no access to the file system, network, or environment variables. Developers must explicitly choose to enable&#xA;access.&lt;/li&gt;&#xA;&lt;li&gt;There is no equivalent to a ‘package.json’ in Deno. Instead, dependencies are imported by referencing package URLs&#xA;directly in your Typescript code. Deno provides tools for inspecting the dependency cache (deno info) and pre-loading&#xA;the cache (deno cache). The latter command is particularly useful in CI pipelines where you want to avoid downloading&#xA;dependencies over the public internet, either for speed reasons or to prevent network failures from causing builds and&#xA;deployments to fail.&lt;/li&gt;&#xA;&lt;li&gt;Working with TypeScript does not require any configuration in Deno, although you can provide one if you want to change&#xA;any configuration parameters used by the TypeScript compiler (tsc).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;how-to-use-a-node-module-in-deno&#34;&gt;How to use a Node module in Deno&lt;/h2&gt;&#xA;&lt;p&gt;Before we dive in, let&amp;rsquo;s take a quick look at the key differences that make it difficult for you to use Node.js modules&#xA;in the Deno application.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Micro Frontends, are they the future of web development?</title>
				<link>https://reflect.run/articles/micro-frontends/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/micro-frontends/</guid>
				<description>&lt;h2 id=&#34;why-micro-frontends&#34;&gt;Why Micro Frontends&lt;/h2&gt;&#xA;&lt;p&gt;Traditional web applications are usually built as a single page application (SPA). There are many benefits to a SPA,&#xA;including faster load times between page loads, but a key benefit is separation from the backend/data layer of the&#xA;application. Having a clearer separation of concerns between frontend and backend logic makes it easier for product&#xA;teams to make UI changes independent of the API and DB layers. In other words, you can have one team that is focused on&#xA;delivering a strong API experience, while another team works on delivering the best end user experience.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Setting up Selenium Grid for cross-browser testing</title>
				<link>https://reflect.run/articles/setting-up-selenium-grid-for-cross-browser-testing/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/setting-up-selenium-grid-for-cross-browser-testing/</guid>
				<description>&lt;p&gt;Despite the dominance of&#xA;&lt;a href=&#34;https://gs.statcounter.com/browser-market-share/desktop/worldwide&#34;&gt;Google Chrome&amp;rsquo;s market share&lt;/a&gt;, there’s still more&#xA;than a third of web usage worldwide that occurs on non-Chrome browsers. Given the complexity of supporting thirty years&#xA;of web standards, it’s not surprising that the same web application can present divergent behavior across browsers. This&#xA;makes the task of testing across browsers especially important for developers who want to ensure a consistent, working&#xA;experience for all users.&lt;/p&gt;&#xA;&lt;p&gt;Testing across browsers presents its own challenges. For instance, Google Chrome can work on operating systems with&#xA;little or no exception, while Safari only works on Apple systems like macOS, iPadOS and iOS.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Highlighting text in Cypress tests</title>
				<link>https://reflect.run/articles/highlighting-text-in-your-cypress-tests/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/highlighting-text-in-your-cypress-tests/</guid>
				<description>&lt;h2 id=&#34;testing-basics&#34;&gt;Testing Basics&lt;/h2&gt;&#xA;&lt;h3 id=&#34;the-three-as&#34;&gt;The Three “A”s&lt;/h3&gt;&#xA;&lt;p&gt;A straightforward approach to testing is what’s known as the three “A’s”: Arrange, Act, and Assert. These three concepts&#xA;are the bedrock for structuring your &lt;a href=&#34;https://reflect.run/regression-testing-guide/&#34;&gt;regression tests&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Arrange:&lt;/strong&gt; When writing a test, the first step is to set up, or arrange, the proper environment. Typically, this&#xA;environment is a shared development or QA environment, but it could also be your local environment or even production.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Act:&lt;/strong&gt; The next step, or “act”, involves an action that seeks to simulate how the user engages with the application.&#xA;This is arguably the most important part of testing because we are putting the action that the user takes to the test.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to take a screenshot inside Selenium WebDriver</title>
				<link>https://reflect.run/articles/how-to-take-screenshot-inside-selenium-webdriver/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/how-to-take-screenshot-inside-selenium-webdriver/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.selenium.dev/&#34;&gt;Selenium&lt;/a&gt; is a free and open-source framework for automating actions inside of a browser.&#xA;Selenium scripts can be written in a variety of languages, including Java, C#, and Python.&lt;/p&gt;&#xA;&lt;p&gt;Selenium’s built-in features can also be combined with other libraries to let you do things that Selenium doesn’t&#xA;support by default. In this tutorial, you’ll learn how to take screenshots using Selenium and Python. We’ll cover how to&#xA;use Selenium’s built-in functionality for taking full-page screenshots and saving them on your local computer. We’ll&#xA;also use Selenium alongside another Python library, which will enable us to take screenshots of specific elements.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Waiting until elements are interactable in Selenium</title>
				<link>https://reflect.run/articles/waiting-until-elements-are-interactable-in-selenium/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/waiting-until-elements-are-interactable-in-selenium/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Nowadays, most web applications don’t serve all of the data needed to render the entire page within the initial HTTP&#xA;response. Instead, most web applications load data asynchronously in &lt;code&gt;fetch()&lt;/code&gt; or XHR calls that are separate from the&#xA;initial page request. This allows web applications to load new data incrementally without having to reload the whole&#xA;page, but it means that when testing web applications, it’s not sufficient to wait for the initial page load before&#xA;running your automated tests, since your tests may be reliant on data and UI elements that don’t yet exist on the page.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The hidden dependencies in your regression tests</title>
				<link>https://reflect.run/articles/hidden-dependencies-in-regression-tests/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/hidden-dependencies-in-regression-tests/</guid>
				<description>&lt;p&gt;At &lt;a href=&#34;https://reflect.run&#34;&gt;Reflect&lt;/a&gt;, we think a lot about how to improve the state of end-to-end testing.&#xA;We knew that improved tooling and faster execution were clear wins, but one thing that wasn’t obvious to us was how correlated an application’s state is to the complexity of testing that application.&lt;/p&gt;&#xA;&lt;p&gt;The practice of managing the state of the application under test, known as &lt;strong&gt;test data management&lt;/strong&gt;, is often overlooked.&#xA;In this article, we&amp;rsquo;ll cover how teams typically manage (or don’t manage) this data, and present a new method we’ve developed to make this process easier.&lt;/p&gt;</description>
			</item>
			<item>
				<title>In Regression Tests, Conditionals = Complexity</title>
				<link>https://reflect.run/articles/regression-tests-conditionals-equal-complexity/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/regression-tests-conditionals-equal-complexity/</guid>
				<description>&lt;p&gt;At Reflect, we care a lot about making regression tests maintainable. Our &lt;a href=&#34;https://reflect.run/regression-testing-guide/&#34;&gt;regression testing guide&lt;/a&gt; covers a lot of common situations that lead to flaky tests, but one anti-pattern we don&amp;rsquo;t hear discussed a lot is the presence of conditionals (i.e. if-else and switch statements) in tests.&#xA;In this article, we&amp;rsquo;ll cover common scenarios where we&amp;rsquo;ve seen conditionals used in regression tests, along with better alternatives.&lt;/p&gt;&#xA;&lt;h2 id=&#34;handling-third-party-integrations&#34;&gt;Handling Third-Party Integrations&lt;/h2&gt;&#xA;&lt;p&gt;Since regression tests are mainly run on shared systems like a Staging or QA environment, third-party integrations like live chat widgets, personalization tools, and A/B testing platforms may be integrated with those systems and have a habit of interfering with tests.&#xA;Imagine that your web application uses an A/B testing framework, and your marketing team is using it to run a site-wide campaign that displays a pop-up modal to 50% of sessions.&#xA;This could easily interfere with your tests, and it&amp;rsquo;d be tempting to write an if-statement to check for and dismiss the modal if it is displayed.&#xA;This can be a quick fix, but it&amp;rsquo;s keeping open a class of issues that could make many of your other tests flaky down the road.&#xA;Rather than using an if-statement, a better approach is to try to disable the marketing widgets entirely.&#xA;Here&amp;rsquo;s some alternatives for doing just that:&lt;/p&gt;</description>
			</item>
			<item>
				<title>A practical, step-by-step guide to using Chrome&#39;s DevTools</title>
				<link>https://reflect.run/articles/devtools-step-by-step/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/devtools-step-by-step/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In this post, we&amp;rsquo;ll aim to cover practical techniques developers can use to debug, manipulate, and&#xA;otherwise probe running web applications via Chrome&amp;rsquo;s built-in devtools. The goal is to articulate the&#xA;specific steps and shortcuts we would use at Reflect, and to favor breadth over depth. Readers can&#xA;follow the guide step-by-step and try it out themselves at the provided link provided below. With that in mind,&#xA;let&amp;rsquo;s imagine the following (contrived) scenario.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Using BiDirectional Protocol support in Selenium 4 to measure browser resource utilization</title>
				<link>https://reflect.run/articles/selenium-4-browser-metrics/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/selenium-4-browser-metrics/</guid>
				<description>&lt;h2 id=&#34;bidi-protocol-in-selenium-4---not-just-network-and-console-logs&#34;&gt;BiDi Protocol in Selenium 4 - not just network and console logs!&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;../selenium-4-events/&#34;&gt;Previously&lt;/a&gt;, we showed how to record network requests and console logs in &lt;a href=&#34;https://www.selenium.dev/blog/2021/announcing-selenium-4/&#34;&gt;Selenium 4&lt;/a&gt; via&#xA;the currently-in-draft &lt;a href=&#34;https://w3c.github.io/webdriver-bidi/&#34;&gt;BiDirectional (or BiDi) protocol&lt;/a&gt;, but that was far from the only new capability that the new BiDi-related APIs provide! In&#xA;this article we&amp;rsquo;ll show how to use Selenium 4 to inspect browser performance and resource-utilization metrics, using examples written in &lt;a href=&#34;https://www.scala-lang.org/&#34;&gt;Scala&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;collecting-browser-performance-and-resource-utilization-data-in-selenium-3&#34;&gt;Collecting Browser Performance and Resource Utilization data in Selenium 3&lt;/h2&gt;&#xA;&lt;p&gt;In previous versions of Selenium, there were no dedicated APIs for retrieving performance-related information from the browser - making it difficult to obtain&#xA;performance data from the browser session while running your tests. You could open the DevTools while the browser was still open, but that approach breaks&#xA;down if you want to automate metric collection and/or collect metrics periodically.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The Perfect Configuration Format? Try Typescript</title>
				<link>https://reflect.run/articles/typescript-the-perfect-file-format/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/typescript-the-perfect-file-format/</guid>
				<description>&lt;p&gt;Before getting into why Typescript is a compelling choice for config files, let&amp;rsquo;s review the common file formats used in a typical web application today:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;XML:&lt;/strong&gt; Back in the late 90s to mid 2000s this was king both as a messaging protocol and flat file format. It gets a bad rap, but there is a lot to like about XML as a config file format, including great tooling support and a robust schema definition language in XSD.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;JSON:&lt;/strong&gt; Extremely common as a data interchange format in REST APIs, and also very popular as a config file format. For a lot of developers this strikes the right balance of feature-set and simplicity.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;YAML:&lt;/strong&gt; This format is packed full of features that I&amp;rsquo;ve never needed to use. Due to its focus on terseness, I find its features to be less discoverable versus something more verbose like XML. For me, it&amp;rsquo;s the Perl of configuration formats.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;TOML:&lt;/strong&gt; Short for &lt;em&gt;Tom&amp;rsquo;s Obvious, Minimal Language&lt;/em&gt; - this format doesn&amp;rsquo;t go overboard on features while still being more terse than JSON or XML. However, the &lt;a href=&#34;https://hitchdev.com/strictyaml/why-not/toml/&#34;&gt;hitchdev blog&lt;/a&gt; makes a compelling argument about difficulties with using TOML for large config files.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s where I think Typescript shines:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Stable Ordering and Caching with Infinite Scroll</title>
				<link>https://reflect.run/articles/infinite-scroll-caching/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/infinite-scroll-caching/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Infinite scroll&lt;/em&gt; is a common interaction pattern on the web today.&#xA;To save bandwidth and server resources,&#xA;a webpage only loads a subset of items in a collection initially.&#xA;As the user scrolls through the collection (e.g., a photo gallery),&#xA;the webpage loads more items in the background and appends&#xA;them to the visible collection that the user sees.&#xA;For ordered collections that are &lt;em&gt;static&lt;/em&gt;,&#xA;each subsequent &amp;ldquo;page&amp;rdquo; of items can be cached in-memory&#xA;since the page boundaries are known ahead of time.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Using BiDirectional Protocol support in Selenium 4 to stream console logs and network requests</title>
				<link>https://reflect.run/articles/selenium-4-events/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/selenium-4-events/</guid>
				<description>&lt;h2 id=&#34;bidi-protocol-support-in-selenium-4&#34;&gt;BiDi Protocol support in Selenium 4&lt;/h2&gt;&#xA;&lt;p&gt;One of the new features &lt;a href=&#34;https://www.selenium.dev/blog/2021/announcing-selenium-4/&#34;&gt;in the recently released Selenium 4&lt;/a&gt; is support for new event-driven listeners&#xA;which will be powered by the currently-in-draft &lt;a href=&#34;https://w3c.github.io/webdriver-bidi/&#34;&gt;BiDirectional (or BiDi) protocol&lt;/a&gt; (though the current Selenium&#xA;implementation has some limitations, which we&amp;rsquo;ll discuss later). In this article we&amp;rsquo;ll discuss some of these new capabilities and demonstrate how to use them in your own &lt;a href=&#34;https://reflect.run/regression-testing-guide/&#34;&gt;regression tests&lt;/a&gt;.&#xA;to inspect console logs and network requests made from the browser.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Reflection at Reflect: The Reflect and Proxy APIs</title>
				<link>https://reflect.run/articles/reflection-at-reflect/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/reflection-at-reflect/</guid>
				<description>&lt;h2 id=&#34;reflect--proxy&#34;&gt;Reflect &amp;amp; Proxy&lt;/h2&gt;&#xA;&lt;p&gt;Reflect and Proxy are both standard built-in objects introduced as part of the ES6 spec and are supported&#xA;in all modern browsers. Broadly speaking, they formalize the concept of metaprogramming in the context of&#xA;Javascript by combining existing introspection and intercession APIs, and expanding upon them. In this&#xA;article we&amp;rsquo;ll explore how these objects work using examples that approximate real-world requirements.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Javascript engines have object internal methods like &lt;code&gt;[[GetOwnProperty]]&lt;/code&gt;, &lt;code&gt;[[HasProperty]]&lt;/code&gt;, and&#xA;&lt;code&gt;[[Set]]&lt;/code&gt;, some of which were already exposed for reflection in earlier versions of the spec. If you&amp;rsquo;ve&#xA;worked with Javascript before, you&amp;rsquo;re probably familiar with some of these developer-accessible&#xA;equivalents. For example&amp;hellip;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Implementing a Task Queue in SQL</title>
				<link>https://reflect.run/articles/sql-queue/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/sql-queue/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Software systems often periodically execute collections of similar or identical tasks.&#xA;Whether it&amp;rsquo;s computing daily account analytics, or&#xA;running background computations asynchronously like GitHub Actions,&#xA;it&amp;rsquo;s common to structure and complete this computation using&#xA;a queue of tasks and the concept of a generic &amp;ldquo;worker&amp;rdquo; which executes the task.&#xA;In the naive approach,&#xA;a single worker sequentially executes each task,&#xA;avoiding locks or other coordination.&lt;/p&gt;&#xA;&lt;p&gt;Two downsides to the single worker approach are:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Getting Started with Automation Testing</title>
				<link>https://reflect.run/articles/getting-started-with-automation-testing/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/getting-started-with-automation-testing/</guid>
				<description>&lt;p&gt;Automation testing uses software to execute a predefined set of actions against your user interface that automatically verifies those actions against a set of predefined results.&#xA;When done right, teams can increase test accuracy and achieve greater test coverage in shorter timelines by taking over mundane, repetitive, time-consuming tasks such as regression tests.&#xA;Manual testing efforts can then be focused on exploratory tests, test results review, and other higher-value tasks.&lt;/p&gt;</description>
			</item>
			<item>
				<title>An End To End Testing Strategy For Continuous Delivery</title>
				<link>https://reflect.run/articles/continuous-delivery-reflect/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/continuous-delivery-reflect/</guid>
				<description>&lt;h2 id=&#34;agile-and-cicd&#34;&gt;Agile and CI/CD&lt;/h2&gt;&#xA;&lt;p&gt;Continuous delivery is the software engineering practice of&#xA;releasing, or deploying, software changes to the production system&#xA;immediately after they are reviewed and deemed ready.&#xA;A related concept is to perform the review of the changes&#xA;quickly to increase both application development release frequency and&#xA;the efficiency of confirming that the changes are correct post-deployment.&#xA;The goal is to create a tight feedback loop between developers and the state of the production system.&#xA;These short cycles of collaboration reduce bugs that are introduced due to context-switching or unfamiliarity, and establish a means for continuous testing.&#xA;Additionally, it forces the system infrastructure itself to provably maintain its flexibility&#xA;in response to new features, changing usage, errors and rollbacks.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Continuous Integration in Agile Development</title>
				<link>https://reflect.run/articles/agile-continuous-integration/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/agile-continuous-integration/</guid>
				<description>&lt;h2 id=&#34;continuous-integration-basics&#34;&gt;Continuous integration basics&lt;/h2&gt;&#xA;&lt;p&gt;Continuous integration is the practice of building and testing a codebase for every proposed change,&#xA;often executing the process multiple times per day across a software development team.&#xA;Each developer integrates their changes into the official latest version of the codebase&#xA;to identify integration issues early in the development process.&#xA;Additionally, the execution of the full test suite&#xA;provides broad regression protection even as developers work on isolated areas of the codebase.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Announcing our Seed Fundraise</title>
				<link>https://reflect.run/articles/announcing-our-seed-fundraise/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/announcing-our-seed-fundraise/</guid>
				<description>&lt;p&gt;With the ubiquity of web technologies, and with so much of our day-to-day work going digital, it&amp;rsquo;s more essential than ever to provide software teams with better tools to ship software faster and with higher quality.  When we talk to CTOs, we hear time and again that the barrier to adopting end-to-end test automation is the time it takes to build and maintain a test suite.  Large companies have the resources to dedicate developers full-time to test automation, but for a lot of other software organizations, it&amp;rsquo;s a non-starter.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to Test React Apps</title>
				<link>https://reflect.run/articles/how-to-test-react-apps/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/how-to-test-react-apps/</guid>
				<description>&lt;h2 id=&#34;react-app-testing-methods-to-improve-the-performance-of-your-development-team&#34;&gt;React app testing methods to improve the performance of your development team&lt;/h2&gt;&#xA;&lt;p&gt;To keep your React apps maintainable and working as expected, testing is key.&#xA;In this article we&amp;rsquo;ll cover some key strategies for testing your React application.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-react-testing&#34;&gt;What is React testing?&lt;/h2&gt;&#xA;&lt;p&gt;React applications center around the concept of components, and so it makes sense to think of testing React applications in terms of components as well.&#xA;Tests for a React application can be classified into three categories: (1) verifying the internal state of a component, (2) verifying the external state of a component, or (3) verifying how multiple components interact with each other.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How YC Companies Test React Apps</title>
				<link>https://reflect.run/articles/how-yc-companies-test-react-apps/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/how-yc-companies-test-react-apps/</guid>
				<description>&lt;p&gt;The data from this article is based on a six-question survey of 46 technical founders of YCombinator-funded companies.&#xA;The raw results are included below along with commentary and additional stats (courtesy of &lt;a href=&#34;https://openbase.io&#34;&gt;Openbase&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;h2 id=&#34;unit-testing&#34;&gt;Unit Testing&lt;/h2&gt;&#xA;&lt;p&gt;Our first two survey questions were about unit testing, specifically what we categorized as &lt;strong&gt;unit testing frameworks&lt;/strong&gt; and &lt;strong&gt;test runners&lt;/strong&gt;.&#xA;This ended up being an imperfect categorization, as some frameworks like Jest take an all-in-one approach, whereas libraries like Chai really are better described as an assertion library.&#xA;So in hindsight it&amp;rsquo;s hard to lump them all together.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Put your Automation to the Test: Best Demo Websites for Testing</title>
				<link>https://reflect.run/articles/demo-websites/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/demo-websites/</guid>
				<description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;What scenarios scare you the most about your test automation?&#xA;Drag-and-drop? File uploads?&#xA;Well, face your fears and test them against these great sites&#xA;for verifying your automation&amp;rsquo;s performance.&#xA;The web is a massive, heterogeneous beast and growing larger every year.&#xA;So, don&amp;rsquo;t be discouraged if there are new web experiences&#xA;that you aren&amp;rsquo;t able to automate so easily.&#xA;This guide covers a few &amp;ldquo;gotchas&amp;rdquo; about creating automated tests,&#xA;and then dives into some of our favorite sites for testing &lt;a href=&#34;https://reflect.run&#34;&gt;Reflect&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Visual Validation: Does Your Site Pass the Eye Test?</title>
				<link>https://reflect.run/articles/visual-validation/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/visual-validation/</guid>
				<description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;Visual Validation of a website is simply verifying that everything looks correct. It can cover all aspects of the&#xA;website&amp;rsquo;s appearance, including layout, coloring, image sizing and contextual menus. It&amp;rsquo;s easy to see why visual&#xA;validation is popular: it gives a website maintainer peace of mind that their users have the correct (positive)&#xA;experience while using their site. And it&amp;rsquo;s also easy to see why it&amp;rsquo;s important: all of the popular frameworks like&#xA;&lt;a href=&#34;https://vuejs.org/&#34;&gt;Vue&lt;/a&gt;, &lt;a href=&#34;https://reactjs.org/&#34;&gt;React&lt;/a&gt; and &lt;a href=&#34;https://angular.io/&#34;&gt;Angular&lt;/a&gt; have shared dependencies on&#xA;hundreds of JavaScript libraries. Even seemingly simple changes can have far-reaching impact throughout a site&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to Design a QA Process</title>
				<link>https://reflect.run/articles/how-to-design-qa-process/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/how-to-design-qa-process/</guid>
				<description>&lt;h2 id=&#34;how-to-create-a-leading-quality-assurance-process&#34;&gt;How to create a leading Quality Assurance process&lt;/h2&gt;&#xA;&lt;p&gt;All software companies establish a QA process&#xA;to ensure that their applications are always working.&#xA;During the development cycle, as applications evolve and acquire new functionality,&#xA;that functionality needs to be tested for quality and correctness.&#xA;However, existing functionality also runs the risk of breaking&#xA;as a result of changes&amp;mdash;both internal and external.&#xA;Thus, existing functionality needs to be tested as well to ensure that it hasn&amp;rsquo;t regressed.&#xA;Your QA process lays out how your company ensures that it meets both of these requirements.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Mapping the Testing Pyramid to Automated Testing Tools</title>
				<link>https://reflect.run/articles/automated-testing-tools/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/automated-testing-tools/</guid>
				<description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;Automated testing tools are great.&#xA;They save you time (and money) by automating tasks that you would otherwise perform yourself.&#xA;Software testing is a mature concept within the broader landscape of software development,&#xA;so you have tons of options when considering&#xA;what aspect of testing your web application that you&amp;rsquo;d like to automate.&lt;/p&gt;&#xA;&lt;p&gt;Reflect automates testing at the end-user level.&#xA;That is, Reflect doesn&amp;rsquo;t test isolated parts of your application code;&#xA;it tests the full, end-to-end user experience,&#xA;just like someone using your application in real life.&#xA;You can certainly create tests in Reflect that only exercise a specific,&#xA;narrow portion of your web application.&#xA;But if you want to automate testing below the surface of the end user experience,&#xA;what are your options for QA tools?&#xA;We highlight the important components to consider at each level of the testing hierarchy, and&#xA;include an automation tools list for each.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Launching on Product Hunt</title>
				<link>https://reflect.run/articles/launching-on-product-hunt/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://reflect.run/articles/launching-on-product-hunt/</guid>
				<description>&lt;h2 id=&#34;moving-to-a-freemium-model&#34;&gt;Moving to a Freemium Model&lt;/h2&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve had our eye on moving to a freemium model, adding a new Free plan to our existing lineup of Starter, Standard, and Pro tiers.&#xA;We felt &lt;a href=&#34;https://www.producthunt.com&#34;&gt;Product Hunt&lt;/a&gt; would be the perfect launch platform for this update, given that this would be the first time that anyone could signup without a credit card and create tests using Reflect.&lt;/p&gt;&#xA;&lt;p&gt;At its core, Reflect converts your manual test steps into an automated, repeatable test.  This requires that we be able to detect and replicate a varied set of  &lt;a href=&#34;https://reflect.run/docs/recording-tests/supported-actions/&#34;&gt;user actions&lt;/a&gt; as you perform them.  And we must be capable of doing this for &lt;strong&gt;any&lt;/strong&gt; website, regardless of JS framework.  The actions we need to detect are things like:&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
