Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Use Selenium’s file-input mechanism: find the page’s real input[type="file"] and send it the file’s absolute path with Protractor’s sendKeys(). This bypasses the operating-system file picker, so it works in headless Chrome too. If Chrome runs on a remote worker, make sure the file is transferred to that machine or configure a Local File Detector; then wait for the application to confirm the upload.

Upload through the file input, not the file picker

The upload control visible in a page may be a styled button, but the browser’s file picker is not the part Selenium automates. Target the underlying input[type="file"] and call sendKeys() with the full path to the image. Selenium’s file-upload documentation describes this as the supported way to provide a file to a file input.

For example, if the page contains a file input and a separate upload button, the test should set the file on the input first, then activate the page’s own upload or submit control. The selector for that action and the element that signals success depend on the application.

const path = require('path');
const imagePath = path.resolve(__dirname, 'fixtures/photo.png');
const fileInput = element(by.css('input[type="file"]'));

fileInput.sendKeys(imagePath);
// Trigger the page's submit/upload action, then wait for its success indicator.

The absolute path is important: a relative path can resolve from a different working directory than expected. Resolve it from a known location, such as the test file’s directory, and verify that the fixture exists before the test reaches the browser.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
IPEVO V4K Ultra High Definition 8MP USB Document Camera — Mac OS, Windows, Chromebook Compatible for Live Demo, Web Conferencing, Distance Learning, Remote Teaching, Green
  • Features an 8 Megapixel camera for capturing Ultra High Definition live images up to 3264 x 2448 pixels
  • High frame rate for lag-free live streaming – streams at up to 30 fps at full HD, and up to 15 fps at 3264 x 2448 pixel
  • Fast focusing speed helps minimize interruptions for frequent switching between different materials; features Sony CMOS Image Sensor for exceptional noise reduction and color Reproduction – great for capturing in dimly lit environments
  • Designed and made in Taiwan. Multi-jointed stand offers a simple fix for tightening loose joints caused by heavy daily use.Max Shooting Area:13.46 inch x 10.04 inch
  • Works with a variety of software and applications on Mac, PC and Chromebook that allows you to use it in different ways. System Requirements - Mac Intel Core i5 CPU 2.5 GHz or higher, OS X 10.10 or higher, Solid-state drive, and 200MB of free hard disk space, 256MB of dedicated video memory (For lag-free live streaming up to 1920 x 1080, and video recording of 1920 x 1080). Windows Recommended Requirements - Microsoft Windows 10,Intel Core i5 CPU 3.40 GHz or higher, 4 GB RAM, 200MB of free hard disk space, 256MB of dedicated video memory (For lag-free live streaming up to 1920 x 1080, and video recording of 1920 x 1080)

A complete Protractor test pattern

This example shows the flow and the points where your application-specific selectors belong. Replace the submit and success selectors with elements from the page under test. It assumes Protractor’s usual globals are available in the test.

const fs = require('fs');
const path = require('path');

const EC = protractor.ExpectedConditions;
const imagePath = path.resolve(__dirname, 'fixtures/photo.png');
const fileInput = element(by.css('input[type="file"]'));
const uploadButton = element(by.css('[data-test="upload"]'));
const uploadSuccess = element(by.css('[data-test="upload-success"]'));

it('uploads an image', async () => {
  fs.accessSync(imagePath, fs.constants.R_OK);

  await browser.wait(EC.presenceOf(fileInput), 5000);
  await fileInput.sendKeys(imagePath);
  await uploadButton.click();
  await browser.wait(EC.visibilityOf(uploadSuccess), 10000);
});

The timeout values here are example bounds, not guarantees about how quickly an upload should finish. Set them to suit the test environment, and make the final wait reflect the application’s real success state. If your page uploads immediately when a file is selected, omit the separate click and wait for the application’s completion indicator instead.

Why headless Chrome does not need a special upload workaround

Modern Chrome Headless shares code with Chrome, and Chrome’s Headless documentation demonstrates Selenium configuration using --headless. The upload mechanism remains the WebDriver file-input API: send the path to the input. A headful-only technique that clicks the native picker is both unnecessary and a common source of failures in CI.

