#cross-platform #gui #automation

autopilot

A simple, cross-platform GUI automation library for Rust

11 releases

0.2.0 May 11, 2019
0.1.9 May 10, 2019
0.1.8 Sep 26, 2018
0.1.4 Jun 3, 2018
0.1.1 Apr 30, 2018

#33 in Unix APIs

Download history 14/week @ 2019-01-26 13/week @ 2019-02-02 11/week @ 2019-02-09 14/week @ 2019-02-16 28/week @ 2019-02-23 82/week @ 2019-03-02 23/week @ 2019-03-09 19/week @ 2019-03-16 47/week @ 2019-03-23 38/week @ 2019-03-30 18/week @ 2019-04-06 17/week @ 2019-04-13 19/week @ 2019-04-20 10/week @ 2019-04-27 51/week @ 2019-05-04

132 downloads per month

Apache-2.0

321KB
2K SLoC

Docs Crates.io Travis Build Status Appveyor Build Status

AutoPilot

AutoPilot is a Rust port of the Python C extension AutoPy, a simple, cross-platform GUI automation library for Python. For more information, see the README on that repo.

Currently supported on macOS, Windows, and X11 with the XTest extension.

Examples

The following will move the mouse across the screen as a sine wave:

extern crate autopilot;
extern crate rand;
use rand::Rng;

const TWO_PI: f64 = std::f64::consts::PI * 2.0;
fn sine_mouse_wave() {
    let screen_size = autopilot::screen::size();
    let scoped_height = screen_size.height / 2.0 - 10.0; // Stay in screen bounds.
    let mut rng = rand::thread_rng();
    for x in 0..screen_size.width as u64 {
        let y = (scoped_height * ((TWO_PI * x as f64) / screen_size.width).sin() + 
                 scoped_height).round();
        let duration: u64 = rng.gen_range(1, 3);
        autopilot::mouse::move_to(autopilot::geometry::Point::new(
            x as f64,
            y as f64
        )).expect("Unable to move mouse");
        std::thread::sleep(std::time::Duration::from_millis(duration));
    }
}

This will enter the keys from the string "Hello, world!" and then prompt an alert with the same text:

extern crate autopilot;

fn main() {
    autopilot::key::type_string("Hello, world!", &[], 200., 0.);
    let _ = autopilot::alert::alert("Hello, world!", None, None, None);
}

Dependencies

~3.5MB
~60K SLoC