Skip to content

Commit

Permalink
Fix tests and improve API
Browse files Browse the repository at this point in the history
  • Loading branch information
lucassklp committed Jul 2, 2023
1 parent 2b453f4 commit 09182dc
Show file tree
Hide file tree
Showing 10 changed files with 45 additions and 40 deletions.
7 changes: 4 additions & 3 deletions Desktop.Robot.TestApp/MouseTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -112,10 +112,11 @@ let tests (window:Window) = testList "Mouse tests" [

uiTest "Can scroll vertical" <| async {
let wheelDeltas = window.PointerWheelChanged.Select(fun x -> x.Delta)

let robot = Robot();
robot.AutoDelay <- 100;
let! deltaEvents = attemptUIActionList wheelDeltas <| async {
Robot().MouseScrollVertical(100) // scroll down
Robot().MouseScrollVertical(-100) // then scroll up
robot.MouseScroll(100) // scroll down
robot.MouseScroll(-100) // then scroll up
}
Expect.hasLength deltaEvents 2 "Should have a wheel event for each mouse scroll"
let xDeltas = deltaEvents |> List.map (fun p -> p.X)
Expand Down
13 changes: 7 additions & 6 deletions Desktop.Robot/AbstractRobot.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Desktop.Robot.Clicks;
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Threading;
Expand All @@ -7,7 +8,7 @@ namespace Desktop.Robot
{
public abstract class AbstractRobot : IRobot
{
public uint AutoDelay { get; set; }
public int AutoDelay { get; set; }

public abstract Point GetMousePosition();

Expand All @@ -27,9 +28,9 @@ public abstract class AbstractRobot : IRobot

public abstract void MouseScroll(int value);

public abstract void MouseScroll(int value, int duration);
public abstract void MouseScroll(int value, TimeSpan duration);

public abstract void MouseScroll(int value, int duration, int steps);
public abstract void MouseScroll(int value, TimeSpan duration, int steps);

public void MouseMove(Point p)
{
Expand Down Expand Up @@ -68,14 +69,14 @@ public void MouseUp(IClick click)
click.ExecuteMouseUp(new MouseContext(GetMousePosition()));
}

public void Delay(uint ms)
public void Delay(int ms)
{
Thread.Sleep((int)ms);
Thread.Sleep(ms);
}

protected void ApplyAutoDelay()
{
Thread.Sleep((int)AutoDelay);
Thread.Sleep(AutoDelay);
}
}
}
4 changes: 2 additions & 2 deletions Desktop.Robot/Extensions/BezierMouseMovementExtension.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,13 @@ public static void BezierMovement(this IRobot robot, Point initial, Point contro
points.Add(GetPoint(t, initial, controlPoint, ending));
}

var interval = duration.TotalMilliseconds / points.Count;
var interval = Convert.ToInt32(duration.TotalMilliseconds / points.Count);

robot.MouseMove(initial);

//Avoiding AutoDelay
var currentAutoDelay = robot.AutoDelay;
robot.AutoDelay = (uint)interval;
robot.AutoDelay = interval;

foreach (var point in points)
{
Expand Down
4 changes: 2 additions & 2 deletions Desktop.Robot/Extensions/TypingExtension.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ public static IRobot Type(this IRobot robot, string text)
return robot;
}

public static IRobot Type(this IRobot robot, string text, uint delay)
public static IRobot Type(this IRobot robot, string text, int delay)
{
Thread.Sleep((int)robot.AutoDelay);
Thread.Sleep(robot.AutoDelay);
var currentDelay = robot.AutoDelay;
robot.AutoDelay = delay;
foreach (var ch in text)
Expand Down
11 changes: 6 additions & 5 deletions Desktop.Robot/IRobot.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
using System.Drawing;
using System;
using System.Drawing;
using Desktop.Robot.Clicks;

namespace Desktop.Robot
{
public interface IRobot
{
uint AutoDelay { get; set; }
int AutoDelay { get; set; }
Image CreateScreenCapture(Rectangle screenRect);
Color GetPixelColor(int x, int y);
void KeyPress(Key key);
Expand All @@ -17,12 +18,12 @@ public interface IRobot
void Click(IClick click);
void MouseDown(IClick click);
void MouseUp(IClick click);
void Delay(uint ms);
void Delay(int ms);
void MouseMove(int x, int y);
void MouseMove(Point p);
void MouseScroll(int value);
void MouseScroll(int value, int duration);
void MouseScroll(int value, int duration, int steps);
void MouseScroll(int value, TimeSpan duration);
void MouseScroll(int value, TimeSpan duration, int steps);
Point GetMousePosition();
}
}
6 changes: 3 additions & 3 deletions Desktop.Robot/Linux/Robot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,17 +76,17 @@ public override void MouseScroll(int value)
DoMouseScroll(value, 100);
}

public override void MouseScroll(int value, int duration)
public override void MouseScroll(int value, TimeSpan duration)
{
MouseScroll(value, duration, 100);
}

public override void MouseScroll(int value, int duration, int steps)
public override void MouseScroll(int value, TimeSpan duration, int steps)
{
ApplyAutoDelay();
for (int i = 0; i < steps; i++)
{
DoMouseScroll(value / steps, duration / steps);
DoMouseScroll(value / steps, Convert.ToInt32(duration.TotalMilliseconds) / steps);
}
}

Expand Down
4 changes: 2 additions & 2 deletions Desktop.Robot/OSX/Robot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,12 @@ public override void MouseScroll(int value)
DoMouseScroll(value);
}

public override void MouseScroll(int value, int duration)
public override void MouseScroll(int value, TimeSpan duration)
{
MouseScroll(value, duration, 50);
}

public override void MouseScroll(int value, int duration, int steps)
public override void MouseScroll(int value, TimeSpan duration, int steps)
{
ApplyAutoDelay();
for (int i = 0; i < steps; i++)
Expand Down
8 changes: 4 additions & 4 deletions Desktop.Robot/Robot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public Robot()
}
}

