1 回答

TA貢獻1770條經驗 獲得超3個贊
您的代碼中至少存在兩個問題:
你的 if 條件永遠不會滿足,因為你設置了 did = true。
您還需要抓住第二個
SessionNotCreatedException
才能重試。
代碼
這是固定的例子。正如您所看到的,我創建了一個單獨的方法來處理設備選擇。當使用第一個設備時,將處理異常并使用第二個設備。如果還使用了第二個設備,則該錯誤SessionNotCreatedException
將被拋出,并且必須從調用者處捕獲。在 catch 塊中,您可以添加等待,因為設備可能仍會使用一段時間。
public class how_to_play_skip_test {
private RemoteWebDriver driver = null;
private static final int MAX_ATTEMPTS = 10;
@BeforeClass
public void setup()throws Exception{
int attempts = 0;
boolean done = false;
while ((MAX_ATTEMPTS > attempts) && !done) {
try {
this.driver = getDriver(config.desiredCapabilitites_galaxyss7());
done = true;
} catch (SessionNotCreatedException e) {
System.out.println("Trying again...");
//Maybe wait here some time?
}
attempts ++;
}
}
private RemoteWebDriver getDriver() throws SessionNotCreatedException {
if(capabilities == null){
throw new IllegalArgumentException("Capabalities must not be null");
}
try {
return new RemoteWebDriver(config.kobitonServerUrl(), config.desiredCapabilitites_galaxyss7());
} catch(SessionNotCreatedException ex){
System.out.println("Secondary device being used");
return new RemoteWebDriver(config.kobitonServerUrl(), config.desiredCapabilitites_galaxys7())
}
}
...
}
提示
如果您想使用兩個以上的設備,您應該考慮一種更動態的方式,例如循環遍歷包含每個設備功能的列表。
如果您對 while 或 if 條件感到困惑,您可以嘗試使它們更易于理解(否定布爾值,刪除布爾值,...)。
這是一個沒有變量的例子done:
int max_attempts = 10;
int attempts = 0;
while(attempts < MAX_ATTEMPTS){
try{
//do something
attempts += MAX_ATTEMPS; //done
}catch(Exception ex){
//do something
}
attempts++;
}
添加回答
舉報