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.WaitHelpersNuGet包,即可使用代码中的显式等待相关方法 - 如果需要避免误判目标文本出现在标签属性、注释中,可以将
webDriver.PageSource.Contains(targetText)替换为webDriver.FindElements(By.XPath($"//*[contains(text(),'{targetText}')]")).Count > 0,仅校验页面可见文本 - 必须保留终止判断和异常捕获逻辑,避免所有页面都没有目标文本时程序无限循环或抛出未处理异常
内容的提问来源于stack exchange,提问作者user6353586
相关产品推荐
相关产品推荐

