如何在Sikuli获取图像的坐标?

时间:2016-12-19 08:53:55

标签: python sikuli sikuli-script

我的项目中有这个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()

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

    有没有办法找到(a1)(因为它总是出现在点击(3)之后),保存其坐标并将其用作此类的scrollldown_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上点击并拖动,因为它是我们正在开发的触摸屏产品。

1 个答案:

答案 0 :(得分:2)

实际滚动,就像使用滚动条一样,可能不是最好的解决方案,因为它需要许多因各种原因而容易出现故障的其他操作。在这种情况下我通常建议使用键盘来控制选择。实际上很少有选项,这取决于您的应用程序的行为方式。因此,我将列出可能在您的方案中使用的一些技巧,并确定最适合您的方法。

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

  1. 拆分屏幕,如果您知道您要查找的图案只会出现在某个区域。

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

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

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

    2. 按向下箭头按钮,直到找到所需的项目。这可能会有点慢,可能需要额外的截图,但如果你不知道这些项目的顺序或者是否容易发生变化,可能会有用。