How to build a cloud-hosted accessibility testing Windows computer using Amazon WorkSpaces

As more and more services necessary to living life go online, it becomes imperative to ensure that everyone—regardless of ability or circumstance—can use the websites that host them.

Due to how software is typically built, accessibility testing usually isn’t performed thoroughly enough to ensure full compliance. To remedy this, we need to test our work using the same assistive technology the individuals who rely on it everyday use.

Compliance work is all about removing the obstacles that keep people from doing the things they want or need to do. In this post, I’m going to knock down one of the barriers that prevents many developers from doing thorough accessibility testing: not having access to a proper setup.

Too long; didn’t read

  1. Many developers don’t do thorough accessibility testing because it’s difficult to get a Windows machine to test on.
  2. Services like BrowserStack are insufficient because they do not let you install specialized accessibility software.
  3. Amazon allows you to create powerful virtual computers in the cloud that are easy to access, but difficult to initially set up.
  4. I have documented the steps you need to set up your very own virtual computer for accessibility testing.
  5. A gift to help you on your way!


A lot of modern web development is done on Mac laptops. Their Unix-based Operating System (OS) makes it easy to use many current development tools. It’s been enough of a success that Windows has offered a comparable experience in an effort to win people back.

However, in the world of accessibility development, Windows remains king. While macOS’ VoiceOver is a powerful and easy-to-use screen reader, the lion’s share of assistive software exists on Windows. This includes two of the most popular screen readers on the market—JAWS and NVDA—as well as aViewer, the Paciello Group’s specialized tool for exposing accessibility API information. Considering this, it makes sense to go where the attention is.


While many design and development operations allow their employees a greater degree of latitude for the programs they are allowed to install and run, they tend to purchase their hardware in bulk. Ordering a computer that runs Windows typically means extra expense and hassle to set up and maintain, meaning it is a request that is not commonly granted.

Unfortunately, another barrier to using Windows is convenience. Simply (and somewhat ironically) put, many designers and developers find the three ways of accessing Windows from a non-Windows device to be cumbersome.

1. A second computer

The most low tech of the approaches involves getting another computer that runs Windows and plunking it down next to your main computer.

In addition to the purchasing problem outlined earlier, there’s a very real hurdle to consider: developers are a notoriously lazy bunch. Moving between two computers is a physical and mental chore. It is also a hassle to make two different OSes talk to each other—even trivial tasks like moving and copying files becomes tedious.

2. Dual booting

Provided a computer has enough hard drive space and horsepower, it can have multiple OSes installed on it. This allows a person to shut down or suspend one operating system (say macOS) and launch another (Windows).

The problem with this technique is that it takes time to swap OSes, and sometimes the active OS cannot talk to the suspended ones. Coordinating information between sessions becomes a task not unlike conducting a conversation with a snail mail pen pal.

3. A local virtual machine

A virtual machine (VM) is a computer within a computer. They recreate the properties of a real computer via software that is programmed to act as hardware. With the proper setup, this allows a person to access one OS—including programs such as word processing, email, and web browsers—from a window in another OS in real-time. This includes nifty features such as a shared clipboard and being able to drag and drop files from the “real” desktop to the virtual one.

Is that the Inception horn I hear blasting in the background?

Simulating one computer within another puts significant strain on the host machine. It takes a lot of resources—only more powerful, higher-end computers are capable of doing it. Even for beefy setups, the strain can slow down both experiences, as it is effectively running two computers and all their programs in tandem.

Most design and development programs require a good deal of resources to operate, putting even further strain on a system running a VM. All too often this makes working on a computer running a Windows VM slow to the point where it is unviable.


At this point you may be wondering if services such as BrowserStack are sufficient enough to perform accessibility testing. In short, no. BrowserStack does not allow you to install software such as screen readers and specialized browser extensions. It also does not let you use OS-level features like Narrator and High Contrast Mode. Because of this you cannot perform your due diligence for a thorough audit.

So what’s to be done?

Amazon has an entire branch of their business dedicated to internet-related services, cleverly called Amazon Web Services (AWS). If you weren’t already aware, a concerning amount of the internet’s infrastructure uses their offerings—you might know it as the cloud.

Much like their virtual storefront that sells physical goods at volume, operating at a global scale enables Amazon to offer cheap access to remotely-hosted computing power. Their web services are split into a dizzying array of options, many of which use industry jargon that makes it difficult for the layperson to ascertain what it actually does.

One service they offer is called WorkSpaces. It allows you to create and host a VM using their servers. With proper configuration, an Amazon WorkSpace gives you a setup similar to a locally-hosted VM, but with one big difference: it consumes far fewer local system resources. When a VM is remotely hosted, it can have more processing power without slowing your local computer down. For the host computer, it is roughly as taxing as participating in a Google Hangout or watching Netflix.

