如何简化类似if语句的长列表?

时间:2016-01-13 15:20:56

标签: java if-statement

我是公司的自动化工程师。最近,我写了一段我的经理绝对不接受的代码。

我被要求为涉及不同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块的功能?

2 个答案:

答案 0 :(得分:18)

类似的东西:

String[] languages = {
  "catalan_ok.png",
  "suomi_ok.png",
  //...
}

for (String base : languages) {
  String file = String.format("imagerepo/language/%s", base);
  if (s.exists(file) != null) {
    s.click(file);
    break;
  }
}

也许?未经测试。

答案 1 :(得分:4)

我假设这是国际化的,所以你可以使用每种语言的属性文件,然后得到像这样的图像路径

ResourceBundle bundle = ResourceBundle.getBundle( "messages", userLocale );
s.click(bundle.getString("image"));