Ich arbeite an der Automatisierung von GUI -Tests mit Roboter Framework und Pyautogui. Ich habe beide Pyautogui.LocateOnscreen () und cv2.mattemplate () zur Erkennung von UI -Elementen durch die Übereinstimmung mit einem Referenzbild in einem Bildschirmbereich. />
[*] Ich leite das Python-Skript mit dem Auslaufprozess von Robot Framework aus < /code> Schlüsselwort.
Code: Select all
${result}= Run Process python OCR.py GPIOOutput ${reference_image} stdout=stdout.log stderr=stderr.log
< /code>
Der Bildpfad wird über sys.argv < /code>.if __name__ == "__main__":
if len(sys.argv) < 3:
print("[ERROR] Usage: python OCR.py ")
else:
word = sys.argv[1]
reference_image = sys.argv[2]
result = find_and_click_text(word, reference_image)
print(result)
Hier ist, was funktioniert:
Wenn der Pfad
hartcodiert ist Innerhalb des .py script → locateOnscreen () funktioniert perfekt. Es sieht identisch aus. < /li>
Code: Select all
Image.open(reference_image)< /code> funktioniert - Datei existiert und lädt gut.pyautogui.locateOnScreen(reference_image)
→ fällt lautlos aus oder ergibt ein geringes Vertrauen (~ 0,2)
[*] Auch wenn ich das geladene Bildobjekt übergasse (das geladene Bildobjekt (
) So locateOnscreen () → Es fällt fehl. />
Code: Select all
[DEBUG] Reference image path received: C:\PFE\Test_Automation\CubeMX\PA6_reference.png
[DEBUG] sys.argv: ['OCR.py', 'GPIOOutput', 'C:\\PFE\\Test_Automation\\CubeMX\\PA6_reference.png']
[DEBUG] File exists at: C:/PFE/Test_Automation/CubeMX/PA6_reference.png
[ERROR] Traceback (most recent call last):
File "C:\Python312\Lib\site-packages\pyautogui\__init__.py", line 172, in wrapper
return wrappedFunction(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\pyautogui\__init__.py", line 210, in locateOnScreen
return pyscreeze.locateOnScreen(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\pyscreeze\__init__.py", line 405, in locateOnScreen
retVal = locate(image, screenshotIm, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\pyscreeze\__init__.py", line 383, in locate
points = tuple(locateAll(needleImage, haystackImage, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\pyscreeze\__init__.py", line 257, in _locateAll_opencv
raise ImageNotFoundException('Could not locate the image (highest confidence = %.3f)' % result.max())
pyscreeze.ImageNotFoundException: Could not locate the image (highest confidence = 0.274)
< /code>
Was ich bestätigt habe: < /p>
Das [url=viewtopic.php?t=20324]Problem[/url] wird nicht gelöst, wenn ich den Suchbereich mit PyAutogui.screenshot (Region = ()) < /code> < /li> begrüße, nichtImageChops.difference()
bestätigt, dass die Referenz und der geschnittene Bildschirmbereich
Pixel-Perfect
[*]
Das Problem nur dann geschieht, wenn das Skript aus dem Roboter-Framework ausgeführt wird. Mit dem Auslaufprozess
wird das Bild nicht zugegriffen. /> Screenshots: < /strong>
Das erste Bild ist mein Bildschirm und das zweite Referenzbild. src = "
https://i.static.net/yjfyc2vx.png"/>
Könnte dies an:
liegenpyautogui< /code> Verhalten beim Ausführen als Subprozess anders?>
Ich arbeite an der Automatisierung von GUI -Tests mit Roboter Framework und Pyautogui. Ich habe beide Pyautogui.LocateOnscreen () und cv2.mattemplate () zur Erkennung von UI -Elementen durch die Übereinstimmung mit einem Referenzbild in einem Bildschirmbereich. />
[*] Ich leite das Python-Skript mit dem Auslaufprozess von Robot Framework aus < /code> Schlüsselwort.[code]${result}= Run Process python OCR.py GPIOOutput ${reference_image} stdout=stdout.log stderr=stderr.log
< /code>
Der Bildpfad wird über sys.argv < /code>.if __name__ == "__main__":
if len(sys.argv) < 3:
print("[ERROR] Usage: python OCR.py ")
else:
word = sys.argv[1]
reference_image = sys.argv[2]
result = find_and_click_text(word, reference_image)
print(result)
[/code]
Hier ist, was funktioniert:
Wenn der Pfad [b] hartcodiert ist [/b] Innerhalb des .py script → locateOnscreen () funktioniert perfekt. Es sieht identisch aus. < /li>
[code]Image.open(reference_image)< /code> funktioniert - Datei existiert und lädt gut.pyautogui.locateOnScreen(reference_image)[/code] → fällt lautlos aus oder ergibt ein geringes Vertrauen (~ 0,2)
[*] Auch wenn ich das geladene Bildobjekt übergasse (das geladene Bildobjekt ([code]Image.open(path)[/code]) So locateOnscreen () → Es fällt fehl. />
[code][DEBUG] Reference image path received: C:\PFE\Test_Automation\CubeMX\PA6_reference.png
[DEBUG] sys.argv: ['OCR.py', 'GPIOOutput', 'C:\\PFE\\Test_Automation\\CubeMX\\PA6_reference.png']
[DEBUG] File exists at: C:/PFE/Test_Automation/CubeMX/PA6_reference.png
[ERROR] Traceback (most recent call last):
File "C:\Python312\Lib\site-packages\pyautogui\__init__.py", line 172, in wrapper
return wrappedFunction(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\pyautogui\__init__.py", line 210, in locateOnScreen
return pyscreeze.locateOnScreen(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\pyscreeze\__init__.py", line 405, in locateOnScreen
retVal = locate(image, screenshotIm, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\pyscreeze\__init__.py", line 383, in locate
points = tuple(locateAll(needleImage, haystackImage, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\pyscreeze\__init__.py", line 257, in _locateAll_opencv
raise ImageNotFoundException('Could not locate the image (highest confidence = %.3f)' % result.max())
pyscreeze.ImageNotFoundException: Could not locate the image (highest confidence = 0.274)
< /code>
Was ich bestätigt habe: < /p>
Das [url=viewtopic.php?t=20324]Problem[/url] wird nicht gelöst, wenn ich den Suchbereich mit PyAutogui.screenshot (Region = ()) < /code> < /li> begrüße, nichtImageChops.difference()[/code] bestätigt, dass die Referenz und der geschnittene Bildschirmbereich [b] Pixel-Perfect [/b]
[*] [b] Das [url=viewtopic.php?t=20324]Problem[/url] nur dann geschieht, wenn das Skript aus dem Roboter-Framework ausgeführt wird. Mit dem Auslaufprozess [/b]
wird das Bild nicht zugegriffen. /> Screenshots: < /strong>
Das erste Bild ist mein Bildschirm und das zweite Referenzbild. src = "https://i.static.net/yjfyc2vx.png"/>
Könnte dies an:
liegenpyautogui< /code> Verhalten beim Ausführen als Subprozess anders?>