如何在 Sikuli 中获取图像的坐标?
How to get the coordinates of an image in Sikuli?
我在我们的项目中有这个图形界面(请原谅我的插图,我工作时不允许截图)
----------------------------------------------
(1) Header |
----------------------------------------------|
(2) Files | (3) | Drop-down button (Options)
----------------------------------------|-----|
| |
----------------------------------------|-----|
| |
----------------------------------------|-----|
| |
-----------------------------------------------
我需要在我们的产品可以支持的每种文件类型中测试一个文件。
最终目标是使用那个 (3) 下拉按钮。
这是我在这部分时的代码摘要
find_filetype = find.imagedict(filetypeicon.png) #(2) filetype
freg = find_filetype.right()
if freg.exists(drop-down.png): #(3) drop-down icon
freg.click(drop-down.png)
现在点击(3)后,会出现一个下拉菜单,里面有4个操作项。
因此,例如,如果我单击 (3a):它将出现在 (3b - 3d) 下方,显示至少 2-3 个下拉项目。
----------------------------------------------
Header |
----------------------------------------------|
| (3a)|
----------------------------------------------|
| (a1) | | #a1 = action 1
--------------------------------|---------|---|
| (a2) | | #a2 = action 2
--------------------------------|---------|---|
|__(a3)___| |
-----------------------------------------------
如果我点击 (3c):
下拉菜单会选择出现在上方(f.a.d.)
显示至少 2 个下拉项。
----------------------------------------------
Header |
----------------------------------------------|
| (a1) | |
--------------------------------|---------|---|
| (a2) | |
--------------------------------|_________|---|
| (3c)|
----------------------------------------|-----|
| |
----------------------------------------------
我的解决方法是:
截图所有操作项和
if/elifs + dragDrop()
这让我的脚本 变慢 (我每天执行数百次迭代)
有没有办法找到 (a1) (因为点击 (3) 后它总是存在),保存它的坐标并将其用作 [=51 的参数=]像这样
#after clicking drop-down
#find and get (action1) coordinates
def scroll_down(coordinates): #pass it here
while not exist(action(n).png): #n = action choice
end_Y = coordinates
start_Y = coodinates - few_Y
dragdrop(start_Y, end_Y)
wait(1)
click(action(n).png)
请帮帮我!欢迎提出任何有用的建议!
注意:我只允许在该 GUI 上单击和拖动,因为它是我们正在开发的触摸屏产品。
实际滚动,就像您对滚动条所做的那样,可能不是最好的解决方案,因为它需要许多额外的操作,这些操作由于各种原因都容易失败。在这种情况下,我通常建议使用键盘来控制 selection。实际上选项很少,这取决于您的应用程序的行为方式。所以我会列出一些可能在你的场景中使用的技巧,你决定什么最适合你。
首先,请记住,您可以通过限制搜索区域来加快搜索时间。有很多方法可以做到这一点。例如:
拆分屏幕 如果您知道您要查找的图案预计只会出现在特定区域。
相对搜索/区域扩展。您可以找到相关的 (3) 项目,然后将区域扩展到其右侧以捕获 (4) select 或 (3 点) 所在的区域。这将显着加快搜索速度,因为它只会在一小块区域而不是整个屏幕中查找,并且它会确保您单击正确的 (4) 项。有关区域扩展的更多信息和示例 here. More info on optimizing search time here.
现在进入菜单中的实际项目 selection。因此,正如我提到的,我认为您最好使用键盘 select 该项目。这意味着在列表中的第一项上 selecting/clicking,然后按向下箭头按钮 x
次,直到到达您之后的菜单项。有几种方法可以正确点击向下箭头按钮的次数:
硬编码。如果您知道特定项目在列表中排在第四位,只需单击 4 次即可。
按向下箭头按钮,直到到达所需的项目。这可能会有点慢,并且可能需要拍摄额外的屏幕截图,但如果您不知道项目的顺序或者是否容易更改,这可能会很有用。
我在我们的项目中有这个图形界面(请原谅我的插图,我工作时不允许截图)
----------------------------------------------
(1) Header |
----------------------------------------------|
(2) Files | (3) | Drop-down button (Options)
----------------------------------------|-----|
| |
----------------------------------------|-----|
| |
----------------------------------------|-----|
| |
-----------------------------------------------
我需要在我们的产品可以支持的每种文件类型中测试一个文件。 最终目标是使用那个 (3) 下拉按钮。 这是我在这部分时的代码摘要
find_filetype = find.imagedict(filetypeicon.png) #(2) filetype
freg = find_filetype.right()
if freg.exists(drop-down.png): #(3) drop-down icon
freg.click(drop-down.png)
现在点击(3)后,会出现一个下拉菜单,里面有4个操作项。 因此,例如,如果我单击 (3a):它将出现在 (3b - 3d) 下方,显示至少 2-3 个下拉项目。
----------------------------------------------
Header |
----------------------------------------------|
| (3a)|
----------------------------------------------|
| (a1) | | #a1 = action 1
--------------------------------|---------|---|
| (a2) | | #a2 = action 2
--------------------------------|---------|---|
|__(a3)___| |
-----------------------------------------------
如果我点击 (3c): 下拉菜单会选择出现在上方(f.a.d.) 显示至少 2 个下拉项。
----------------------------------------------
Header |
----------------------------------------------|
| (a1) | |
--------------------------------|---------|---|
| (a2) | |
--------------------------------|_________|---|
| (3c)|
----------------------------------------|-----|
| |
----------------------------------------------
我的解决方法是:
截图所有操作项和
if/elifs + dragDrop()
这让我的脚本 变慢 (我每天执行数百次迭代)
有没有办法找到 (a1) (因为点击 (3) 后它总是存在),保存它的坐标并将其用作 [=51 的参数=]像这样
#after clicking drop-down
#find and get (action1) coordinates
def scroll_down(coordinates): #pass it here
while not exist(action(n).png): #n = action choice
end_Y = coordinates
start_Y = coodinates - few_Y
dragdrop(start_Y, end_Y)
wait(1)
click(action(n).png)
请帮帮我!欢迎提出任何有用的建议!
注意:我只允许在该 GUI 上单击和拖动,因为它是我们正在开发的触摸屏产品。
实际滚动,就像您对滚动条所做的那样,可能不是最好的解决方案,因为它需要许多额外的操作,这些操作由于各种原因都容易失败。在这种情况下,我通常建议使用键盘来控制 selection。实际上选项很少,这取决于您的应用程序的行为方式。所以我会列出一些可能在你的场景中使用的技巧,你决定什么最适合你。
首先,请记住,您可以通过限制搜索区域来加快搜索时间。有很多方法可以做到这一点。例如:
拆分屏幕 如果您知道您要查找的图案预计只会出现在特定区域。
相对搜索/区域扩展。您可以找到相关的 (3) 项目,然后将区域扩展到其右侧以捕获 (4) select 或 (3 点) 所在的区域。这将显着加快搜索速度,因为它只会在一小块区域而不是整个屏幕中查找,并且它会确保您单击正确的 (4) 项。有关区域扩展的更多信息和示例 here. More info on optimizing search time here.
现在进入菜单中的实际项目 selection。因此,正如我提到的,我认为您最好使用键盘 select 该项目。这意味着在列表中的第一项上 selecting/clicking,然后按向下箭头按钮 x
次,直到到达您之后的菜单项。有几种方法可以正确点击向下箭头按钮的次数:
硬编码。如果您知道特定项目在列表中排在第四位,只需单击 4 次即可。
按向下箭头按钮,直到到达所需的项目。这可能会有点慢,并且可能需要拍摄额外的屏幕截图,但如果您不知道项目的顺序或者是否容易更改,这可能会很有用。