Rank #2
PAKOTOO 8MP USB Document Camera for Teachers and Classroom for A3 A4 Size with Dual Mic, 3-Level LED Light, Up and Down, Left and Right Image Inversion, for Distance Teaching & Learning
  • Document camera with Image reversal function: The image reversal function can be realized through the button (no need to pass the software). When video chatting or picture output, the picture can be freely reversed left and right, up and down; The PAKOTOO document camera connects the computer via USB 2.0 cable, it does not support zoom and HDMI features, nor it does compatible with iPad.
  • Document camera for teachers with 3 levels of brightness adjustment and 10 levels of exposure adjustment: The brightness function can be realized by buttons to ensure that you can get clearer images. It can also realize the Selfie fill light function in dark and bright environments
  • Document camera for classroom with Foldable: Embedded design, takes up little space after folding, and is easy to carry; multi-joint supports multi-angle free rotation, which can better capture 2D and 3D objects. Maximum coverage area: 16.5" x 11.6" in (A3 paper)
  • USB document camera with autofocus: 2448P high-definition document cameras, press the focus (AF) button once, and the document camera will automatically focus once. Move the object under the lens, the image will not be blurred. Macro captures objects as small as 3.94"
  • Important: PAKOTOO Document camera is not plug and play. You need to select "USB Camera" in the system that comes with your computer. The document camera is equipped with a USB-C cable, which can be directly used with devices with USB-C interface such as MacBook. Compatible with Windows PCS, Macs and Chromebooks, works with Tiktok, Google Meet, Skyp-Microsoft Teams, Zoom; If you encounter any problems during the use of the product, or the computer does not recognize the camera, please be sure to contact our friendly support team for a quick solution.

In other words, if the same test works locally but fails only when run headless, check the path, selected element, remote execution setup, and post-upload wait before changing the browser mode or adding GUI automation.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Find the real input when the upload control is hidden or styled

Many sites hide the file input and make a label or button look like the control. Sending keys to that styled element does not provide a file. Locate the actual input[type="file"] in the page and send the path directly to it; do not click a button whose only job is opening the native picker.

Selenium documents strictFileInteractability as the capability governing strict interaction checks for file inputs, and says those strict checks are off by default. If an input is hidden, first try targeting the input directly under the current configuration. If the site’s own JavaScript or test policy requires visibility or an enabled control, make the smallest application or test-fixture change that preserves the real input and its normal upload behavior. Avoid replacing the input with a simulated file-picker interaction.

Rank #3
AlKOR Document Camera for Teaching, Manual Focus USB Webcam with Microphone
  • AIKOR 2MP 3-in-1 USB Webcam, Document Camera and Visualiser: It can be used as a webcam for video chats and teleconferences. The rotating lens allows for image clarity adjustment during live demonstrations. Featuring a flexible 0.47-inch diameter hose design, it can be adjusted to any angle.
  • Portable Document Camera: This lightweight document camera weighs only 1.1 pounds, extends up to 20.4 inches in height, and features a 360-degree adjustable and rotatable camera for capturing images and videos from multiple angles. It can present objects of varying sizes and positions, and the weighted base ensures excellent operational stability. This document camera combines portability with high performance, making it an ideal choice for educators and professionals.
  • Manual focus webcam: This document camera uses precise manual focus to avoid the repeated unclear focus caused by auto focus. It can achieve virtualized real-life effect shooting when needed, supports 1080P full HD resolution, and refresh rate up to 30 frames per second. Manual focus helps to stabilize the focus and restore the true color and texture.
  • Versatile Document Camera: Equipped with a CMOS image sensor and built-in sealed silicon microphone to reduce noise and improve sound quality, achieving excellent noise reduction and color reproduction. Suitable for education, home and office (video conferencing, online teaching, online tutoring, home office, video calls, making teaching videos, animations, games and live demonstrations).
  • High compatibility: The visualiser document camera comes with a USB-C cable and can be used directly with devices equipped with a USB-C port (such as MacBook). Compatible with Windows PC, Mac and Chromebook, and can be used with software such as TikTok, Google Meet, Skype, etc. It can be used with all major web conferencing software applications (Zoom, Google Meet, etc.).

If a selector matches more than one file input, narrow it to the one associated with the image-upload form. A broad selector can target an unrelated attachment field, making the test appear to succeed at the WebDriver step while exercising the wrong part of the page.

