如何忽略Selenium中FindElement()方法抛出的异常?
处理Selenium FindElement抛出异常的实用方案
嘿,我来帮你搞定这个问题~你遇到的情况很典型:目标取消按钮是隐藏元素,调用FindElement时要么找不到元素,要么元素不可交互,直接抛出异常打断程序。下面给你两种实用的处理方式,都能实现忽略异常的需求:
方法一:用try-catch捕获并忽略特定异常
这是最直接的思路,把可能出问题的代码放进try块,然后捕获对应的异常,啥也不做(或者记个日志),让程序继续跑就行。
给你改好的代码:
IWebDriver driver; driver = new ChromeDriver(); driver.Url = "https://upbit.com/exchange?"; try { // 尝试点击那个隐藏的取消按钮 driver.FindElement(By.CssSelector("table>tbody>tr>td:nth-child(6)>a")).Click(); } catch (NoSuchElementException) { // 元素不存在?没关系,跳过就行 } catch (ElementNotInteractableException) { // 元素存在但不可交互(比如隐藏状态)?也跳过 }
小提示:尽量捕获具体的异常类型(比如上面的两种),别直接抓WebDriverException这种大的,不然可能会不小心忽略其他真正需要关注的问题。
方法二:先检查元素是否存在再操作
用FindElements(注意是复数形式)来查找元素,这个方法不会抛出异常,找不到元素就返回空列表。我们先判断列表里有没有元素,有再尝试点击,同时处理可能的交互异常。
示例代码:
IWebDriver driver; driver = new ChromeDriver(); driver.Url = "https://upbit.com/exchange?"; // 先找到所有匹配的取消按钮 var cancelButtons = driver.FindElements(By.CssSelector("table>tbody>tr>td:nth-child(6)>a")); if (cancelButtons.Count > 0) { try { // 点击第一个找到的按钮 cancelButtons[0].Click(); } catch (ElementNotInteractableException) { // 元素是隐藏的点不了?忽略就好 } }
这种方式更稳妥,先避免了“元素不存在”的异常,再处理“元素存在但没法点”的情况,适合对稳定性要求高的场景。
额外提醒
因为你的目标元素是隐藏状态,就算找到了元素,Click()也大概率会抛出ElementNotInteractableException,所以两种方法里都特意加了对这个异常的捕获哦。
内容的提问来源于stack exchange,提问作者김다빈
相关产品推荐
相关产品推荐

