我在使用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);
有任何建议怎么做?
由于
答案 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])