我一直在与SikuliX合作尝试一些 ATDD。当只有我使用它时,该代码运行良好。然而,将下面的代码转移给其他人只会适得其反,不管我对代码的评论有多好。
int numOfTries;
while (!isFinishStage && numOfTries != 3) {
numOfTries++;
try {
temp = new Pattern("imgs/img1.png").similar(0.9f);
s.wait(temp, 1);
s.find(temp);
s.hover(temp);
isFinishStage = true;
break;
}catch (FindFailed ff1) {
try {
temp = new Pattern("imgs/img2").similar(0.5f);
s.wait(temp, 1);
s.find(temp);
s.hover(temp);
isFinishStage = true;
break;
} catch (FindFailed ff2) {
try{
temp = new Pattern("imgs/img3");
s.wait(temp, 1);
s.find(temp);
s.click(temp);
} catch (FindFailed ff3) {
continue;
}
}
}
}
FindFailed
一旦图案/图像无法与屏幕上的任何内容匹配(相似性只是调整容差级别),就会引发异常。对于它正在自动化的当前 GUI,有三种可能的场景(这段代码发挥作用的地方)
- 屏幕 A 弹出
- 屏幕 B 弹出
- 1 或 2 都不是,而是弹出“下一个”
因此我们检查Screen A
,如果没有,我们检查Screen B
,如果没有,我们检查Next
,如果没有,重复循环直到我们超过尝试次数——意味着测试失败。
以 Sikuli 的工作方式或至少我一直在解释它的方式,您将不得不通过多个try-catch
语句执行各种循环,这似乎有点不妥。
PS:上述代码背后的想法是让它工作。如果有任何歧义,请告诉我,以便我澄清。