Make remote and CI uploads see the same file

A path that exists on the machine running the test client may not exist on the machine running Chrome. This is a frequent distinction between local execution and Remote WebDriver or CI: sendKeys() receives a path, but the browser host must be able to access the file. Selenium’s Remote WebDriver documentation explains that a Local File Detector bundles and transfers the file to the remote browser host; the JavaScript bindings require explicitly setting a remote.FileDetector().

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  1. Resolve and log the path. Log the absolute path immediately before sendKeys(), so the job output shows exactly which file the test tried to use.
  2. Check the fixture in the job workspace. Confirm the image was included in the checkout or artifact available to the test process, and that the process can read it.
  3. Configure remote file detection. For a Remote WebDriver session, use the JavaScript binding’s Local File Detector as documented by Selenium, rather than assuming the browser host shares the client’s filesystem.
  4. Keep the path and transfer check distinct. A valid local path confirms the client can read the file; it does not, by itself, establish that the remote browser received it.
  5. Run the application-level assertion. After the file is set, wait for the page to report upload completion rather than treating the absence of a WebDriver exception as proof of success.

Wait for the page’s upload state, not an arbitrary delay

A successful sendKeys() call means WebDriver supplied a file to the input; it does not establish that the application finished processing or uploading it. The page may still need to read the image, show a preview, send a request, or display a completion message. Selenium identifies poor synchronization as a common source of WebDriver failures.

Rank #4
INSWAN INS-1 Classic USB Document Camera/Webcam, 8MP, Built-in LED, Mic
  • [Crystal-Clear Imaging and Smooth Video Streaming] 8 Megapixel Ultra-High definition SONY camera captures live images at up to 3264 x 2448 pixels with lag-free video streaming at 30 fps across all resolutions.
  • [Your Space-Saving Multi-Joint Camera] Experience the durability of our multi-joint design while enjoying a generous viewing size of 14.72 x 11 inches. This compact camera is perfect for your desktop set up.
  • [Powerful Features, Crisp Image] Featuring LED light, and an anti-glare sheet for exposure challenges in varying lighting. 7-segment brightness control, image flip, and built-in mic ensure top-notch performance. Autofocus lens and macro capability (capturing objects as close as 3.9 inches).
  • [Feature-Packed INSWAN Documate Software] The bundled full-function INSWAN Documate software offers digital zoom, image annotation, hue adjustment, image rotation/flip, video recording, snapshots and other useful features. Download the latest version for free and access tutorial videos!
  • [Plug-n-Play & High Compatibility for Effortless Conferencing] The INS-1 comes with a USB-A cable for instant plug-and-play operation. Seamlessly works with Documate and other webinar software on PC (Windows 7/8/10/11), Mac (OS13.5 or higher), iPad (OS 17 or higher; must have a USB-C port) , Chromebook (38.0 or higher). Designed and made in Taiwan.
  • Wait for the input to be present before interacting with it. If your page renders it dynamically, a lookup made too early can fail even when the selector is correct.
  • After setting the file, wait for the page’s own result: for example, a success message, completed status, or the expected image preview. Choose a condition that actually distinguishes completion from the initial form state.
  • If the application has a separate upload action, click it after setting the file, then wait on the resulting state. If selection triggers upload automatically, wait after selection instead.
  • Use a temporary sleep only as a diagnostic to see whether extra time changes the outcome. Replace it in a stable test with a condition-based wait tied to the page’s state.

Troubleshoot the failure by symptom

Symptom Likely cause What to check or change
sendKeys() cannot find the file input The selector is wrong, the input has not rendered yet, or several controls make the selector ambiguous. Inspect the page’s actual file input, narrow the selector to the upload form, and wait for the input to be present before sending the path.
It works locally but reports a missing file in CI or Remote WebDriver The path is valid on the test client but unavailable to the browser host, or the fixture is absent from the CI workspace. Log and verify the absolute path and read access in the job. For remote sessions, configure the JavaScript Local File Detector so Selenium can transfer the file.
Clicking the upload button opens a picker or hangs The test is invoking the native picker instead of setting the file input. Send the absolute path directly to the underlying input[type="file"]; click the page’s upload action only if the application requires a separate submit.
The input is hidden or interaction is rejected The test is targeting a styled wrapper, or strict interaction policy or application behavior requires a usable control. Target the real input. Check the configured strictFileInteractability policy; if visibility is required by the application, use the smallest change that keeps the real input in place.
The file is selected but the test times out or reports failure The test does not trigger the required upload action, waits on the wrong indicator, or checks before client-side processing finishes. Follow the page’s actual upload flow and wait for its application-level success condition rather than assuming selection alone means completion.
The test passes intermittently Timing varies between input rendering, selection, processing, and the test assertion. Replace fixed sleeps with waits for the relevant input and completion conditions; confirm the success condition cannot already be true before upload begins.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Performance, reliability, and cost considerations