This makes having access to a computer that runs Windows cheap and easy. So long as you have a fast, dedicated internet connection, you can use this magic portal to install and configure all the specialized Windows software you need, and run it at a usable speed!

Screenshot of NVDA Speech VIewer on the A11Y Project website.
Testing with NVDA in a Windows Virtual Machine while editing this post in Atom on my Mac. Top of the world, ma!

How to do it

AWS‘ user experience is hostile at the best of times, but in blundering through the process on my own I’ve managed to blaze a trail. Following is a step-by-step guide on how to set up your very own Windows 10 WorkSpace for accessibility testing.

Before you go

  • It’s best to play it safe and write down everything you configure in case you ever need a reference. While the layout in the following screenshots are liable to change, the kinds of information AWS will ask for probably will not.
  • AWS is notorious for gleefully charging you in full for exactly what you ask for, even if the cost jumps by a factor of a few zeros in a short amount of time. However, individual WorkSpaces don’t cost much to run. The total for getting mine installed with all the relevant browsers and software came out to a whopping 5¢. For peace of mind’s sake, you can set up a warning threshold if costs exceed a defined amount via the Budget feature of their Billing service. I have mine set to a conservative fifty dollars.
  • Some steps also require a little waiting for your request to be built, so be sure to have some time set aside before you begin. If you’d like some music to help pass the time I think this playlist could do the trick.

1. Sign In

If you don’t have an AWS account already, sign up for one. Use an email address you have reliable access to, as AWS will use it to send you the information necessary to launch your WorkSpace.

2. Set your location to US East

The second to last menu item in the header menu bar allows you to specify the location of your servers. At the time of writing this, WorkSpaces only works in a US East location.

Screenshot of the AWS header navigation. An arrow annotation points out that the location is set to 'N. Virginia.'

Using either the header menu bar or AWS services search bar, locate the WorkSpaces landing page. With a new account it might prompt you to start a setup wizard—when I used it, it didn’t work. Your results may vary.

Screenshot of the AWS services menu when toggled open. An arrow annotation points to the WorkSpaces navigation option located under the Desktop & App Streaming section. There are twelve other sections present: Compute, Storage, Database, Developer Tools, Management Tools, Security, Identity & Compliance, Analytics, Artificial Intelligence, Internet Of Things, Application Services, Messaging, Business Productivity, and Desktop & App Streaming. A search bar and group/alphabetical toggle button are also present.

AWS navigation has a nifty feature where you can pin a service landing page to the header menu for quick access. I recommend doing it for WorkSpaces.

Screenshot of the AWS header navigation with service pinning mode active. An extensive list of services is displayed, with WorkSpaces pinned to the top.

4. Choose a Directory type

Before you set up a VM, you’ll need to set up users to add to it. To do this, they need a Directory to live in. You can do this by creating an AWS Directory. They function much like Microsoft Active Directory. For our purposes, a Simple AD should be sufficient.

Screenshot of the AWS Active Directories type selection screen. Three options are present: Create a Microsoft Actvie Directory, Create a Simple Active Directory, or connect your existing Active Directory. An arrow annotation points to the Simple Active Directory option.

5. Set up your Directory, review, and save

You will need to provide information for two sections to get a Directory going: Directory Details and VPC Details. Again, it is probably in your best interest to write the information you provide for these fields elsewhere—I store mine in a cloud-synced secure note.

The Directory Details information is fairly self-explanatory, and I trust that whatever is default in the VPC Details section is probably in my best interests, so I let it be.

Screenshot of the first step of the AWS Directory setup wizard, titled 'Enter Directory details'. There are two subsections, 'Directory Details' and 'VPC Details'. In the Directory Details subsection, six fields are present. The first field, 'Organization name', is a required field and set to 'AccessibilityTestVM'. The second field, 'Directory DNS', is a required field and set to ''. The third field 'NetBIOS name' is set to 'ATVM'. The fourth and fifth fields are 'Administrator password' and 'Confirm password'. Both are required and have been filled out. The sixth field is 'Description' and is left blank. Following these six fields is a radio selection grouping labeled 'Directory size'. The 'small' option has been selected. In the VPC details, two fields are present, 'VPC' and 'Subnets'. both are required, but have been auto-populated by AWS.

After submitting this form, be sure to take a moment and check the following review page and verify there are no pesky typos. It will take a few minutes for the Directory’s status to become Active once saved.

6. Register your Directory

Registering your directory tells AWS that you want it to be used for WorkSpaces. After checking the directory you set up (which questionably uses a filled blue square instead of a checkmark), select the “Register” option from the “Actions” drop-down menu.

Screenshot of the AWS Directories listing. The 'accessibilityTestingVM' directory has a Status of Active, and has been selected. It’s Registration status is set to 'No'. An arrow annotation points to the 'Register' option in the active Actions dropdown menu.

