<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">
	<channel>
		<title>Author at Infinum</title>
		<atom:link href="https://infinum.com/blog/author/dino-vinkovic/feed/" rel="self" type="application/rss+xml" />
		<link></link>
		<description>Building digital products</description>
		<lastBuildDate>Fri, 24 Apr 2026 14:02:14 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>

					<item>
				<image>
					<url>19265085https://infinum.com/uploads/2025/04/Playwright-blog-hero.webp</url>
				</image>
				<title>Automation Made Simple: Accessibility Testing with Playwright</title>
				<link>https://infinum.com/blog/accessibility-testing-automation-playwright/</link>
				<pubDate>Thu, 03 Apr 2025 11:43:46 +0000</pubDate>
				<dc:creator>Dino Vinković</dc:creator>
				<guid isPermaLink="false">https://infinum.com/?p=19265085</guid>
				<description>
					<![CDATA[<p>Learn how to speed up your accessibility checks using Playwright and axe-core, and simplify the path to building more inclusive digital products.</p>
<p>The post <a href="https://infinum.com/blog/accessibility-testing-automation-playwright/">Automation Made Simple: Accessibility Testing with Playwright</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-219"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-92">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-95"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-93">
	<p	class='typography typography--size-36-text js-typography block-paragraph__paragraph'
	data-id='es-94'
	>
	<strong>With automation tools like Playwright, testing web accessibility doesn’t have to be tedious or time-consuming. Learn how to speed up your accessibility checks using Playwright and axe-core, and simplify the path to building more inclusive digital products.</strong></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-98"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-96">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-97'
	>
	Ensuring your web page is accessible to all users is becoming increasingly important for businesses. With <a href="https://infinum.com/blog/european-accessibility-act/" target="_blank" rel="noreferrer noopener">regulatory pressures mounting</a> and public awareness rising, brands and companies are looking to optimize their digital products to meet accessibility standards.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-101"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-99">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-100'
	>
	However, <a href="https://infinum.com/blog/how-to-get-started-with-accessibility-testing/" target="_blank" rel="noreferrer noopener">testing a web page for accessibility</a> is a nuanced task, and certain aspects of it can be particularly time-consuming. Fortunately, there are a number of tools available to help testers check web accessibility thoroughly and efficiently, especially by leveraging test automation.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-104"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-102">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-103'
	>
	Not every team has the resources or bandwidth to build custom tools, but existing solutions can already achieve a great deal. In this article, we’ll explain how to conduct accessibility testing using Playwright, a very popular tool in the testing community. With just a few simple adjustments, Playwright can significantly speed up and enhance the efficiency of your testing process.&nbsp;</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-107"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-105">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-106'
	>
	<strong>Why digital accessibility is important</strong></h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-110"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-108">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-109'
	>
	A significant portion of the population faces challenges when accessing digital resources due to physical, cognitive, and sensory impairments. According to the World Health Organization, <a href="https://www.who.int/news-room/fact-sheets/detail/disability-and-health" target="_blank" rel="noreferrer noopener">approximately 16% of the global population experiences significant disabilities</a>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-113"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-111">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-112'
	>
	If your app or website isn’t built with accessibility in mind, you risk excluding a considerable number of users – not only those with permanent disabilities but also individuals experiencing temporary or situational impairments, such as a broken arm or navigating a digital product in a noisy environment. Accessibility standards ultimately improve the user experience for everyone.&nbsp;</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-116"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-114">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-115'
	>
	Beyond ethical considerations, accessibility is increasingly becoming a legal necessity. In the United States, the <a href="https://www.ada.gov/" target="_blank" rel="noreferrer noopener">Americans with Disabilities Act</a> mandates that public accommodations, including websites, must be accessible to individuals with disabilities. Similarly, the European Union’s <a href="https://commission.europa.eu/strategy-and-policy/policies/justice-and-fundamental-rights/disability/union-equality-strategy-rights-persons-disabilities-2021-2030/european-accessibility-act_en" target="_blank" rel="noreferrer noopener">European Accessibility Act</a> and the <a href="https://digital-strategy.ec.europa.eu/en/policies/web-accessibility-directive-standards-and-harmonisation" target="_blank" rel="noreferrer noopener">Web Accessibility Directive</a> establish clear guidelines for digital accessibility. Non-compliance can lead to significant legal consequences, including lawsuits, fines, and reputational harm.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-119"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-117">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-118'
	>
	<strong>What is accessibility testing?</strong></h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-122"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-120">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-121'
	>
	Accessibility testing is the process of identifying barriers that may prevent users from fully interacting with a website or service. It ensures that people with disabilities can access and navigate the content just as easily as anyone else.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-125"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-123">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-124'
	>
	The testing is usually conducted through a combination of automated and manual accessibility checks. It evaluates several aspects, including visual design, interactive elements, content structure, navigation, and multimedia components.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-128"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-126">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-127'
	>
	Can accessibility testing be automated?</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-131"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-129">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-130'
	>
	Accessibility testing can be automated to a certain extent. Automation tools can help us identify many common accessibility issues and provide reports that highlight areas needing improvement. These tools can check for issues like missing alt text, poor color contrast, improper heading structures, and missing ARIA attributes – areas frequently overlooked during development.&nbsp;</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-134"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-132">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-133'
	>
	However, automated tools are limited to verifying basic accessibility compliance and cannot evaluate how intuitive or user-friendly an interface is. Human testing remains vital for uncovering issues such as confusing navigation, unintuitive layouts, or frustrating interactions, which are all essential if we want to ensure a truly inclusive user experience.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-137"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-135">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-136'
	>
	Automating accessibility testing with Plawright and axe-core</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-140"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-138">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-139'
	>
	<a href="https://playwright.dev/" target="_blank" rel="noreferrer noopener">Playwright</a> is an excellent starting point for teams interested in accessibility test automation. It is a widely used, open-source framework known for its ease of setup and strong community support. More importantly, it offers integration with axe-core, a powerful accessibility testing library created by Deque Systems. <a href="https://github.com/dequelabs/axe-core-npm" target="_blank" rel="noreferrer noopener">Axe-core</a> helps testers efficiently detect violations of accessibility standards, such as the Web Content Accessibility Guidelines (WCAG), and provides insights on fixing any issues found.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-143"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-141">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-142'
	>
	Playwright and axe-core are a powerful combo – one that helps testers streamline accessibility checks, improving both efficiency and accuracy in their testing processes.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-146"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-144">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-145'
	>
	<strong>Initial setup</strong></h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-149"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-147">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-148'
	>
	We’ll start by installing Playwright using <code>npm</code>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-151"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">npm</span><span class="token"> </span><span class="token" style="color: #005cc5;">init</span><span class="token"> </span><span class="token" style="color: #005cc5;">playwright</span><span class="token" style="color: #d73a49;">@</span><span class="token" style="color: #005cc5;">latest</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-154"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-152">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-153'
	>
	You’ll be prompted to answer a few setup questions – feel free to go with the default options. TypeScript should be selected by default, but double-check that it is.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-157"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-155">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-156'
	>
	For full installation details, check the <a href="https://playwright.dev/docs/intro" target="_blank" rel="noreferrer noopener">official Playwright documentation</a>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-160"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-158">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-159'
	>
	Next, add the additional packages needed for this implementation:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-162"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">npm</span><span class="token"> </span><span class="token" style="color: #005cc5;">install</span><span class="token"> </span><span class="token" style="color: #d73a49;">@</span><span class="token" style="color: #005cc5;">axe</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #005cc5;">core</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">playwright</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">npm</span><span class="token"> </span><span class="token" style="color: #005cc5;">install</span><span class="token"> </span><span class="token" style="color: #005cc5;">axe</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #005cc5;">html</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #005cc5;">reporter</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-165"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-163">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-164'
	>
	Then, import the necessary modules in your test file:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-167"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">test</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">expect</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #005cc5;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">@playwright/test</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">import</span><span class="token"> </span><span class="token" style="color: #005cc5;">AxeBuilder</span><span class="token"> </span><span class="token" style="color: #005cc5;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">@axe-core/playwright</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">createHtmlReport</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #005cc5;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">axe-html-reporter</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-170"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-168">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-169'
	>
	<strong>Page inspection</strong></h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-173"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-171">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-172'
	>
	Now, let&#8217;s walk through a practical example using <a href="https://todomvc.com/" target="_blank" rel="noreferrer noopener">todoMVC</a>. To inspect a page for accessibility issues, we’ll use<strong> </strong><code>AxeBuilder</code> from the <code>axe-core/playwright package</code>.  The command <code>new AxeBuilder({ page }).analyze()</code> tells Axe to scan the current page and identify any violations according to established standards, and the results are stored in the <code>accessibilityScanResults</code> variable.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-175"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">accessibilityScanResults</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">await</span><span class="token"> </span><span class="token" style="color: #d73a49;">new</span><span class="token"> </span><span class="token" style="color: #005cc5;">AxeBuilder</span><span class="token">(</span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">page</span><span class="token"> </span><span class="token">}</span><span class="token">)</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">analyze</span><span class="token">(</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-178"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-176">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-177'
	>
	To focus the analysis on specific standards, you can refine the accessibility scan by using the <code>withTags()</code> method. For example, if you’re targeting the most common WCAG compliance levels (WCAG 2.0 and WCAG 2.1, levels A and AA), you can do so as follows:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-180"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">accessibilityScanResults</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">await</span><span class="token"> </span><span class="token" style="color: #d73a49;">new</span><span class="token"> </span><span class="token" style="color: #005cc5;">AxeBuilder</span><span class="token">(</span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">page</span><span class="token"> </span><span class="token">}</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">       </span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">withTags</span><span class="token">([&#039;</span><span class="token" style="color: #6f42c1;">wcag</span><span class="token" style="color: #032f62;">2a</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">wcag2aa</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">wcag21a</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">wcag21aa</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">]</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">       </span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">analyze</span><span class="token">();
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-183"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-181">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-182'
	>
	<strong>Assertion</strong></h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-186"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-184">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-185'
	>
	After performing the scan, we need to verify whether any accessibility violations have occurred. You can achieve this by asserting that the violations array within the results is empty. If any violations are found, your test will fail, prompting you to address the identified issues:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-188"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #6f42c1;">expect</span><span class="token">(</span><span class="token" style="color: #005cc5;">accessibilityScanResults</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">violations</span><span class="token">)</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">toEqual</span><span class="token">(</span><span class="token">[</span><span class="token">]</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-191"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-189">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-190'
	>
	<strong>Creating the report</strong></h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-194"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-192">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-193'
	>
	To generate a readable summary of the accessibility scan, we’ll use the <code>createHtmlReport</code><strong> </strong>function from<strong> </strong>the<strong> </strong><code>axe-html-reporter</code> package. This function takes in the scan results  we previously stored in <code>accessibilityScanResults</code>. We can also use options to configure the report name and output directory.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-196"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-javascript github-light" data-language="javascript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">reportHTML</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">createHtmlReport</span><span class="token">(</span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">results</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #24292e;">accessibilityScanResults</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">options</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">outputDir</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #24292e;">reportDir</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">reportFileName</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #24292e;">reportName</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-199"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-197">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-198'
	>
	Note that <code>createHtmlReport</code> returns an HTML string – it doesn’t create a file by itself. To write the report to disk, we’ll use Node’s <code>fs</code> module:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-201"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">if</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #d73a49;">!</span><span class="token" style="color: #005cc5;">fs</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">existsSync</span><span class="token">(</span><span class="token" style="color: #032f62;">`</span><span class="token" style="color: #032f62;">${</span><span class="token" style="color: #24292e;">reportDir</span><span class="token" style="color: #032f62;">}</span><span class="token" style="color: #032f62;">${</span><span class="token" style="color: #24292e;">reportName</span><span class="token" style="color: #032f62;">}</span><span class="token" style="color: #032f62;">`</span><span class="token">)</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">       fs</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">mkdirSync</span><span class="token">(`${</span><span class="token" style="color: #6f42c1;">rep</span><span class="token" style="color: #24292e;">ortD</span><span class="token" style="color: #032f62;">ir}</span><span class="token" style="color: #24292e;">${reportNa</span><span class="token" style="color: #032f62;">me}</span><span class="token" style="color: #032f62;">`</span><span class="token">,</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">recursive</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">true</span><span class="token"> </span><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">     </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">     fs</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">writeFileSync</span><span class="token">(`${</span><span class="token" style="color: #6f42c1;">r</span><span class="token" style="color: #24292e;">eportD</span><span class="token" style="color: #032f62;">ir}</span><span class="token" style="color: #24292e;">${reportNa</span><span class="token" style="color: #032f62;">me}</span><span class="token" style="color: #032f62;">`</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">reportHTML</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-204"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-202">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-203'
	>
	<strong>Parametrizing the test</strong></h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-207"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-205">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-206'
	>
	Testing a single page is a good start, but broader coverage requires more. Let’s modify our test to run against multiple pages by creating an array of objects containing <code>URL/name</code> pairs. The <code>URL</code> field tells Playwright which page to check, and the <code>name</code> field isn’t required, but helps us generate more descriptive report names:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-209"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">urlsToCheck</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">[</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">url</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">https://todomvc.com/examples/react/dist/</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">name</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">reactPage</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">url</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">https://todomvc.com/examples/angular/dist/browser/#/all</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">name</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">angularPage</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">url</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">https://todomvc.com/examples/javascript-es6/dist/</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">name</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">jsPage</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">]</span><span class="token">;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-212"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-210">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-211'
	>
	Next, we’ll loop through each URL in our test using <code>forEach</code>:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-214"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">test</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">describe</span><span class="token">(</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">Accessibility</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token"> </span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;"> urlsToCheck</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">forEach</span><span class="token">(</span><span class="token">(</span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">url</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">name</span><span class="token"> </span><span class="token">}</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">   test</span><span class="token">(`</span><span class="token" style="color: #6f42c1;">s</span><span class="token" style="color: #032f62;">hould check: </span><span class="token" style="color: #24292e;">${u</span><span class="token" style="color: #032f62;">rl}</span><span class="token" style="color: #032f62;">`</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #6f42c1;">async</span><span class="token"> ({</span><span class="token"> </span><span class="token" style="color: #005cc5;">page</span><span class="token"> </span><span class="token">}</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">testInfo</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">…</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-217"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-215">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-216'
	>
	This setup generates a separate, clearly labeled report for each tested page.</p></div>	</div>
</div>
</div>		</div>
	</div>

<div
	class="wrapper"
	data-id="es-222"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-220"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-221">
	<picture class="image__picture block-media__image-picture">
								
			<source
				srcset=https://infinum.com/uploads/2025/04/a11y-playwright-in-article-1-1400x1246.webp				media='(max-width: 699px)'
				type=image/webp								height="1246"
												width="1400"
				 />
												<img
					src="https://infinum.com/uploads/2025/04/a11y-playwright-in-article-1.webp"
					class="image__img block-media__image-img"
					alt=""
										height="1280"
															width="1438"
										loading="lazy"
					 />
					</picture>

	</figure></div></div>		</div>
	</div>

<div
	class="wrapper"
	data-id="es-245"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-226">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-225"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-223">
	</div>	</div>
</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-229"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-227">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-228'
	>
	The <strong>full example</strong></h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-232"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-230">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-231'
	>
	Here&#8217;s how the complete test script comes together. This is a simple example that shows how easy it is to get started with accessibility test automation using Playwright and axe-core:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-234"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">test</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">expect</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #005cc5;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">@playwright/test</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">import</span><span class="token"> </span><span class="token" style="color: #005cc5;">AxeBuilder</span><span class="token"> </span><span class="token" style="color: #005cc5;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">@axe-core/playwright</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">createHtmlReport</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #005cc5;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">axe-html-reporter</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">import</span><span class="token"> </span><span class="token" style="color: #005cc5;">fs</span><span class="token"> </span><span class="token" style="color: #005cc5;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">fs</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">reportDir</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">reports/a11y/</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">urlsToCheck</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">[</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">url</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">https://todomvc.com/examples/react/dist/</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">name</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">reactPage</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">url</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">https://todomvc.com/examples/angular/dist/browser/#/all</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">name</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">angularPage</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">url</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">https://todomvc.com/examples/javascript-es6/dist/</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">name</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">jsPage</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">]</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">test</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">describe</span><span class="token">(</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">Accessibility</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token"> </span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #005cc5;">urlsToCheck</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">forEach</span><span class="token">(</span><span class="token">(</span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">url</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">name</span><span class="token"> </span><span class="token">}</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">test</span><span class="token">(</span><span class="token" style="color: #032f62;">`</span><span class="token" style="color: #032f62;">should check: </span><span class="token" style="color: #032f62;">${</span><span class="token" style="color: #24292e;">url</span><span class="token" style="color: #032f62;">}</span><span class="token" style="color: #032f62;">`</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #6f42c1;">async</span><span class="token"> </span><span class="token">(</span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">page</span><span class="token"> </span><span class="token">}</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">testInfo</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">reportName</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #032f62;">`</span><span class="token" style="color: #032f62;">${</span><span class="token" style="color: #24292e;">name</span><span class="token" style="color: #032f62;">}</span><span class="token" style="color: #032f62;">.html</span><span class="token" style="color: #032f62;">`</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #005cc5;">await</span><span class="token"> </span><span class="token" style="color: #005cc5;">page</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">goto</span><span class="token">(</span><span class="token" style="color: #005cc5;">url</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> Scan the page and save results to accessibilityScanResults</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">accessibilityScanResults</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">await</span><span class="token"> </span><span class="token" style="color: #d73a49;">new</span><span class="token"> </span><span class="token" style="color: #005cc5;">AxeBuilder</span><span class="token">(</span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">page</span><span class="token"> </span><span class="token">}</span><span class="token">)</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">analyze</span><span class="token">(</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> Create HTML report</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">reportHTML</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">createHtmlReport</span><span class="token">(</span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #6f42c1;">results</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">accessibilityScanResults</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #6f42c1;">options</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">                    </span><span class="token" style="color: #6f42c1;">outputDir</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">reportDir</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">                    </span><span class="token" style="color: #6f42c1;">reportFileName</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">reportName</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> Save HTML report to a file</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #d73a49;">if</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #d73a49;">!</span><span class="token" style="color: #005cc5;">fs</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">existsSync</span><span class="token">(</span><span class="token" style="color: #032f62;">`</span><span class="token" style="color: #032f62;">${</span><span class="token" style="color: #24292e;">reportDir</span><span class="token" style="color: #032f62;">}</span><span class="token" style="color: #032f62;">${</span><span class="token" style="color: #24292e;">reportName</span><span class="token" style="color: #032f62;">}</span><span class="token" style="color: #032f62;">`</span><span class="token">)</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #005cc5;">fs</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">mkdirSync</span><span class="token">(</span><span class="token" style="color: #032f62;">`</span><span class="token" style="color: #032f62;">${</span><span class="token" style="color: #24292e;">reportDir</span><span class="token" style="color: #032f62;">}</span><span class="token" style="color: #032f62;">${</span><span class="token" style="color: #24292e;">reportName</span><span class="token" style="color: #032f62;">}</span><span class="token" style="color: #032f62;">`</span><span class="token">,</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">recursive</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">true</span><span class="token"> </span><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #005cc5;">fs</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">writeFileSync</span><span class="token">(</span><span class="token" style="color: #032f62;">`</span><span class="token" style="color: #032f62;">${</span><span class="token" style="color: #24292e;">reportDir</span><span class="token" style="color: #032f62;">}</span><span class="token" style="color: #032f62;">${</span><span class="token" style="color: #24292e;">reportName</span><span class="token" style="color: #032f62;">}</span><span class="token" style="color: #032f62;">`</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">reportHTML</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> Assert no violations detected</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #6f42c1;">expect</span><span class="token">(</span><span class="token" style="color: #005cc5;">accessibilityScanResults</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">violations</span><span class="token">)</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">toEqual</span><span class="token">(</span><span class="token">[</span><span class="token">]</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-237"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-235">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-236'
	>
	<strong>Report</strong></h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-240"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-238">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-239'
	>
	The reports generated by axe-core are clear, detailed, and practical. They highlight each accessibility violation, categorize its severity, and point to the relevant WCAG guideline. For every issue, you’ll see the specific DOM element affected and get actionable suggestions on how to fix it.&nbsp;</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-243"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-241">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-242'
	>
	What’s especially helpful is that each issue comes with documentation links, allowing testers and developers to learn more about the problem and why it matters – making it easier to address issues effectively and build more inclusive products.</p></div>	</div>
</div>
</div>		</div>
	</div>

<div
	class="wrapper"
	data-id="es-248"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-246"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-247">
	<picture class="image__picture block-media__image-picture">
								
			<source
				srcset=https://infinum.com/uploads/2025/04/a11y-playwright-in-article-2-1400x904.webp				media='(max-width: 699px)'
				type=image/webp								height="904"
												width="1400"
				 />
												<img
					src="https://infinum.com/uploads/2025/04/a11y-playwright-in-article-2.webp"
					class="image__img block-media__image-img"
					alt=""
										height="1280"
															width="1982"
										loading="lazy"
					 />
					</picture>

	</figure></div></div>		</div>
	</div>

<div
	class="wrapper"
	data-id="es-266"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-252">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-251"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-249">
	</div>	</div>
</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-255"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-253">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-254'
	>
	<strong>Make accessibility testing work for you</strong></h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-258"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-256">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-257'
	>
	Digital accessibility is no longer a nice-to-have – it’s becoming increasingly relevant for businesses looking to provide equal access for all users and reduce legal and reputational risks. However, evaluating accessibility manually can be time-consuming and prone to human error. Test automation can be a great asset for testers, and tools like Playwright and axe-core make it easy to catch many common accessibility issues early in the development process. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-261"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-259">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-260'
	>
	As our example shows, setting up automated tests doesn’t require complex custom solutions – just a few lines of code and the right tools. Still, we need to bear in mind that automation isn’t a silver bullet. Automated tests are powerful allies, not replacements for human judgment. Experienced testers use these tools to boost efficiency and consistency, while still applying manual testing to assess usability, context, and the overall user experience.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-264"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-262">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-263'
	>
	Ultimately, the best approach combines speed with empathy – automating what you can and thoughtfully testing what you can’t.</p></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/accessibility-testing-automation-playwright/">Automation Made Simple: Accessibility Testing with Playwright</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
					<item>
				<image>
					<url>7947https://infinum.com/uploads/2021/09/faq-software-testing-0.webp</url>
				</image>
				<title>FAQ about QA</title>
				<link>https://infinum.com/blog/faq-software-testing/</link>
				<pubDate>Fri, 10 Sep 2021 14:30:00 +0000</pubDate>
				<dc:creator>Dino Vinković</dc:creator>
				<guid isPermaLink="false">https://infinum.com/the-capsized-eight/faq-software-testing/</guid>
				<description>
					<![CDATA[<p>Everything you always wanted to know about the role of a software tester.</p>
<p>The post <a href="https://infinum.com/blog/faq-software-testing/">FAQ about QA</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-374"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-267">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-270"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-268">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-269'
	>
	People who have never worked in software testing might lead you to believe that a software tester just does the same thing over and over again until they find a bug… or lose their sanity, whichever comes first. If you are interested in Software Testing, otherwise called Quality Assurance, leave out the random articles and Reddit threads and read on to see what the job really entails.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-273"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-271">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-272'
	>
	Stumbling upon the wrong kind of information can be misleading and even put you off. First of all, isn’t the definition of insanity <em>“doing the same thing over and over again, but expecting different results”</em>? Well, we don’t want testers to go insane, and we do want them to do the job right.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-276"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-274">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-275'
	>
	There is actually a lot of variety in software testing. Working in the field requires a broad range of skills and at the same time opens the door to acquiring new ones.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-279"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-277">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-278'
	>
	What education do you need to become a tester?</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-282"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-280">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-281'
	>
	An interesting thing about QA is that in most cases it doesn’t matter which school you attended or what kind of degree you hold. In fact, you could be a geography professor and bring in a particular skill set that would make a great addition to the team. Of course, if your end goal is to get a job that requires certain engineering skills, then you will probably need a degree in engineering or relevant experience.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-285"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-283">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-284'
	>
	There are, however, some certifications available. You might even hear that getting one or more of them will help you get noticed. From my experience, there is more than enough material online to prepare you for the interview and even your first months on the job. For example, this <a href="https://infinum.com/handbook/books/qa/basics/what-is-your-job-all-about" target="_blank" rel="noreferrer noopener">handy source of information</a>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-288"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-286">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-287'
	>
	What to look for in a job?</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-291"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-289">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-290'
	>
	As new technologies keep popping up, we have to continuously build up our knowledge. That’s why it is important to look for a company that continually invests in the education of its employees. It can be especially helpful when you are just starting out and need some guidance.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-294"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-292">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-293'
	>
	Coming to a new workplace, there is a lot of information to digest. In that situation, having a mentor is a huge advantage as they can introduce you to the company culture, help you get started and explain the specifics of the project(s) you’ll be working on.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-297"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-295">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-296'
	>
	Both these factors fit in nicely with a good work-life balance. You might feel that you have to learn 24/7 to keep up with everything, so it is important to look for a company that is mindful of your health and well-being.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-300"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-298">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-299'
	>
	When to start applying for jobs?</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-303"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-301">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-302'
	>
	The answer is simple – right now. There’s no point in waiting. Even if you don’t land a job immediately, going to interviews is still a great experience. It gives you an insight into the skills and knowledge the employers are looking for. That will give you a better idea of what to focus on.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-306"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-304">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-305'
	>
	With all the information out there, you might be inclined to think that you have to know everything before you even start applying for jobs. Being prepared for an interview is definitely a plus, but don’t waste your time going through a multitude of tutorials trying to learn everything. Projects can vary substantially when it comes to technology and the tools being used. It might turn out that you won’t need to use most of what you learned, at least for a while.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-309"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-307">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-308'
	>
	As with most jobs, you learn best by doing. With time you will become better at dissecting what to work on, depending on your interests or the skills you want to acquire.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-312"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-310">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-311'
	>
	What’s with all those titles?</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-315"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-313">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-314'
	>
	Looking for a software testing position, you will come across a myriad of titles, such as Software Tester, Quality Assurance, Quality Assurance Engineer, Manual QA, Software Development Engineer in Test, and so on. It can be confusing, especially when you run into two job openings with the exact same titles but quite different job descriptions.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-318"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-316">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-317'
	>
	Don’t let fancy titles fool you or scare you off. Read the job posting carefully or better yet, email the employer or recruiter and ask what you want to know.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-321"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-319">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-320'
	>
	What exactly a software tester does could vary from company to company. It might be because of different technologies the company is using, a specific field of work, or there might be various QA roles present.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-324"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-322">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-323'
	>
	Software testers that do manual tests mimic the way a regular user would use an app. Of course, they go into much more detail and really try hard to catch all the defects you don’t want users to see, from typos to app crashes.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-327"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-325">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-326'
	>
	Testers who work on automation usually have slightly different job titles, something on the lines of Test Automation Engineer. Those types of testers focus more on using their coding skills to write automated tests.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-330"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-328">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-329'
	>
	It’s more likely that you will be testing apps both manually and with the help of certain tools that don’t necessarily require coding skills. The tools help as they speed up your performance but they can’t tell you how an app <em>feels</em> overall, it’s something you can only learn with manual testing.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-333"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-331">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-332'
	>
	So, you landed your first QA job, what’s next?</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-336"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-334">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-335'
	>
	There are so many things to learn in the beginning that it might all seem overwhelming. Don’t worry, a beginner isn’t expected to know everything before their first day. However, there are a couple of essentials you really should be aware of.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-339"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-337">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-338'
	>
	One of the most important skills is writing a good bug report. The person reading the report should be able to understand it without having to figure out what you were trying to say. Also, you want to be able to understand the report yourself once the issue is fixed. This is especially important if a bug is fixed after a longer period of time and you forget some of the details. This blog post is a <a href="https://infinum.com/blog/how-not-to-suck-at-writing-bug-reports/" target="_blank" rel="noreferrer noopener">good resource for writing a good bug report</a>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-342"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-340">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-341'
	>
	Writing good, reusable test cases is another important skill to have. If you’ve gone on a googling quest to see what a test case looks like, you’ve probably come across different versions. The reason is that every team adapts their test case structure to their needs. The point is to simply write solid test cases that you can use over and over again. Writing tests that you’ll use only once or keep updating them day in and day out is a waste of time you could have spent actually testing.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-345"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-343">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-344'
	>
	You should probably also have an idea about what testing is and how it is done. There are dozens and dozens of testing methods and techniques you should know and use in your job. For starters, take a look at our <a href="https://infinum.com/handbook/books/qa" target="_blank" rel="noreferrer noopener">QA handbook</a> to find out what and how to test.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-348"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-346">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-347'
	>
	How to improve your skills further?</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-351"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-349">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-350'
	>
	With new developments constantly coming up, you should always strive to be updated. Reading <a href="https://infinum.com/blog/" target="_blank" rel="noreferrer noopener">blogs</a> is a good way to start. You could also invest some time to research new tools and new technologies. Maybe you’ll discover a tool to help you test more efficiently.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-354"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-352">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-353'
	>
	Investing time in learning a programming language can be beneficial for multiple reasons. You’ll understand developers better, especially when they use a lot of technical jargon. With basic coding skills, you’ll be able to use the tools that require some coding. Maybe you’ll even find out that you enjoy programming as much as testing and decide to move on towards test automation.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-357"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-355">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-356'
	>
	If you are more of a creative type, take a design course. That way you’ll learn<br>how designers do what they do and get a better understanding of user experience.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-360"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-358">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-359'
	>
	Learning about other aspects of software development will help you understand the development process better and make you a better tester overall.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-363"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-361">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-362'
	>
	It’s both the journey and the destination</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-366"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-364">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-365'
	>
	Hopefully, you now have a slightly better idea of what software testing is about and what awaits you at the beginning of your QA journey.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-369"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-367">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-368'
	>
	It is a very versatile field and no, you won’t just be doing the same thing over and over again. You will, however, use different testing methods and techniques with a specific goal in mind. And yes, you will use a lot of different tools over time.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-372"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-370">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-371'
	>
	If you ever decide to shake things up, you’ll have a solid background and enough mojo to move onto development, design, or project management. The possibilities are endless.</p></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/faq-software-testing/">FAQ about QA</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
		
	</channel>
</rss>