The upload test has at least two separate outcomes to verify: WebDriver accepted the file path, and the application completed the upload flow. A fast return from the first step does not make the second one complete. In CI, fixture availability and remote transfer are additional dependencies, so include those checks in diagnosis rather than repeatedly increasing the post-upload timeout.

Keep the test focused on an image fixture that is present and readable in the environment where the test runs. Use explicit waits with conditions tied to the page, and avoid adding browser UI automation merely to operate the file picker. That keeps the flow aligned with Selenium’s supported upload mechanism without claiming that any particular upload duration or timeout is universal.

Or skip the browser setup

ScreenshotNeo is a screenshot API and MCP server, not a mechanism for uploading an image into your application. If your underlying task is to capture a webpage as an image or PDF rather than test an image-upload form, one GET request can return the capture. The API can accept a URL and return PNG, JPEG, WebP, or PDF; see the ScreenshotNeo API documentation.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
4K USB Document Camera for Teacher, 8MP Webcam & Visualiser for A3 Size with Dual Microphones, 3-Level LED Light, Image Invert, Foldable for Live Demo, Work with Windows, macOS and Chrome OS
  • 8MP visualiser with adjustable image reversal: In video chat or image output, the image can be freely adjusted left/right and up/down; you can also manually adjust the reversed image that appears in the device to a normal image. The first usb camera that can manually adjust image reversal
  • Adjustable Image Brightness: the usb document camera has brightness buttons, you can manually adjust the image brightness with 10 degree, to make sure that you can get the clear image. 3 levels of brightness adjustable, which can eliminate shooting problems under difficult lighting conditions, allowing you to capture objects in dark and bright environments, and it can also achieve Selfie fill-in function
  • Foldable visualiser for teaching: embedded design, occupies a small space after folding, easy to carry; Multi-joint support with multi-angle rotate freely usb camera can capture 2D and 3D objects better and shooting high-definition images and videos. Maximum covering area: 16.5" x 116" in (A3 paper)
  • 8MP/2448P document camera for teachers with 30fps: using High-end image sensor, it output ultra-high-definition images and videos live transmission, up to 2448P megapixels. Press the focus button once to automatically focus the document camera once. Moving the object under the lens, the camera will not be arbitrary automatic focus and the image dance. Macro can capture objects as close as 3.94"
  • Plug-n-Play & High Compatibility: the Kitchbai Visualiser comes with a USB-C cable that allows for instant plug-and-play operation for distance education and web conferencing. It applicable to Windows PCS (Windows 7/8/10/11) , Macs (OS10.11 or higher), and Chromebooks(38.00 or higher), and work with Tiktok, Google Meet, Skyp-Microsoft Teams, Zoom; it has built-in dual silicon microphones, which can reduce noise and improve sound quality
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
  • Cookie and consent banners, newsletter popups, and chat widgets are removed before capture; each step can be turned off.
  • Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed, and responses report the page verdict and billing status in headers.
  • An MCP server provides take_screenshot, get_page_info, and capture_pdf tools for AI agents, including Claude, Cursor, and other MCP clients.
  • The Free plan includes 1,000 shots per month without a card; paid plans start at $5 for 3,000 shots. Every feature is available on every plan.

Sign up for ScreenshotNeo’s free plan to get 1,000 screenshots a month with no card.

Frequently Asked Questions

Can Protractor upload several images through one file input?

A file input may permit multiple files, but whether the page accepts them depends on its markup and application behavior. Confirm that the selected input supports the flow your test is exercising.

Does sendKeys() prove the server stored the image?

No. It supplies the file to the browser input; assert the page’s upload-completion state to verify the application flow.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.