A modal prompt will ask you if you want to associate your Directory with Amazon WorkDocs, an AWS service that allows you to back up and sync documents much like how Dropbox does.

Screenshot of the AWS Directories listing displaying a Directory registration confirmation modal. The modal is set to enable Amazon WorkDocs.

While you will incur extra charges for storing and using this data, it can be useful if you want to share information between your VM and the host computer. Once you have made your choice, it will take a little bit of time for the registration request to be acknowledged.

7. Create a WorkSpace

With a new account there may be a wizard step here. If not, the questionably-named “Launch WorkSpaces” will begin the VM creation process.

Screenshot of the WorkSpaces subsection of the WorkSpaces section. A button labeled 'Launch Workspaces' is present underneath the page’s title. Below the button is a table, with seven columns and one row. The columns read 'WorkSpace ID', 'Username', 'Bundle', 'Volume Encryption', 'Organization Name', 'Running Mode', and 'Status'. The row has an obfuscated entry for WorkSpace ID, a username of 'firstnameLastname', a Bundle of 'Standard with Windows 10', volume Encryption set to 'Disabled', an Organization Name of 'accessibilityTestVM', a Running Mode of 'AutoStop', and a status of 'Stopped'.

8. Select a WorkSpace Directory

The first step in a 5 step wizard. The Directory in the drop-down in the Select a Directory section should default to the one you created in Step 5. If not, select it and proceed to the next step.

Screenshot of the first step of the AWS Launch Workspaces wizard, titled 'Select Directory'. An arrow annotation points to the 'accessibilityTestVM' directory that has been pre-selected in the Directory selection drop-down.

9. Create a User

Much as how your physical computer can support multiple users, an AWS Directory supports AWS users. In this case, the user will be you. Remember to supply an email address you can actively check!

Screenshot of the second step of the AWS Launch Workspaces wizard, titled 'Identify Users'. There are four fields present, 'Username', 'First Name', 'Last Name', and 'Email'. The 'Username' field has been filled out with the value 'firstnameLastname'. The 'First Name' field has been filled out with the value 'Firstname'. The 'Last Name' field has been filled out with the value 'Lastname'. The 'Email' field has been filled out with the value ''.

When submitting a user with the “Create Users” button, the “Username,” “First Name,” “Last Name,” and “Email” fields will clear, indicating a user has successfully been created. It’s a less-than-ideal experience.

10. Verify a user has been associated with a Directory

That disappearing user you created for yourself should show up in the WorkSpace portion of the page. Verify it is, and proceed to the next step.

Screenshot of the second step of the AWS Launch Workspaces wizard, titled 'Identify Users'. An arrow annotation points to the user set up in Step 9 being associated with the WorkSpace. The associatation table has three fields, 'Username', 'Name', and 'Email'. The 'Username' field has been filled out with the value 'accessibilityTestVM backslash firstnameLastname'. The 'Name' field has been filled out with the value 'Firstname Lastname'. The 'Email' field has been filled out with the value ''.

11. Select your bundle

Using the “radio button that looks like a checkbox” control, select the “Standard with Windows 10,” as it is free. If you want to incorporate Microsoft Office or build a more powerful computer, you’ll have to pay.

Screenshot of the third step of the AWS Launch Workspaces wizard, titled 'Select Bundles'. A table of possible Operating Systems—including Windows 7 and 10—and system configurations (CPU, memory, and storage), is present. Options to include bundled copies of Microsoft Office are also offered. The 'Standard with Windows 10' option has a note that reads, 'Free tier eligible' and has been selected.

After selection, the bundle should be associated with your Username in the “Assign WorkSpace Bundles” section. Double-check to verify, and proceed to the next step.

12. Configure your WorkSpace

You’ll want to enable AutoStop, which will automatically depower the VM if there hasn’t been any activity for a specified amount of time. If you’re as absent-minded as I am, this will save you from having to pay for the time you don’t use if you forget to disconnect after you’re done.

Screenshot of the fourth step of the AWS Launch Workspaces wizard, titled 'WorkSpaces Configuration'. The Running Mode option has been pre-selected to AutoStop, which configures the WorkSpace to be billed hourly. A dropdown is also present, allowing the user to specify the number of hours until AutoStop activates. It has been preset to 1 hour. The other option is labeled 'AlwaysOn' and configures the WorkSpace to be always active and use monthly billing.

Encryption will add additional protection—good to have if you are working with sensitive information. Tags will help you locate this WorkSpace by providing additional metadata, such as your department name.

13. Review and launch

Verify one last time that all the information looks accurate, then hit that “Launch WorkSpaces” button!

