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

Selenium C#结合NUnit实现逐页查找指定文本的测试功能如何实现

解决思路

continue不生效的核心原因是:continue关键字只能在for、while等循环结构中使用,你当前的代码只有单次if-else判断,没有外层循环包裹,自然无法实现重复执行文本校验的逻辑。

你需要添加循环结构,同时补充下一页不存在的终止条件、页面加载等待逻辑,避免出现无限循环、页面未加载完成就判断的问题。

完整实现代码
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using SeleniumExtras.WaitHelpers;

[Test]
public void CheckTargetTextTest()
{
    IWebDriver webDriver = new ChromeDriver();
    // 配置10秒显式等待,避免页面未加载完成就操作导致报错
    WebDriverWait wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(10));
    string targetText = "Super Handy";

    try
    {
        webDriver.Navigate().GoToUrl("https://localhost:xxxxx/");
        
        // 循环遍历所有页面
        while (true)
        {
            // 等待页面完全加载完成再判断文本
            wait.Until(d => ((IJavaScriptExecutor)d).ExecuteScript("return document.readyState").ToString() == "complete");
            
            // 判断当前页是否存在目标文本
            if (webDriver.PageSource.Contains(targetText))
            {
                Assert.Pass($"已定位到目标文本:{targetText}");
            }

            // 未找到文本则尝试定位下一页按钮
            try
            {
                var nextPageBtn = wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//svg[@class='mud-icon-root mud-svg-icon mud-inherit-text mud-icon-size-medium']")));
                // 下一页按钮置灰不可点击时,说明已经到最后一页,跳出循环
                if (!nextPageBtn.Enabled)
                {
                    break;
                }
                nextPageBtn.Click();
            }
            catch (WebDriverTimeoutException)
            {
                // 超时找不到下一页按钮,说明已经到最后一页,跳出循环
                break;
            }
        }

        // 遍历完所有页面都未找到文本,测试失败
        Assert.Fail($"全部页面检索完成,未找到目标文本:{targetText}");
    }
    finally
    {
        // 测试结束释放资源
        webDriver.Quit();
        webDriver.Dispose();
    }
}
注意事项
  • 提前安装Selenium.Support和Selenium.Extras.WaitHelpers NuGet包,即可使用代码中的显式等待相关方法
  • 如果需要避免误判目标文本出现在标签属性、注释中,可以将webDriver.PageSource.Contains(targetText)替换为webDriver.FindElements(By.XPath($"//*[contains(text(),'{targetText}')]")).Count > 0,仅校验页面可见文本
  • 必须保留终止判断和异常捕获逻辑,避免所有页面都没有目标文本时程序无限循环或抛出未处理异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 11:15:02