<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Valeria</title>
    <description>The latest articles on DEV Community by Valeria (@valeria).</description>
    <link>https://dev.to/valeria</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F195521%2Fd8fd9d1b-d145-421d-bd07-9ddb398c49a9.jpg</url>
      <title>DEV Community: Valeria</title>
      <link>https://dev.to/valeria</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/valeria"/>
    <language>en</language>
    <item>
      <title>AI-Generated Test Cases Are Mostly Useless. Start Testing Faster</title>
      <dc:creator>Valeria</dc:creator>
      <pubDate>Sun, 19 Oct 2025 03:39:28 +0000</pubDate>
      <link>https://dev.to/valeria/ai-generated-test-cases-are-bloat-start-testing-faster-21m2</link>
      <guid>https://dev.to/valeria/ai-generated-test-cases-are-bloat-start-testing-faster-21m2</guid>
      <description>&lt;p&gt;Generative "test case dumps" look impressive in a demo: one click and you get dozens of steps and scenarios. In reality, they slow teams down and hide risk. Here’s why that approach wastes time - and what actually moves testing forward.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why generative test cases burn time
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Coverage illusion&lt;/strong&gt;: Long lists feel safe but aren’t aligned to your product’s real risk profile. Teams spend hours triaging noise while critical paths wait.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Volume over signal&lt;/strong&gt;: Sprint kickoff drifts because people debate wording and duplicates. Testing isn’t a page-count contest. It’s about the few checks that prevent the expensive failures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context drift&lt;/strong&gt;: Requirements change mid-sprint. Generic outputs don’t reflect your ticket’s constraints, integrations, edge conditions or release pressure. You end up maintaining fiction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ownership cost&lt;/strong&gt;: Every autogenerated case still needs editing, deduping, prioritization, IDs, links and ongoing maintenance. Any "time saved" evaporates by the first iteration.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually helps teams ship
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fast kickoff inside Jira&lt;/strong&gt;: create a focused checklist directly where the work lives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Risk-first prioritization&lt;/strong&gt;: know what to test now vs. later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear Clarify questions&lt;/strong&gt;: surface gaps that would block QA before they block QA.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Immediate scope signal&lt;/strong&gt;: a clean count of items by priority so leads can size effort quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The fix: AI QA Checklist for Jira
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why it works&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Focus:&lt;/strong&gt; priorities are explicit, so kickoff happens immediately.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Speed to value:&lt;/strong&gt; install to first useful output takes minutes, not meetings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Honest scope:&lt;/strong&gt; item counts per priority provide a quick, defensible estimate of testing effort.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consistency:&lt;/strong&gt; checklists look and read the same across squads and sprints.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Open an issue.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnj15pbn47wl0cswrd2bh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnj15pbn47wl0cswrd2bh.png" alt=" " width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Generate&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F51q3m5brts6um0u3hp8w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F51q3m5brts6um0u3hp8w.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9f1hidnu3eqfurv42yu0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9f1hidnu3eqfurv42yu0.png" alt=" " width="800" height="170"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Get grouped items: Summery, Key testing areas, Critical / High / Medium plus a Clarify block.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Save to comment so the team sees the plan instantly or save as txt file for further editing and sharing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F38eoawzwilmcje7w8zo8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F38eoawzwilmcje7w8zo8.png" alt=" " width="800" height="471"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwkednpd4kg1779mcq2k3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwkednpd4kg1779mcq2k3.png" alt=" " width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it works
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Focus:&lt;/strong&gt; priorities are explicit, so kickoff happens immediately.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Speed to value:&lt;/strong&gt; install to first useful output takes minutes, not meetings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Honest scope:&lt;/strong&gt; item counts per priority provide a quick, defensible estimate of testing effort.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consistency:&lt;/strong&gt; checklists look and read the same across squads and sprints.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sprint outcomes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Testing starts fast, not after a planning saga.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Transparent workload by priority tier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fewer “what did we miss?” moments before code freeze.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleaner regression seeds built from real issues, not fantasy cases.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it now
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Install from Atlassian Marketplace: &lt;a href="https://marketplace.atlassian.com/apps/3048597854/qa-checklist-ai?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;QA Checklist AI&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open an issue -&amp;gt; Generate -&amp;gt; Save to comment&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the Critical and High items to start testing today, and size the rest for later.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Stop shipping impressive-looking case dumps. Start testing fast, show real scope, and land critical coverage early. The plugin makes that the default.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0bcve5yjs8b48euorlv2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0bcve5yjs8b48euorlv2.png" alt=" " width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>jira</category>
      <category>tooling</category>
    </item>
    <item>
      <title>How to automate file upload testing with Autoit and Protractor</title>
      <dc:creator>Valeria</dc:creator>
      <pubDate>Tue, 27 Aug 2019 16:05:45 +0000</pubDate>
      <link>https://dev.to/valeria/how-to-automate-file-upload-testing-with-autoit-and-protractor-d94</link>
      <guid>https://dev.to/valeria/how-to-automate-file-upload-testing-with-autoit-and-protractor-d94</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;In the most of web applications file uploading is not only web-based feature and requires system window activity like &lt;br&gt;
