--- a/tests/ide_tests/edit_project.sikuli/edit_project.py Thu Dec 15 14:59:27 2022 +0100
+++ b/tests/ide_tests/edit_project.sikuli/edit_project.py Thu Dec 22 02:46:08 2022 +0100
@@ -25,7 +25,7 @@
- app.doubleClick("Hello world")
+ app.doubleClick("Hello") --- a/tests/ide_tests/opcua_browse.sikuli/opcua_browse.py Thu Dec 15 14:59:27 2022 +0100
+++ b/tests/ide_tests/opcua_browse.sikuli/opcua_browse.py Thu Dec 22 02:46:08 2022 +0100
@@ -15,7 +15,7 @@
server = AuxiliaryProcess(app, ["/bin/bash",os.path.join(getBundlePath(),"opcua_service.bash")])
- app.doubleClick("opcua_0")
+ app.doubleClick(["opcua_0", "opcua"]) @@ -29,7 +29,7 @@
app.doubleClick("TestObject")
- app.dragNdrop("TestIn", "output variables")
+ app.dragNdrop(["TestIn", "Testln"], "output variables") --- a/tests/ide_tests/opcua_browse_encrypted.sikuli/opcua_browse_encrypted.py Thu Dec 15 14:59:27 2022 +0100
+++ b/tests/ide_tests/opcua_browse_encrypted.sikuli/opcua_browse_encrypted.py Thu Dec 22 02:46:08 2022 +0100
@@ -17,7 +17,7 @@
server.waitPatternInStdout("CERTS READY", 5)
- app.doubleClick("opcua_0")
+ app.doubleClick(["opcua_0", "opcua"]) @@ -31,7 +31,7 @@
app.doubleClick("TestObject")
- app.dragNdrop("TestIn", "output variables")
+ app.dragNdrop(["TestIn", "Testln"], "output variables") --- a/tests/ide_tests/sikuliberemiz.py Thu Dec 15 14:59:27 2022 +0100
+++ b/tests/ide_tests/sikuliberemiz.py Thu Dec 22 02:46:08 2022 +0100
@@ -5,8 +5,10 @@
from threading import Thread, Event, Lock
from time import time as timesec
+from xml.sax.saxutils import escape as escape_xml @@ -16,6 +18,13 @@
tessdata_path = os.environ["TESSDATAPATH"]
+ansi_escape = re.compile(r'(?:\x1B[@-_]|[\x80-\x9F])[0-?]*[ -/]*[@-~]') + return ansi_escape.sub('', line) + return escape_xml(escape_ansi(txt)) """Send shortut to app by calling corresponding methods.
@@ -59,6 +68,7 @@
self.r = sikuli.Region(self.sikuliapp.window())
+ self.targetOffset = self.r.getTopLeft() @@ -199,19 +209,21 @@
Sikuli App class instance
- sikuli.OCR.Options().dataPath(tessdata_path)
- sikuli.OCR.Options().oem(0)
+ self.ocropts = sikuli.OCR.globalOptions() + self.ocropts.dataPath(tessdata_path) + self.ocropts.smallFont()
self.starttime = timesec()
self.screen = sikuli.Screen()
- self.report = open("report.html", "w")
- self.report.write("""<!doctype html>
+ self.report = open("report.xhtml", "w") +<html xmlns="http://www.w3.org/1999/xhtml">
- <meta name="color-scheme" content="light dark">
+ <meta charset="utf-8"/> + <meta name="color-scheme" content="light dark"/> <title>Test report</title>
@@ -273,21 +285,66 @@
stdoutIdleObserver.__init__(self)
# stubs for common sikuli calls to allow adding hooks later
- for name in ["click","doubleClick","type","rightClick","wait"]:
+ for name, takes_matches in [ def myMeth(*args, **kwargs):
self.ReportScreenShot("Begin: " + n + "(" + repr(args) + "," + repr(kwargs) + ")")
+ args = map(self.handle_PFRML_arg, args) + kwargs = dict(map(lambda k,v:(k,self.handle_PFRML_arg(v)), kwargs.items())) getattr(sikuli, n)(*args, **kwargs)
self.ReportScreenShot("end: " + n + "(" + repr(args) + "," + repr(kwargs) + ")")
- setattr(self, name, makeMyMeth(name))
+ setattr(self, name, makeMyMeth(name,takes_matches)) + def handle_PFRML_arg(self, arg): + return self.findBest(*arg) + if type(arg)==str and not arg.endswith(".png"): + return self.findBest(arg) + def findBest(self, *args): + #match = self.r.findBest(*args) + matches = sikuli.OCR.readWords(self.r) + sikuli.OCR.readLines(self.r) + mText = m.getText().encode('ascii', 'ignore') + self.ReportText("Not found: " + repr(args) + " OCR content: ") + self.ReportText(repr(m) + ": " + m.getText().encode('ascii', 'ignore')) + raise Exception("Not Found: " + repr(args)) + # translate match to screen ref + #match.setTargetOffset(self.targetOffset) + match.setTopLeft(match.getTopLeft().offset(self.targetOffset)) + self.ReportTextImage("Found for " + repr(args) + ": " + + " ".join([repr(match), repr(match.getTarget()), repr(match.getTargetOffset())]), + self.screen.capture(match)) + return match.getTarget() def dragNdrop(self, src, dst):
+ self.ReportScreenShot("Drag: (" + repr(src) + ")") + sikuli.drag(self.handle_PFRML_arg(src))
+ sikuli.dropAt(self.handle_PFRML_arg(dst)) + self.ReportScreenShot("Drop: (" + repr(dst) + ")") @@ -304,21 +361,26 @@
stdoutIdleObserver.__del__(self)
def ReportScreenShot(self, msg):
+ cap = self.screen.capture(self.r) + self.ReportTextImage(msg, cap) + def ReportTextImage(self, msg, img): elapsed = "%.3fs: "%(timesec() - self.starttime)
- fname = "capture"+str(self.screenshotnum)+".png"
- cap = self.screen.capture(self.r)
- self.screenshotnum = self.screenshotnum + 1
- self.report.write( "<p>" + elapsed + msg + "<br/><img src=\""+ fname + "\">" + "</p>")
+ fname = "capture"+str(self.imgnum)+".png" + self.imgnum = self.imgnum + 1 + self.report.write( "<p>" + escape(elapsed + msg) + "<br/><img src=\""+ fname + "\"/>" + "</p>") def ReportText(self, text):
elapsed = "%.3fs: "%(timesec() - self.starttime)
- self.report.write("<p>" + elapsed + text + "</p>")
+ #res = u"<p><![CDATA[" + elapsed + text + "]]></p>" + res = u"<p>" + escape(elapsed + text) + "</p>" def ReportOutput(self, text):
elapsed = "%.3fs: "%(timesec() - self.starttime)
sys.stdout.write(elapsed + text)
- self.report.write("<pre>" + elapsed + text + "</pre>")
+ self.report.write("<pre>" + escape(elapsed + text) + "</pre>") class AuxiliaryProcess(stdoutIdleObserver):
--- a/tests/tools/Docker/Dockerfile Thu Dec 15 14:59:27 2022 +0100
+++ b/tests/tools/Docker/Dockerfile Thu Dec 22 02:46:08 2022 +0100
@@ -17,6 +17,10 @@
RUN groupadd -g $GID $UNAME
RUN useradd -m -u $UID -g $GID -s /bin/bash $UNAME
+RUN apt-get install locales +RUN locale-gen en_US.UTF-8 +RUN update-locale LANG=en_US.UTF-8