public uint AutoDelay { get => robot.AutoDelay; set => robot.AutoDelay = value; }
public int AutoDelay { get => robot.AutoDelay; set => robot.AutoDelay = value; }

public void Click(IClick click)
{
Expand All @@ -41,7 +41,7 @@ public Image CreateScreenCapture(Rectangle screenRect)
return robot.CreateScreenCapture(screenRect);
}

public void Delay(uint ms)
public void Delay(int ms)
{
robot.Delay(ms);
}
Expand Down Expand Up @@ -107,12 +107,12 @@ public void MouseScroll(int value)
robot.MouseScroll(-1 * value);
}

public void MouseScroll(int value, int duration)
public void MouseScroll(int value, TimeSpan duration)
{
robot.MouseScroll(-1 * value, duration);
}

public void MouseScroll(int value, int duration, int steps)
public void MouseScroll(int value, TimeSpan duration, int steps)
{
robot.MouseScroll(-1 * value, duration, steps);
}
Expand Down
4 changes: 2 additions & 2 deletions Desktop.Robot/Windows/Robot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,12 +78,12 @@ public override void MouseScroll(int value)
DoMouseScroll(value * 100);
}

public override void MouseScroll(int value, int duration)
public override void MouseScroll(int value, TimeSpan duration)
{
MouseScroll(value, duration, 10);
}

public override void MouseScroll(int value, int duration, int steps)
public override void MouseScroll(int value, TimeSpan duration, int steps)
{
ApplyAutoDelay();
for (int i = 0; i < steps; i++)
Expand Down
24 changes: 13 additions & 11 deletions Example/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,22 @@ public static class Program
static void Main(string[] args)
{
var robot = new Robot();
//robot.OnMouseMove().Subscribe(position => Console.WriteLine(position));
robot.OnMouseMove().Subscribe(position => Console.WriteLine(position));
robot.AutoDelay = 1000;
//robot.MouseMove(700, 500);
//robot.BezierMovement(new Point(0, 0), TimeSpan.FromMilliseconds(1000));
//robot.Click();
//robot.Type("A invisible cat is using my PC", 125);
//robot.CombineKeys(Key.Alt, Key.Tab);

//using var screenshot = robot.CreateScreenCapture(new Rectangle(100, 100, 200, 200));
//var path = Path.Combine(Directory.GetCurrentDirectory(), $"image-{Guid.NewGuid()}.bmp");
//screenshot.Save(path, ImageFormat.Bmp);
robot.MouseMove(700, 500);
robot.BezierMovement(new Point(0, 0), TimeSpan.FromMilliseconds(1000));
robot.Click();
robot.Type("A invisible cat is using my PC", 125);
robot.CombineKeys(Key.Alt, Key.Tab);

// Code available only on Windows. Need improvement.
using var screenshot = robot.CreateScreenCapture(new Rectangle(100, 100, 200, 200));
var path = Path.Combine(Directory.GetCurrentDirectory(), $"image-{Guid.NewGuid()}.bmp");
screenshot.Save(path, ImageFormat.Bmp);

Check warning on line 27 in Example/Program.cs

View workflow job for this annotation

GitHub Actions / build

This call site is reachable on all platforms. 'ImageFormat.Bmp' is only supported on: 'windows'.

Check warning on line 27 in Example/Program.cs

View workflow job for this annotation

GitHub Actions / build

This call site is reachable on all platforms. 'Image.Save(string, ImageFormat)' is only supported on: 'windows'.

robot.LinearMovement(300, 300);
robot.Click();
robot.MouseScroll(1000, 5000, 500);
robot.MouseScroll(value: -1000, duration: TimeSpan.FromSeconds(5), steps: 500);
}
}
}
Expand Down

0 comments on commit 09182dc

Please sign in to comment.