请注意我不是java大师。我可能没有使用正确的术语,我在RFT中学习Java。下面描述的内容与所述完全相同。
在ruby中我们可以像
一样编码(code to execute) if (condition)
我想做同样的事情,因此我的RFT(Rational Functional Tester)代码易于阅读。我将以一种看起来像
的方式调用我的自定义函数 findANDclick(new String[]{"id", "menuButton"});
findANDclick(new String[]{"src", ".*homeicon_calendar.*"});
findANDclick(new String[]{"src", ".*cycle_templates.*"});
但是,如果任何findANDclick函数“失败”,整个RFT脚本需要完成并且不执行任何其他代码。该函数在html页面中搜索对象,如果它没有通过
找到任何对象throws new Exception
throw new Exception("findANDclick: the object was not found");
所以 findANDclick ONLY 的实例会抛出错误,以便执行下一个findANDclick。但如果没有找到并点击上一个对象,则继续寻找下一个对象是没有意义的。
我原以为我可以将变量continue
设置为true,如果抛出异常,findANDclick会将其更新为false。然后我可以做类似
if (continue) { findANDclick(new String[]{"id", "menuButton"});}
if (continue) { findANDclick(new String[]{"src", ".*homeicon_calendar.*"}); }
if (continue) { findANDclick(new String[]{"src", ".*cycle_templates.*"}); }
如果我可以做类似的事情,那将会很棒
{ findANDclick(new String[]{"id", "menuButton"}); } if (continue)
{ findANDclick(new String[]{"src", ".*homeicon_calendar.*"}); } if (continue)
{ findANDclick(new String[]{"src", ".*cycle_templates.*"}); } if (continue)
答案 0 :(得分:5)
那段代码并不漂亮。为什么不简单地抓住Exception
?这就是它们的用途。如下所示:
try {
findANDclick(new String[]{"id", "menuButton"});
findANDclick(new String[]{"src", ".*homeicon_calendar.*"});
findANDclick(new String[]{"src", ".*cycle_templates.*"});
}
catch (Exception e) {
}
如果任何findANDclick调用失败,则后续的调用将不会执行...
顺便说一句,continue
是Java中的保留字,因此您不能将其用作变量名。
答案 1 :(得分:2)
不,你不能这样做。
但是,如果该方法抛出异常,为什么还需要检查continue标志呢?如果findANDclick
失败,它将会停止。
答案 2 :(得分:1)
拉狄克!尝试执行以下示例,只是为了阐明Java异常处理的工作原理。
public class ExceptionHandling {
/*Method that throws exception*/
static void methodOne() throws Exception {
System.out.println("methodOne();");
try {
throw new Exception();
} catch (Exception e) {
System.out.println("Exception caught in methodOne(), worked up, and thrown again.");
throw new Exception();
}
}
static void methodTwo() {
System.out.println("methodTwo();");
}
public static void main(String[] args) {
try {
methodOne();
methodTwo();
} catch (Exception ex) {
System.out.println("Exception caught in main()!");
}
}
}
此示例的输出:
methodOne();
Exception caught in methodOne(), worked up, and thrown again.
Exception caught in main()!
它表明第二种方法永远不会执行,如果第一种方法抛出异常。
P.S。这应该是一个评论。但是丰富的格式化更清晰。
建议的解决方案try {
findANDclick(new String[]{"id", "menuButton"});
findANDclick(new String[]{"src", ".*homeicon_calendar.*"});
findANDclick(new String[]{"src", ".*cycle_templates.*"});
} catch (Exception e) {
// Workup exception somehow.
}
具有优势(您希望从Java开发人员的角度来看):
缺点也很清楚:丑陋的异常处理构造。
但在Java中你无法避免它。这是语言规则。
答案 3 :(得分:0)
如果,则无法使用。您可以使用 do / while 循环,它或多或少地提供您正在寻找的语法。
do { findANDclick(new String[]{"id", "menuButton"}); } while (continue)
do { findANDclick(new String[]{"src", ".*homeicon_calendar.*"}); } while (continue)
do { findANDclick(new String[]{"src", ".*cycle_templates.*"}); } while (continue)
< BTW,就像上面提到的那样,对于变量名,continue是一个糟糕的选择。
答案 4 :(得分:0)
我想你应该试试这个:
String[][] params = {
{"id", "menuButton"},
{"src", ".*homeicon_calendar.*"},
{"src", ".*cycle_templates.*"}
};
for (String[] param : params) {
if ( findANDclick(param) ) break;
}