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

Selenium C#断言逻辑异常:第二个断言条件未执行

问题根源

你代码里的第二个断言没执行,核心原因是**Assert.Pass和Assert.Fail会直接终止当前测试方法**——不管第一个if/else分支走哪条,执行到这两个断言后,后面的代码都不会再运行。

修复方案

把主动调用Assert.Pass/Assert.Fail的逻辑,换成基于条件的断言(比如Assert.IsTrue),这样只有当断言失败时才会终止测试,正常情况下会继续执行后续代码。

修正后的代码

foreach (var element in options)
{
    // 先断言目标文本存在,失败时抛出指定错误
    Assert.IsTrue(element.Text.Contains("5/1, test road"), "Test has not been selected from the list");
    
    // 执行点击操作
    element.Click();
    var Add = driver.FindElement(By.CssSelector(".ui-click__confirm"));
    Add.Click();
    
    // 验证关联元素的显示状态
    var AssociatedProperty = driver.FindElement(By.CssSelector(".ui-click__confirm--has-test"));
    Assert.IsTrue(AssociatedProperty.Displayed, "Test record has not passed");
}

关键改动说明

  • 去掉了Assert.Pass:测试方法正常执行完所有断言就会自动标记为Pass,不需要主动调用Assert.Pass。
  • 用Assert.IsTrue替代Assert.Fail:把分支判断转换成直接断言条件,既明确了校验逻辑,又不会提前终止测试流程。
  • 调整逻辑顺序:先断言文本存在,再执行操作,最后校验元素显示状态,流程更清晰。

额外优化建议

如果options集合里有多个元素,当前的foreach逻辑可能会有问题——只要第一个元素不匹配,断言就会失败。如果你的需求是找到匹配的元素并执行操作,应该先定位目标元素再处理,避免不必要的遍历:

// 先找到匹配的元素
var targetElement = options.FirstOrDefault(e => e.Text.Contains("5/1, test road"));
// 断言元素存在
Assert.IsNotNull(targetElement, "Test has not been selected from the list");

// 执行点击操作
targetElement.Click();
var Add = driver.FindElement(By.CssSelector(".ui-click__confirm"));
Add.Click();

// 验证关联元素状态
var AssociatedProperty = driver.FindElement(By.CssSelector(".ui-click__confirm--has-test"));
Assert.IsTrue(AssociatedProperty.Displayed, "Test record has not passed");

内容的提问来源于stack exchange,提问作者user21175930

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:44:54