Skip to content

Commit 433d95d

Browse files
committed
+ Refactored tests a bit
+ Improved documentation
1 parent ffdd969 commit 433d95d

File tree

8 files changed

+74
-33
lines changed

8 files changed

+74
-33
lines changed

src/main/java/com/github/hi_fi/remotesikulilibrary/DTO/Locator.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class Locator {
2222
private double similarity = 0.7;
2323

2424

25-
public Locator(Object...args) {
25+
public Locator(String[] args) {
2626
SikuliLogger.logDebug(args);
2727
if (args.length > 0 && NumberUtils.isNumber(args[0].toString())) {
2828
this.setSimilarity(Double.parseDouble(args[0].toString()));
@@ -134,8 +134,6 @@ public void encodeImageToBase64(String imageNameOrText) {
134134
}
135135

136136
public String updateLocatorTarget(String imageNameOrText) {
137-
SikuliLogger.logDebug(this.isRemote());
138-
SikuliLogger.logDebug(this.getImageData());
139137
if (this.isRemote() && this.getImageData().length() > 10) {
140138
SikuliLogger.logDebug("Parsing image from remote call");
141139
try {

src/main/java/com/github/hi_fi/remotesikulilibrary/impl/Client.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
package com.github.hi_fi.remotesikulilibrary.impl;
22

3-
import java.io.File;
4-
import java.io.IOException;
53
import java.util.HashMap;
64
import java.util.Map;
75

8-
import org.apache.commons.io.FileUtils;
96
import org.apache.ws.commons.util.Base64;
107
import org.apache.ws.commons.util.Base64.DecodingException;
118
import org.apache.xmlrpc.XmlRpcException;
@@ -22,7 +19,7 @@
2219
*/
2320
public class Client implements RemoteSikuliLibraryInterface {
2421

25-
public String captureScreenshot(Object... remote) {
22+
public String captureScreenshot(String[] remote) {
2623
SikuliLogger.logDebug("Calling screenshot capture from client class");
2724
String response = this.executeRemoteCall("captureScreenshot", true);
2825
try {
@@ -57,6 +54,10 @@ public void inputText(String text, String imageNameOrText, Locator locator) {
5754
this.executeRemoteCall("inputText", text, imageNameOrText, locator.getSimilarity(), locator.getxOffset(), locator.getyOffset(), locator.isRemote(), locator.getImageData());
5855
}
5956

57+
public void typeKeys(String keys, String[] modifiers) {
58+
this.executeRemoteCall("typeKeys", keys, modifiers);
59+
}
60+
6061
@SuppressWarnings("rawtypes")
6162
private String executeRemoteCall(String keyword, Object... params) {
6263
Map response = new HashMap();

src/main/java/com/github/hi_fi/remotesikulilibrary/impl/RemoteSikuliLibraryInterface.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
public interface RemoteSikuliLibraryInterface {
66

7-
public String captureScreenshot(Object...remote);
7+
public String captureScreenshot(String[] remote);
88

99
public void enableDebugging();
1010

@@ -14,4 +14,6 @@ public interface RemoteSikuliLibraryInterface {
1414

1515
public void inputText(String text, String imageNameOrText, Locator locator);
1616

17+
public void typeKeys(String text, String[] modifiers);
18+
1719
}

src/main/java/com/github/hi_fi/remotesikulilibrary/impl/Server.java

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@
55

66
import org.apache.commons.io.FileUtils;
77
import org.apache.ws.commons.util.Base64;
8+
import org.sikuli.script.Env;
89
import org.sikuli.script.FindFailed;
10+
import org.sikuli.script.Key;
911
import org.sikuli.script.Pattern;
1012
import org.sikuli.script.Screen;
1113

1214
import com.github.hi_fi.remotesikulilibrary.DTO.Locator;
1315
import com.github.hi_fi.remotesikulilibrary.utils.Helper;
16+
import com.github.hi_fi.remotesikulilibrary.utils.KeyMapper;
1417
import com.github.hi_fi.remotesikulilibrary.utils.SikuliLogger;
1518

1619
/**
@@ -21,7 +24,7 @@
2124
*/
2225
public class Server implements RemoteSikuliLibraryInterface {
2326

24-
public String captureScreenshot(Object... remote) {
27+
public String captureScreenshot(String[] remote) {
2528
SikuliLogger.logDebug("Calling screenshot capture from server class");
2629
byte[] imageData = this.captureScreenshot();
2730
if (remote.length > 0) {
@@ -42,8 +45,9 @@ public void clickItem(String imageNameOrText, Locator locator) {
4245
try {
4346
SikuliLogger.logDebug("Clicking item: " + imageNameOrText);
4447
if (locator.isImage()) {
45-
new Screen().click(new Pattern(imageNameOrText).similar(locator.getSimilarityasFloat()).targetOffset(locator.getxOffset(), locator.getyOffset()));
46-
} else if (locator.isText()){
48+
new Screen().click(new Pattern(imageNameOrText).similar(locator.getSimilarityasFloat())
49+
.targetOffset(locator.getxOffset(), locator.getyOffset()));
50+
} else if (locator.isText()) {
4751
new Screen().click(imageNameOrText);
4852
}
4953
} catch (FindFailed e) {
@@ -60,30 +64,49 @@ public void waitUntilScreenContains(String imageNameOrText, Locator locator) {
6064
screen.setAutoWaitTimeout(Helper.getWaitTimeout());
6165
if (locator.isImage()) {
6266
screen.wait(new Pattern(imageNameOrText).similar(locator.getSimilarityasFloat()));
63-
} else if (locator.isText()){
67+
} else if (locator.isText()) {
6468
screen.wait(imageNameOrText);
6569
}
6670
} catch (FindFailed e) {
6771
this.handleFindFailed(locator.isRemote(), e);
6872
}
6973
}
70-
74+
7175
public void inputText(String text, String imageNameOrText, Locator locator) {
7276
imageNameOrText = locator.updateLocatorTarget(imageNameOrText);
7377
try {
7478
SikuliLogger.logDebug("Clicking item: " + imageNameOrText);
7579
if (locator.isImage()) {
76-
new Screen().click(new Pattern(imageNameOrText).similar(locator.getSimilarityasFloat()).targetOffset(locator.getxOffset(), locator.getyOffset()));
77-
} else if (locator.isText()){
80+
new Screen().click(new Pattern(imageNameOrText).similar(locator.getSimilarityasFloat())
81+
.targetOffset(locator.getxOffset(), locator.getyOffset()));
82+
} else if (locator.isText()) {
7883
new Screen().click(imageNameOrText);
7984
}
8085
} catch (FindFailed e) {
8186
this.handleFindFailed(locator.isRemote(), e);
8287
}
83-
88+
8489
new Screen().paste(text);
8590
}
86-
91+
92+
public void typeKeys(String keys, String[] modifiers) {
93+
boolean numLockActive = Key.isLockOn(Key.C_NUM_LOCK);
94+
Screen screen = new Screen();
95+
if (numLockActive) {
96+
screen.type(Key.NUM_LOCK);
97+
}
98+
String modifierText = "";
99+
for (Object modifier : modifiers) {
100+
modifierText = KeyMapper.getKey(modifier.toString());
101+
}
102+
keys = KeyMapper.getKey(keys);
103+
new Screen().type(keys, modifierText);
104+
if (numLockActive) {
105+
screen.type(Key.NUM_LOCK);
106+
}
107+
108+
}
109+
87110
private byte[] captureScreenshot() {
88111
String temporaryScreenshotPath = new Screen().capture().getFile();
89112
SikuliLogger.logDebug("Temporary image stored to: " + temporaryScreenshotPath);
@@ -94,15 +117,16 @@ private byte[] captureScreenshot() {
94117
throw new RuntimeException(e.getMessage());
95118
}
96119
}
97-
120+
98121
private void handleFindFailed(boolean remote, FindFailed e) {
99122
if (remote) {
100123
SikuliLogger.logError("Image/text not found at remote computer. Screenshot below.");
101124
boolean isDebug = Helper.isDebug();
102125
if (!isDebug) {
103126
Helper.enableDebug();
104127
}
105-
//SikuliLogger.logDebug("-IMAGEDATA-" + Base64.encode(this.captureScreenshot()) + "-IMAGEDATA-");
128+
// SikuliLogger.logDebug("-IMAGEDATA-" +
129+
// Base64.encode(this.captureScreenshot()) + "-IMAGEDATA-");
106130
if (!isDebug) {
107131
Helper.disableDebug();
108132
}

src/main/java/com/github/hi_fi/remotesikulilibrary/keywords/Configuration.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,22 @@ public void disableDebugging() {
3535

3636
@RobotKeyword("Set directory containing Sikuli's test images.\n\n"
3737
+"Default directory is <i>testdata/images</i>.")
38+
@ArgumentNames("Path to test images")
3839
public void setTestImageDirectory(String imageDirectory) {
3940
Helper.setImageDirectory(imageDirectory);
4041
}
4142

4243
@RobotKeyword("Set directory where screenshots are stored.\n\n"
4344
+"Default directory is <i>images</i>.")
45+
@ArgumentNames("Path to store screenshots")
4446
public void setScreenshotDirectory(String screenshotDirectory) {
4547
Helper.setScreenshotDirectory(screenshotDirectory);
4648
}
4749

4850
@RobotKeyword("Starts remote server. Mainly used for testing.\n\n"
4951
+"Returns server port.")
50-
@ArgumentNames({"Remote port=selected automatically"})
51-
public int startRemoteServer(String... port) {
52+
@ArgumentNames({"*Remote port=selected automatically"})
53+
public int startRemoteServer(String[] port) {
5254
RemoteServer.configureLogging();
5355
RemoteServer server = new RemoteServer();
5456
remoteServer = server;

src/main/java/com/github/hi_fi/remotesikulilibrary/keywords/Keyboard.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,26 @@
1010

1111
@RobotKeywords
1212
public class Keyboard {
13-
13+
1414
@RobotKeyword("Inputs given text to given field. Input is pasted to field, which allows support for international characters\n\n"
15-
+"Locator is same than in item click/wait, so same variables available")
16-
@ArgumentNames({"Text to type", "Image name or text to click", "Similarity of images=0.7", "X offset from centre of image=0", "Y offset from centre of image=0","Is call remote=false", "Base64 encoded image to click at remote case="})
17-
public void inputText(String text, String imageNameOrText, Object...arguments) {
18-
SikuliLogger.logDebug("Parsing parameter from arguments. There's "+arguments.length+" parameters to parse");
15+
+ "Locator is same than in item click/wait, so same variables available")
16+
@ArgumentNames({ "Text to type", "Image name or text to click", "Similarity of images=0.7",
17+
"X offset from centre of image=0", "Y offset from centre of image=0", "*Technical arguments" })
18+
public void inputText(String text, String imageNameOrText, String[] arguments) {
19+
SikuliLogger.logDebug("Parsing parameter from arguments. There's " + arguments.length + " parameters to parse");
1920
Locator locator = new Locator(arguments);
2021
Helper.getLibrary().inputText(text, imageNameOrText, locator);
2122
}
2223

24+
@RobotKeyword("Simulates keyboard typing one by one (or with modifiers)\n\n"
25+
+ "Please note that keyword is not taking any locators, so if typing needs to be done "
26+
+ "at some field/list, it has to be clicked first with e.g. @clickItem\n\n"
27+
+ "Multiple modifiers should be separated to different fieds"
28+
+ "This can be used also for fillig text fields, but only withn US-ASCII characters.\n"
29+
+ "Modifiers defined at http://sikulix-2014.readthedocs.io/en/latest/keys.html#key-modifiers-modifier-keys\n"
30+
+ "Supported special keys defined at: http://sikulix-2014.readthedocs.io/en/latest/keys.html#special-keys")
31+
@ArgumentNames({"Keys to press one by one", "*Modifiers held at the bottom during typing" })
32+
public void typeKeys(String text, String[] modifiers) {
33+
Helper.getLibrary().typeKeys(text, modifiers);
34+
}
2335
}

src/main/java/com/github/hi_fi/remotesikulilibrary/keywords/Mouse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
public class Mouse {
1313

1414
@RobotKeyword("Click either given image or text at the screen.")
15-
@ArgumentNames({"Image name or text to click", "Similarity of images=0.7", "X offset from centre of image=0", "Y offset from centre of image=0","Is call remote=false", "Base64 encoded image to click at remote case="})
16-
public void clickItem(String imageNameOrText, Object...arguments) {
15+
@ArgumentNames({"Image name or text to click", "Similarity of images=0.7", "X offset from centre of image=0", "Y offset from centre of image=0","*Technical arguments"})
16+
public void clickItem(String imageNameOrText, String[] arguments) {
1717
SikuliLogger.logDebug("Parsing parameter from arguments. There's "+arguments.length+" parameters to parse");
1818
Locator locator = new Locator(arguments);
1919
Helper.getLibrary().clickItem(imageNameOrText, locator);

src/main/java/com/github/hi_fi/remotesikulilibrary/keywords/Screen.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,21 @@
66

77
import com.github.hi_fi.remotesikulilibrary.DTO.Locator;
88
import com.github.hi_fi.remotesikulilibrary.utils.Helper;
9+
import com.github.hi_fi.remotesikulilibrary.utils.SikuliLogger;
910

1011
@RobotKeywords
1112
public class Screen {
1213

1314
@RobotKeyword("Captures visible screen using Sikuli")
14-
@ArgumentNames({"Is call remote=false"})
15-
public String captureScreenshot(Object...remote) {
16-
return Helper.getLibrary().captureScreenshot(remote);
15+
@ArgumentNames({"*Techical arguments"})
16+
public String captureScreenshot(String[] arguments) {
17+
return Helper.getLibrary().captureScreenshot(arguments);
1718
}
1819

1920
@RobotKeyword("Wait until screen contains given item (image or text (of OCR is enabled))")
20-
@ArgumentNames({"Image or text to wait, similarity=0.7, Is call remote=false"})
21-
public void waitUntilScreenContains(String imageNameOrText, Object...arguments) {
21+
@ArgumentNames({"Image or text to wait", "Similarity of images=0.7", "*Technical arguments"})
22+
public void waitUntilScreenContains(String imageNameOrText, String[] arguments) {
23+
SikuliLogger.log("Test");
2224
Locator locator = new Locator(arguments);
2325
Helper.getLibrary().waitUntilScreenContains(imageNameOrText, locator);
2426
}

0 commit comments

Comments
 (0)