我是我公司的自動化工程師。最近,我寫了一段代碼,我的經理絕對不會接受。如何簡化類似if語句的長列表?
我被要求爲涉及GUI不同部分的測試用例編寫一些腳本。我的經理不接受的部分代碼是if/else
聲明,旨在檢查GUI中當前的提示語言。
我被指示使用Sikuli,因此,我知道應用程序當前設置的語言非常重要,所以我的腳本可以單擊正確的按鈕(根據語言而改變)。
我的想法是,代碼遍歷if/else
語句,然後指向正確的按鈕。例如:if/else
聲明確定「ok」按鈕目前是Suomi翻譯,因此它將比單擊正確的按鈕。
這裏是我的代碼示例:
switch (button) {
case "ok":
if (s.exists("imagerepo/language/catalan_ok.png") != null) {
s.click("imagerepo/language/catalan_ok.png");
} else if (s.exists("imagerepo/language/suomi_ok.png") != null) {
s.click("imagerepo/language/suomi_ok.png");
} else if (s.exists("imagerepo/language/italian_ok.png") != null) {
s.click("imagerepo/language/italian_ok.png");
} else if (s.exists("imagerepo/language/portuguese_ok.png") != null) {
s.click("imagerepo/language/portuguese_ok.png");
} else if (s.exists("imagerepo/language/english_ok.png") != null) {
s.click("imagerepo/language/english_ok.png");
} else if (s.exists("imagerepo/language/dutch_ok.png") != null) {
s.click("imagerepo/language/dutch_ok.png");
} else if (s.exists("imagerepo/language/spanish_ok.png") != null) {
s.click("imagerepo/language/spanish_ok.png");
} else if (s.exists("imagerepo/language/french_ok.png") != null) {
s.click("imagerepo/language/french_ok.png");
} else if (s.exists("imagerepo/language/latina_ok.png") != null) {
s.click("imagerepo/language/latina_ok.png");
} else if (s.exists("imagerepo/language/chinese_ok.png") != null) {
s.click("imagerepo/language/chinese_ok.png");
}
break;
...etc..
我與上面的代碼唯一的抱怨是,它是很醜陋。在功能上,它完全符合我的願望,100%的時間。
編輯:我覺得有一個開關,適應潛在的變化按鈕會比有10個開關相同的按鈕更好。可以說,與我剛纔所說的一樣,如果我正在編寫腳本,我總是會知道系統將會使用什麼語言。
如果這是一個糟糕的代碼示例,我可以做些什麼來決定哪個「形式」的按鈕,我需要按?
現在值得注意的是,我正在尋找的答案實際上並不涉及到測試,而是如何最優地執行上述if/else
塊的功能?
圖像路徑可以考慮使用switch語句! – TangledUpInBlue
@TangledUpInBlue它實際上已經在「ok」開關中了(編輯該部分,如果這很重要,我會把它扔回去)。所以當我用「ok」參數調用開關時,它會點擊正確的「ok」按鈕。 – jagdpanzer
我的一般經驗法則是,如果if語句佔用3行以上,那麼可能有更好的方法,或者我應該使用'private boolean'方法使其可讀。我將它作爲'isOkPng()'方法。弗拉德的答案可能是最適合這種情況的。 – SGM1