Screenshot of the fifth step of the AWS Launch Workspaces wizard, titled 'Review'. A table titled 'New Workspaces' is present, with six columns and one row. The columns are labeled 'Username', 'Bundle', 'AutoStop Time', 'Root Volume', 'User Volume', and 'Encryption Key'. The row’s content reads 'accessibilityTestVM' for the 'Username' column, 'Standard with Windows 10' for the 'Bundle' column, '1 hour' for the 'AutoStop Time' column, an unchecked checkbox for the 'Root Volume' column, an unchecked checkbox for the 'User Volume' column, and a disabled dropdown labeled 'alias forward slash AWS forward slash workspaces' for the 'Encryption key' column.

It will take you back to the WorkSpaces subsection with a message that it may take up to twenty minutes for your WorkSpace to be ready.

Screenshot of the WorkSpaces subsection of the WorkSpaces section. A notification message is present that reads, 'Your WorkSpaces are being launched. WorkSpaces may take up to 20 minutes to become available. Instructions will be sent to the user on how to connect to their WorkSpace. You can now assign desktop applications to your WorkSpaces users using Amazon WorkSpaces Application Manager (WAM).' Below the notification is the same table described in Step 7. The status of the WorkSpace now reads 'Starting'.

14. Check your email

When everything is ready, Amazon will send you an email with instructions on how to access your brand new WorkSpace. It includes a unique link to download a specially-prepared installer that will connect you to your VM, as well as a registration code to log in. You’ll want to save this information for later.

Screenshot of an email from Amazon Workspaces. The body of the email reads: 'Dear Amazon WorkSpaces User, Your administrator has created an Amazon WorkSpace for you. Follow the steps below to quickly get started with your WorkSpace: 1. Complete your user profile and download a WorkSpaces client using the following link: [link obfuscated] 2. Launch the client and enter the following registration code: [code obfuscated] 3. Login with your newly created password. Your username is firstnameLastname. You may download clients for additional devices at If you have any issues connecting to your WorkSpace, please contact your administrator. Sincerely, Amazon WorkSpaces'

15. Install your app

After your installer has downloaded, run it as you would any other app installer.

Screenshot of the last step in a standard macOS app installation wizard notifying the user that the installation was successful.

In the login screen, first, provide the code emailed to you in Step 14. Then provide the username you set in Step 9, then use the code for the password. Signing in might take a bit, but it’s worth the wait!

Side by side screenshots of the AWS login window demonstrating how the emailed registration code is used to access the login screen. The login screen is filled out with the 'firstnanmeLastname' username set up in Step 9, and the registration code is used in the password field.

16. Set up your VM

Much like as you would any other Windows computer, you can now install and run programs to your heart’s content!

Screenshot of AWS WorkSpaces running Windows 10 in a macOS application window. The default configuration is displayed: the desktop contains a Recycle Bin, as well as shortcuts to Mozilla Firefox, Amazon WorkSpaces, and Install AWS Services. The desktop wallpaper prominently displays a stylized treatment of the Windows logo.

If you are looking for some guidance on what kinds of things you should be installing, I maintain a list on GitHub.


In addition to the aforementioned cost and connection issues, there are a few other potential factors to be aware of:


Unless you’re willing to spend a lot of time reading through inscrutable, jargon-laden help forums, shell out for a consultant, or purchase access to Amazon’s specialized support tier, you’re effectively on your own. That means for everything surrounding actually using the WorkSpace VM, tread very carefully.

I’m not an expert in cloud-based software management by any means. The steps outlined in this post were figured out through trial and error, as well as harassing some friends who are smarter than me. Sorry, folks.


While you can set your location to US East, the further you physically are from that location the larger your latency will get. This translates to a reduction in responsiveness from the VM, so it becomes that much more important to possess a fast, dedicated internet connection. Hotel, airport, rural, and conference internet may not be sufficient.


Unfortunately, the catchphrase, “The seats are free, but you’ll only use the edge!” isn’t applicable here. The Windows 10 VM won’t allow you to install Microsoft Edge, instead providing a copy of Internet Explorer 11—I’m guessing this is for some obscure licensing reason.

Edge has some nice concessions for accessibility, but keep in mind that you should be testing with the browsers that best interface with screen reader technology first.

Bye-bye, excuses. Hello accessible web!

With a little upfront work, it is possible to overcome what was traditionally a non-trivial obstacle to obtaining a proper accessibility testing setup.

Seeing how this is an Advent calendar, here’s a parting gift to go along with this post: I will send ten people $10 to get started. Needs-based and scope of impact will be given highest priority—contact info is in the bio. If any like-minded companies would like to match this, even better!

Eric Bailey

About Eric Bailey

Eric is a Boston-based user experience designer who helps create straightforward solutions that address a person’s practical, physical, cognitive, and emotional needs using accessible, performant, device-agnostic technology. His website is

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>