opening of system dialog "Open"  where you choose file(s) to upload them to web site. This window based activity is not handled by test automation frameworks and instruments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it possible to handle Windows system dialog in my automated tests of web application?&lt;/strong&gt;&lt;br&gt;
Yes. It is possible using compiled Autoit scripts.&lt;/p&gt;

&lt;p&gt;In the article we will  try to automate interaction with Windows upload dialog and will learn: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is Autoit&lt;/li&gt;
&lt;li&gt;How to use Autoit&lt;/li&gt;
&lt;li&gt;How to write and compile Autoit script&lt;/li&gt;
&lt;li&gt;How to use compiled Autoit script in E2E tests&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  1. What is Autoit
&lt;/h2&gt;

&lt;p&gt;Autoit is a freeware tool that can be used to automate interaction with Windows desktop applications, dialogs and processes like running, closing, deleting application. In general Autoit can be used in automating Windows GUI.&lt;/p&gt;

&lt;p&gt;To automate Windows GUI Autoit v3 scripting language uses.&lt;br&gt;
Autoit v3 is BASIC-like scripting language. So, be ready to be involved into learning BASIC-like syntax in this tutorial.&lt;/p&gt;

&lt;p&gt;More information about Autoit and Autoit v3 you can find on &lt;a href="https://www.autoitscript.com/site/" rel="noopener noreferrer"&gt;Autoit official site&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. How to use Autoit
&lt;/h2&gt;

&lt;p&gt;First of all let's go to &lt;a href="https://www.autoitscript.com/site/autoit/downloads/" rel="noopener noreferrer"&gt;AutoIt downloads&lt;/a&gt; and download Autoit full installation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F7vrn5ss7x3f0jax1mhjs.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F7vrn5ss7x3f0jax1mhjs.PNG" alt="Autoit full installation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pass all installation steps, open Autoit3 folder and run Au3Info.exe.&lt;br&gt;
This app is used for getting info about a window that will be used in programming.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ftf4owqssgb9trvihxebp.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ftf4owqssgb9trvihxebp.PNG" alt="Window info app"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basic information about system dialog that is needed for programming  of interaction with dialog is &lt;strong&gt;Class&lt;/strong&gt;, &lt;strong&gt;Title&lt;/strong&gt; and &lt;strong&gt;Instance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fymdikzrckgiffianlzte.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fymdikzrckgiffianlzte.PNG" alt="Winfow info"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To get an information about a element or a window hold on Finder Tool and move mouse to an element or a window.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fw6wnrry6h31hgwu83lgf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fw6wnrry6h31hgwu83lgf.png" alt="Finder tool"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Well, how to use Autoit tool is pretty clear. Let's go to the programming part.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Autoit scripting
&lt;/h2&gt;

&lt;p&gt;The article is about automating testing of file uploading. &lt;br&gt;
So, the goal is to automate interaction with "Open" Windows system dialog. Let's do it in a few steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first step is to open Notepad or your a code editor you prefer.&lt;br&gt;
Start writing a script with  importing necessary dependencies.&lt;/p&gt;

&lt;pre&gt; 
;Constants to be userd in an AutoIt v3 script.
#include &amp;lt;AutoItConstants.au3&amp;amp;gt
&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Define variable &lt;code&gt;$hWnd&lt;/code&gt; - the handle of the window you will interact with.&lt;/p&gt;

&lt;pre&gt;
#include &amp;lt;AutoItConstants.au3&amp;gt;
Local $hWnd
&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We need to wait for the system dialog.&lt;br&gt;
Use &lt;code&gt;WinWait(WINDOW_CLASS, TITLE, TIMEOUT)&lt;/code&gt; function.&lt;br&gt;
Let's get &lt;code&gt;WINDOW_CLASS&lt;/code&gt; and &lt;code&gt;TITLE&lt;/code&gt; with use of &lt;strong&gt;Au3Info.exe&lt;/strong&gt; (find it in Autoit installation folder).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ffbdac8k4gxum5l0w1g8x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ffbdac8k4gxum5l0w1g8x.jpg" alt="Get Window class"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;pre&gt;
#include &amp;lt;AutoItConstants.au3&amp;gt;
Local $hWnd

