单击使用sikuli多次使用的特定下拉项

时间:2017-11-21 14:55:33

标签: java automation sikuli

我在使用sikuli时遇到了问题。

在随附的工具栏图像中,我有三次相同的下拉菜单用于不同的目的。使用sikuli我想点击第二个下拉菜单。

我正在使用下面的代码,但问题是在运行代码时,它只点击第一个下拉代码。

我的代码是:

Screen screen = new Screen();

    // Create object of Pattern class and specify the images path

    Pattern image = new Pattern(AppConstant.IMAGE_DIR+"toolbar.png");
    Pattern image2 = new Pattern(AppConstant.IMAGE_DIR+"import-button.png");
    Pattern image3 = new Pattern(AppConstant.IMAGE_DIR+"dropdown.png");
    //screen.wait(image.exact(), 10000);
    screen.find(image);
    screen.find(image2);
    screen.find(image3);

enter image description here

enter image description here

有任何建议怎么做?

由于

3 个答案:

答案 0 :(得分:2)

在具有多个相似模式的场景中,最佳做法是使用周围的元素作为枢轴。在您的情况下,如果您知道在要单击的元素的同一区域中有另一个唯一元素,则可以先找到该唯一元素,然后在唯一元素周围搜索实际需要的元素。

例如,在您的情况下,您需要的下拉菜单按钮旁边有蓝色向下箭头。所以你可以这样做:

ImagePath.setBundlePath("C:\\someDir\\sikulipatterns"); //This is to avoid supplying directory for each pattern
Screen screen = new Screen();

Pattern bigBlueArrowPattern = new Pattern("bigBlueArrow.png");
Pattern dropDownPattern = new Pattern("dropDownArrow.png");

Region bigBlueArrowPatternRegion = screen.find(bigBlueArrowPattern);
bigBlueArrowPatternRegion.grow(50).find(dropDownPattern).highlight(1);

此处,50是要在区域周围添加的边距,因此基本上围绕蓝色箭头延伸区域。我包括highlight(1)只是为了强调确实找到了正确的元素,但你应该删除它并用找到的元素做任何你想做的事。

答案 1 :(得分:0)

首先,您需要该元素的辅助功能ID。如果该元素具有AI(辅助功能ID)。然后,您可以遍历元素并访问所需的索引。

要在Windows中获取AI,您可以使用Inspect(miscrosoft的Ai工具)。在Mac中,您可以使用Appium获取AI。

如果您有权访问开发人员源代码,也可以在那里找到Api。

ELSE:您可以使用以下代码。希望这会对你有所帮助。

      Iterator <Match> matches  = screen.findAll("dropdown.png"); // s is screen
      Pattern pButton = new Pattern("dropdown.png");


      while (matches.hasNext()) {

        Match m = matches.next(); 
        i++;
        if(i==3) {

            screen.click(m); // click on drop-down
            Thread.sleep(1000);
            break;
        }   
    }

答案 2 :(得分:0)

您可以使用内置的findAll和getlastMatches方法,然后单击您想要的方法。

icons = findAll(image3) mm = list(getLastMatches()) click(mm[2])