【问题标题】:How to get the coordinates of an image in Sikuli?如何在 Sikuli 中获取图像的坐标?
【发布时间】:2023-04-05 22:58:01
【问题描述】:

我的项目中有这个 GUI(请耐心等待我的插图,我不允许在工作中截屏)

----------------------------------------------
    (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)|           
----------------------------------------|-----|
                                        |     |
----------------------------------------------

我的解决方法是:

  1. 截屏所有操作项和

  2. if/elifs + dragDrop()

这使我的脚本 (我每天执行数百次迭代)

有没有办法可以找到 (a1)(因为它在单击 (3) 后始终存在),保存它的坐标并将其用作这样的 scrolldown_codes 的参数

   #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 上单击和拖动,因为它是我们正在开发的触摸屏产品。

【问题讨论】:

  • 您在这里的最终目标是什么?您需要查看这些菜单项吗?与他们互动?确保它们存在?
  • 顺便说一句,这里很好地描述了这个问题,没有使用截图!
  • 谢谢!我想通过滚动与下拉菜单进行交互!单击那个 (4) 按钮后有 4 个菜单项,并且(因为我们有一个 4.3 英寸的 ui 面板)大多数时候,只出现 2-3 个菜单项。我想选择第 4 个菜单项,但我无法通过硬编码区域向下滚动,因为它要么在 (4) 按钮上方/下方弹出。
  • @EugeneS 我发现我的评论也令人困惑。 (a1) 在单击 (4) 后始终存在,因此我想保存 (a1) 的坐标并将其用作将光标指向 (a1) 下面几个像素的参考。所以代码看起来就像我在上面编辑的那样。 *scroll_down()
  • 你的描述很好。请看看我的回答,如果有帮助,请告诉我。

标签: python sikuli sikuli-script


【解决方案1】:

实际滚动,就像您对滚动条所做的那样,可能不是最好的解决方案,因为它需要许多额外的操作,这些操作都容易由于各种原因而失败。在这种情况下,我通常建议使用键盘来控制选择。实际上几乎没有选择,这取决于您的应用程序的行为方式。因此,我将列出一些可能在您的场景中使用的技巧,然后您决定最适合自己的技巧。

首先,请记住,您可以通过限制您正在查看的区域来加快搜索时间。有很多方法可以做到这一点。例如:

  1. 分屏,如果您知道您正在寻找的图案只出现在特定区域。

  2. 相对搜索/区域扩展。您可以找到相关的 (3) 项,然后将区域扩展到其右侧以捕获 (4) 选择器(3 个点)所在的区域。这将显着加快搜索速度,因为它只会查看一个小区域而不是整个屏幕,并且它将确保您单击正确的 (4) 项。有关区域扩展的更多信息和示例here。更多关于优化搜索时间的信息here

现在到菜单中的实际项目选择。所以,正如我所提到的,我认为你最好使用键盘来选择项目。这意味着选择/单击列表中的第一项,然后按向下箭头按钮x 次,直到您到达您之后的菜单项。有几种方法可以正确点击向下箭头按钮的次数:

  1. 硬编码。如果您知道特定项目在列表中排名第四,只需点击 4 次即可。

  2. 按向下箭头按钮,直到找到所需的项目。这可能会慢一些,并且可能需要截取额外的屏幕截图,但如果您不知道项目的顺序或如果顺序容易改变,这可能会很有用。

【讨论】:

  • 非常感谢您的参考!我找到了有用的工具。我使用了 find(img) 然后 getTarget();将这些位置声明为参数以执行 dragDrop(),同时使用 offset() 拖放到其他位置。
  • @PetIbaño 完全不用担心。很高兴这有帮助。使用 Sikuli 取得良好结果的方法有很多,如果您卡住或寻找更多信息/示例,请随时在此处发布更多问题(或将 cmets 留在博客中)。
猜你喜欢
  • 2016-11-09
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多