如何用C#结合Selenium WebDriver验证产品按名称(A-Z)排序?
在Selenium WebDriver中验证产品按名称升序排列的C#实现
首先优化你现有选择下拉框的代码——Thread.Sleep稳定性差,换成显式等待更可靠:
// 初始化显式等待,超时时间10秒 var wait = new WebDriverWait(TestSetup.driver, TimeSpan.FromSeconds(10)); // 等待下拉框加载完成并点击 IWebElement productSort = wait.Until(d => d.FindElement(By.XPath("//span/select[@data-test='product_sort_container']"))); productSort.Click(); // 等待"A-Z"选项加载完成并点击 IWebElement nameOption = wait.Until(d => d.FindElement(By.XPath("//div/span/select/option[@value='az']"))); nameOption.Click();
接下来是核心的排序验证逻辑,步骤如下:
- 获取当前页面所有产品的名称文本
- 创建该列表的副本并按字母升序排序
- 对比原列表和排序后的列表是否完全一致
完整验证代码:
// 等待产品列表加载完成 wait.Until(d => d.FindElements(By.ClassName("inventory_item_name")).Count > 0); // 提取所有产品名称文本并去空格 List<string> actualProductNames = TestSetup.driver.FindElements(By.ClassName("inventory_item_name")) .Select(e => e.Text.Trim()) .ToList(); // 创建排序后的对比列表 List<string> sortedProductNames = new List<string>(actualProductNames); sortedProductNames.Sort(); // 验证排序正确性(以NUnit断言为例,其他测试框架可替换对应断言方法) Assert.AreEqual(sortedProductNames, actualProductNames, "产品未按名称A-Z升序排列");
关键说明
- 显式等待通过
WebDriverWait等待元素可交互/存在,避免固定等待时间带来的不稳定问题 - 用
Trim()去除名称文本的首尾空格,避免干扰排序对比 - List的
Sort()方法默认按字符串Unicode编码升序排序,符合A-Z的排序需求 - 断言会在排序不符时抛出明确错误提示,方便定位问题
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

