私は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 には、3 つのシナリオが考えられます (このコードが機能する場所)。
- 画面Aがポップアップ
- 画面Bがポップアップ
- 1 でも 2 でもなく、代わりに「次へ」が表示されます
したがって、 をチェックしScreen A
、そうでない場合は をチェックしScreen B
、そうでない場合は をチェックしNext
、そうでない場合は、試行回数を超えるまでサイクルを繰り返します。つまり、テストが失敗したことを意味します。
Sikuli の動作方法、または少なくとも私が解釈してきた方法では、複数のtry-catch
ステートメントを介してさまざまなループを実行する必要があり、少しずれているように見えます。
PS:上記のコードの背後にある考え方は、それを機能させることです。不明な点がある場合は、明確にするためにお知らせください。