Upload files with Selenium using AutoIt.

Upload files with Selenium using AutoIt.

To upload files using Selenium and AutoIt, you need to combine the capabilities of both tools. Selenium handles browser interactions, while AutoIt handles system-level file upload dialogs that are not directly accessible through Selenium.

Description: To click on the “Choose File“ and upload a file.

Here's a step-by-step guide:

1. Install AutoIt

2. Write the AutoIt Script

Create an AutoIt script to interact with the file upload dialog

// AutoIt script to interact with a file upload dialog

// Wait for the dialog to appear
Sleep(1000)
//  Wait until the 'Open' dialog is active
WinWaitActive("Open")

// Set the file path to upload
Local $filePath = "C:\Path\To\Your\File.jpg"
// Focus on the "Edit1" text box in the "Open" dialog
ControlFocus("Open", "", "Edit1")

// Type the file path into the edit box
Sleep(1000)
ControlSetText("Open", "", "Edit1", $filePath)

// Click the Open button to upload the file
Sleep(1000)
ControlClick("Open", "", "Button1")

3. Compile the Script

  • Save the script with a .au3 extension (e.g., FileUpload.au3).

  • Compile it into an executable using the AutoIt Script Editor or the AutoIt Compiler (right-click the file and select "Compile Script").

This will generate an .exe file (e.g., FileUpload.exe).

4. Integrate with Selenium

Use Selenium to trigger the file upload dialog and then execute the AutoIt script.

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.IOException;

public class FileUploadWithAutoIt {
    public static void main(String[] args) {
        // Set up the WebDriver
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        WebDriver driver = new ChromeDriver();

        try {
            // Open the target webpage
            driver.get("https://example.com/upload");

            // Click the upload button to open the file dialog
            WebElement uploadButton = driver.findElement(By.id("uploadButtonId")); // Replace with the actual ID
            uploadButton.click();

            // Execute the AutoIt script
            Runtime.getRuntime().exec("C:\\path\\to\\FileUpload.exe");

            // Optional: Wait to observe the process
            Thread.sleep(3000);

            // Continue with other actions if needed
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        } finally {
            // Close the browser
            driver.quit();
        }
    }
}

Key Points to Remember

  • Replace C:\\path\\to\\your\\file.txt in the AutoIt script with the actual file path you want to upload.

  • Replace the Selenium By locators with the actual locators of the file upload button on your web page.

  • Ensure the .exe file is located in the path specified in the Runtime.getRuntime().exec() method.

Conclusion:

By combining Selenium and AutoIt, you can automate file uploads effectively, even when handling OS-level file dialog boxes that Selenium cannot interact with directly. Selenium triggers the file upload, and AutoIt handles the dialog interaction seamlessly. This approach is especially useful for automating complex workflows involving native system dialogs.

🙌🙌 Connect with me on LinkedIn to stay up-to-date with my latest blog posts.