如何在Java的try-catch块中执行多个操作?

huangapple go评论108阅读模式
英文:

How to do multiple actions in java try catch?

问题

我有一个页面,一旦用户登录,根据业务逻辑,它会动态显示以下三种操作之一:

  1. 显示“添加”链接 - 这样我就可以单击它并执行一些添加逻辑。
    (或者)
  2. 禁用“添加”按钮并显示无法添加更多用户的消息 - 如果是这样,那么我需要检查是否显示了某些消息。
    (或者)
  3. 显示“链接新用户”按钮 - 这样我就可以单击它并执行一些链接新用户的逻辑。

不要单独编写每种情况,我如何在一个基本逻辑中实现类似于下面的try catch中的内容:

try {
    // 执行“添加”链接逻辑
} catch (Exception e) {
    // (或者)验证“添加”链接是否被禁用,并检查是否显示了错误消息
} catch (Exception e) {
    // (或者)执行“链接新用户”按钮逻辑
}

任何帮助都将不胜感激。

英文:

I have a page once user login, based on the business logic, it displays either of three actions dynamically.

  1. It displays 'Add' Link - So i can click on it and do some add logic.
    (OR)
  2. It Disables 'Add' button and says no user can be added more - If so, then i need to check some message is displayed.
    (OR)
  3. It displays 'Link New' button - So i can click on it and do some linking new user logic.

Instead of writing each case separately, how can i achieve in one base logic something in try catch like below

try {
    // do the 'Add' link logic
} catch (Exception e) {
    // (OR) do verify the 'Add' link is disabled and check the error message is displayed
} catch (Exception e) {
    // (OR) do the 'Link New' button logic
}

any help is appreciated.

答案1

得分: 1

检查异常来处理操作是一种反模式。异常用于处理错误,在这种情况下,期望的行为是不同的系统行为。

我建议使用if else来实现您的逻辑,例如:

List<WebElement> addButtons = driver.findElements(new By.ByCssSelector(selector));
boolean buttonIsEnabled = !addButtons.isEmpty() && addButtons.get(0).isEnabled(); // 这段代码在您的情况下可能会有所不同,根据元素的实现方式

if (!addButtons.isEmpty() && buttonIsEnabled) {
    // 它显示 'Add' 链接 - 因此我可以点击它并执行一些添加逻辑
} else if (!addButtons.isEmpty()) {
    // 它禁用 'Add' 按钮并显示不能再添加用户 - 如果是这样,那么我需要检查是否显示了某些消息。
} else {
    // 它显示 'Link New' 按钮 - 因此我可以点击它并执行一些链接新用户的逻辑。
}

因此,在这种情况下,您可以在一个情况下实现所有逻辑,而无需捕获任何异常,并检查元素的正确状态。

英文:

Checking actions by handling exceptions is anti-pattern. Exceptions are used to handle errors, and is this case different system behaviour is expected behaviour.

I suggest to implement your logic, using if else, like

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-js -->

List&lt;WebElement&gt; addButtons = driver.findElements(new By.ByCssSelector(selector);
boolean buttonIsEnabled = !addButtons.isEmpty() &amp;&amp; addButtons.get(0).isEnabled(); // this code can be different in your case, based on element implementation

if(!addButtons.isEmpty() &amp;&amp; buttonIsEnabled) {
// It displays &#39;Add&#39; Link - So i can click on it and do some add logic
} else if (!addButtons.isEmpty()) {
// It Disables &#39;Add&#39; button and says no user can be added more - If so, then i need to check some message is displayed.
} else {
// It displays &#39;Link New&#39; button - So i can click on it and do some linking new user logic.
}

<!-- end snippet -->

So in this case you would achieve all your logic in one case without catching anything and by checking elements proper states.

huangapple
  • 本文由 发表于 2023年7月11日 04:12:53
  • 转载请务必保留本文链接:https://go.coder-hub.com/76657038.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定