Selenium Blazor自动化测试如何在try/catch外部访问块内动态元素对象
你遇到的是C#的变量作用域问题,在try/catch代码块内部声明的变量仅在块内部有效,要在块外使用只需要提前在try外部声明变量即可。同时你需要的备选元素可见性校验也可以在catch块中加入,修改后的代码如下:
// 提前在try外部声明Field变量 IWebElement Field = null; try { Field = webDriver.FindElement(By.XPath(selector)); Field.SendKeys(textToType); } catch (Exception e) { // 定位备选元素 IWebElement backupField = webDriver.FindElement(By.XPath("//div[@class='ql-editor ql-blank']//p")); // 校验备选元素是否可见 if (backupField.Displayed) { Field = backupField; Field.SendKeys(textToType); } else { // 不可见则抛出原有异常 throw e; } } // 可选:增加非空判断避免极端场景下空引用 if (Field == null) { throw new Exception("未找到可使用的目标元素"); } string checkText = Field.GetAttribute("value"); string checkInstruction = Field.Text;
说明:
- 提前声明的Field变量作用域覆盖了try/catch块和后续的代码逻辑,两个分支的赋值都可以被后续代码读取到
- catch块中单独声明backupField做可见性校验,只有符合可见要求才会赋值给外部的Field变量,不符合要求直接抛出异常,完全匹配你的需求
内容的提问来源于stack exchange,提问作者Beardy
相关产品推荐
相关产品推荐

