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
相关产品推荐
相关产品推荐

