英文:
How to do multiple actions in java try catch?
问题
我有一个页面,一旦用户登录,根据业务逻辑,它会动态显示以下三种操作之一:
- 显示“添加”链接 - 这样我就可以单击它并执行一些添加逻辑。
(或者) - 禁用“添加”按钮并显示无法添加更多用户的消息 - 如果是这样,那么我需要检查是否显示了某些消息。
(或者) - 显示“链接新用户”按钮 - 这样我就可以单击它并执行一些链接新用户的逻辑。
不要单独编写每种情况,我如何在一个基本逻辑中实现类似于下面的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.
- It displays 'Add' Link - So i can click on it and do some add logic.
(OR) - It Disables 'Add' button and says no user can be added more - If so, then i need to check some message is displayed.
(OR) - 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<WebElement> addButtons = driver.findElements(new By.ByCssSelector(selector);
boolean buttonIsEnabled = !addButtons.isEmpty() && addButtons.get(0).isEnabled(); // this code can be different in your case, based on element implementation
if(!addButtons.isEmpty() && buttonIsEnabled) {
// It displays 'Add' Link - So i can click on it and do some add logic
} else if (!addButtons.isEmpty()) {
// It Disables 'Add' button and says no user can be added more - If so, then i need to check some message is displayed.
} else {
// It displays 'Link New' 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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论