;Wait 15sec for file dialog (Class #32770) with title 'Open'
$hWnd = WinWait("[CLASS:#32770]","Open",15)
&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We need a mechanism to put file path to the file path field of the system window. Let's get &lt;code&gt;CLASS&lt;/code&gt; and &lt;code&gt;INSTANCE&lt;/code&gt; of the file path field.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fmh5plojdxazaznkhuw20.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fmh5plojdxazaznkhuw20.jpg" alt="File path field"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set focus to the field and put a file path.&lt;/p&gt;

&lt;pre&gt;
#include &amp;lt;AutoItConstants.au3&amp;gt;
Local $hWnd

;Wait 15sec for file dialog (Class #32770) with title 'Open'
$hWnd = WinWait("[CLASS:#32770]","Open",15)

;Second parameter can be empty string, because of you use class and instance to define the element
;More information about Autoit functions see here 
https://www.autoitscript.com/autoit3/docs/functions/

ControlFocus($hWnd, "", "[CLASS:Edit; INSTANCE:1]")
ControlSetText($hWnd, "", "[CLASS:Edit; INSTANCE:1]", $CmdLine[1])
&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;$CmdLine[1]&lt;/code&gt; - the parameter will be passed to the function as a path of a file we want to upload to a web site.&lt;br&gt;
You can hardcode this parameter by absolute file path (ex. "c:\upload_me.txt");&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click by &lt;strong&gt;Open&lt;/strong&gt; button. &lt;br&gt;
First get &lt;code&gt;CLASS&lt;/code&gt; and &lt;code&gt;INSTANCE&lt;/code&gt; of &lt;strong&gt;Open&lt;/strong&gt; button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F5487yag3nteqr7mbkslx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F5487yag3nteqr7mbkslx.jpg" alt="Open button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When we know &lt;code&gt;CLASS&lt;/code&gt; and &lt;code&gt;INSTANCE&lt;/code&gt; of &lt;strong&gt;Open&lt;/strong&gt; button we are ready to click by it.&lt;/p&gt;

&lt;p&gt;There are 2 ways to click by the element.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Way 1.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Just use &lt;code&gt;ControlClick()&lt;/code&gt; method.&lt;/p&gt;

&lt;pre&gt;
ControlClick($hWnd, "", "[CLASS:Button; INSTANCE:1])
&lt;/pre&gt;

&lt;p&gt;My experience has shown that &lt;code&gt;ControlClick()&lt;/code&gt; works unstable. From time to time a button is not clicked by unknown reason.&lt;/p&gt;

&lt;p&gt;I have solved this problem by using mouse actions such as mouse move and mouse click. Let's programming it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Way 2.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Describe variables for &lt;em&gt;x&lt;/em&gt;, &lt;em&gt;y&lt;/em&gt; coordinates and array with size 2 for storing &lt;strong&gt;Open&lt;/strong&gt; button position.&lt;/p&gt;

&lt;pre&gt;
Local $pos[2]
Local $x
Local $y
&lt;/pre&gt;

&lt;p&gt;Get &lt;strong&gt;Open&lt;/strong&gt; button position.&lt;/p&gt;

&lt;pre&gt;
;ControlGetPosition returs x and y coordinates of high left corner of the button.
$pos = ControlGetPos($hWnd, "", "[CLASS:Button; INSTANCE:1]")
&lt;/pre&gt;

&lt;p&gt;Set the way coords will be  used in the mouse functions, either absolute coords or coords relative to the current active window&lt;/p&gt;

&lt;pre&gt;
;2 = relative coords to the client area of the active window
AutoItSetOption("MouseCoordMode", 2)
&lt;/pre&gt;

&lt;p&gt;Define &lt;code&gt;$x&lt;/code&gt; and &lt;code&gt;$y&lt;/code&gt; variables. To prevent some random failures move the mouse from high left corner to another button space by adding 10px to &lt;code&gt;$x&lt;/code&gt; and &lt;code&gt;$y&lt;/code&gt;. Feel free in playing with coordinate values!&lt;/p&gt;

&lt;pre&gt;
$x=$pos[0] + 10
$y=$pos[1] + 10
&lt;/pre&gt;

&lt;p&gt;And finally perform mouse left click action.&lt;/p&gt;

&lt;pre&gt;
MouseClick($MOUSE_CLICK_LEFT, $x, $y, 1);
&lt;/pre&gt;

&lt;p&gt;Nice! You have finished scripting. Let's see the whole script.&lt;/p&gt;

&lt;pre&gt;
#include 

Local $hWnd
Local $pos[2]
Local $x
Local $y

$hWnd = WinWait("[CLASS:#32770]","Open",15)

ControlFocus($hWnd, "", "[CLASS:Edit; INSTANCE:1]")
ControlSetText($hWnd, "", "[CLASS:Edit; INSTANCE:1]", $CmdLine[1])

AutoItSetOption("MouseCoordMode", 2)
$pos = ControlGetPos($hWnd, "", "[CLASS:Button; INSTANCE:1]")
$x=$pos[0]+10
$y=$pos[1]+10

MouseClick($MOUSE_CLICK_LEFT, $x, $y, 1);
&lt;/pre&gt;

&lt;p&gt;Save the script with &lt;strong&gt;.au3&lt;/strong&gt; extension.&lt;/p&gt;
&lt;h1&gt;
  
  
  3. Compile Autoit script
&lt;/h1&gt;

&lt;p&gt;To use the script in automated E2E tests you need to compile the script to executable file:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run &lt;strong&gt;Autoit2Exe.exe&lt;/strong&gt; app.&lt;/li&gt;
&lt;li&gt;Import saved script and click by &lt;strong&gt;Convert&lt;/strong&gt; button. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F9sradm0m0u9npbw5an4z.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F9sradm0m0u9npbw5an4z.PNG" alt="Convert to exe"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Perfect, now you have executable file which can be used in E2E tests. &lt;/p&gt;
&lt;h1&gt;
  
  
  4. Test compiled Autoit script
&lt;/h1&gt;

&lt;p&gt;Before using compiled script in E2E tests we should be sure that it works.&lt;/p&gt;

&lt;p&gt;To test it, pass the following steps:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;1.Trigger upload file dialog.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2. Run compiled script with a file path argument.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fi92ki3r4k9monr54cy7m.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fi92ki3r4k9monr54cy7m.gif" alt="File uploading"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you didn't mistakes during scripting the file should be uploaded.&lt;/p&gt;
&lt;h1&gt;
  
  
  5. Use the script in E2E tests.
&lt;/h1&gt;

&lt;p&gt;You can extremely easy use compiled script in E2E tests.&lt;/p&gt;

&lt;p&gt;Below you can see an example of Protractor tests.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Page object example&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;protractor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;cp&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;child_process&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FileUploadingPage&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;uploadButton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.mat-raised-button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;addFilesButton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;element&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;by&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;xpath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;//button[contains(@class, "add-files-btn")]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

  &lt;span class="nf"&gt;uploadFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filePath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;File path: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;filePath&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;//UploadFile.exe - compiled Autoit script&lt;/span&gt;
    &lt;span class="nx"&gt;cp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;uploadFile.exe&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;filePath&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;E2E test example&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;FileUploadingPage&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./file-uploading-page&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ExpectedConditions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;protractor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;win32&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;win32&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;EC&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ExpectedConditions&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;TIMEOUT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;fileUploadingPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;FileUploadingPage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;fileUploadingPage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FileUploadingPage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;File uploading, () =&amp;gt; {
  before((done) =&amp;gt;
    browser.get(browser.baseUrl)
      .then(() =&amp;gt; done())
      .catch(done)
  );

  it(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="nx"&gt;Upload&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;, (done) =&amp;gt; {
    browser.wait(EC.visibilityOf(fileUploadingPage.uploadButton), TIMEOUT)
      .then(() =&amp;gt; fileUploadingPage.uploadButton.click())
      .then(() =&amp;gt; browser.wait(EC.visibilityOf(fileUploadingPage.addFilesButton), TIMEOUT))
      .then(() =&amp;gt; fileUploadingPage.addFilesButton.click())
      .then(() =&amp;gt; {
        const filePath = path.resolve(__dirname + &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;test_file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;txt&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;);
        return fileUploadingPage.uploadFile(filePath);
      })
      .then(() =&amp;gt; done())
      .catch(done);
  });
});
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;From this article you have learned:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What is Autoit and how to use it.&lt;/li&gt;
&lt;li&gt;How to automate interaction with Windows system dialog.&lt;/li&gt;
&lt;li&gt;How to use compiled Autoit script in E2E tests.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thanks and enjoy automation!🌈🌈🌈&lt;br&gt;
Don't forget to tap 💗 &lt;/p&gt;

</description>
      <category>testing</category>
      <category>testautomation</category>
      <category>protractor</category>
      <category>autoit</category>
    </item>
  </channel>
</rss>
