You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:00:06