Selenium C#获取表格第二列值并转为字符串列表求助
解决Selenium获取表格第二列并转为字符串列表的问题
我来帮你修正代码里的问题,顺利实现获取表格第二列数据并转为字符串列表的需求,同时完善你的搜索功能测试逻辑:
首先先指出你当前代码里的几个核心问题:
- 遍历行时错误地从整个
tableElement查找所有td,而非当前行,导致每次拿到的是全表单元格而非当前行的 - 索引使用错误:HTML元素索引从0开始计数,第二列对应的索引应该是
[1],不是[2] - 原代码里直接对元素集合调用
ToString(),无法拿到单元格的文本内容
下面是修正后的完整测试代码,我标注了关键修改点:
public void Search_XE_with_Name(String Name) { Login(); driver.Navigate().GoToUrl(homeURL + "/app/admin/xe-group11"); driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(15); Thread.Sleep(8000); //Act driver.FindElement(By.Name("xE_NAME")).Clear(); driver.FindElement(By.Name("xE_NAME")).SendKeys(Name); driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(7); IWebElement ele = driver.FindElement(By.XPath("/html/body/app-root/ng-component/div/div/div[2]/ng-component/form/div/div[1]/div/div/div/span[3]/button/i")); IJavaScriptExecutor executor = (IJavaScriptExecutor)driver; executor.ExecuteScript("arguments[0].click();", ele); driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); IWebElement tableElement = driver.FindElement(By.XPath("/html/body/app-root/ng-component/div/div/div[2]/ng-component/div[2]/div/p-table/div/div/div/div[2]/table/tbody")); IList<IWebElement> rows = tableElement.FindElements(By.TagName("tr")); List<string> Code1 = new List<string>(); foreach (IWebElement row in rows) { // 关键修改1:从当前遍历的row中获取该行的所有单元格 IList<IWebElement> cells = row.FindElements(By.TagName("td")); // 关键修改2:判断单元格数量足够,再取第二列(索引1)的文本,避免索引越界 if (cells.Count > 1) { // 去除文本首尾空格,避免因空格导致断言失败 string secondColumnText = cells[1].Text.Trim(); Code1.Add(secondColumnText); } } // 遍历列表做断言,添加错误提示方便排查问题 foreach (String codes in Code1) { Assert.AreEqual(codes, Name, $"搜索结果[{codes}]与输入值[{Name}]不匹配"); } driver.Close(); }
额外优化建议:
- 尽量避免使用绝对XPath,维护性极差,建议换成相对XPath或CSS选择器,比如定位表格可以用
By.CssSelector("tbody")(结合更上层的唯一父元素) - 减少
Thread.Sleep()的使用,换成WebDriverWait显式等待,更稳定可靠,示例:WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(d => d.FindElement(By.Name("xE_NAME")).Displayed); - 如果搜索结果可能为空,建议先判断
Code1是否为空,避免空遍历无意义的断言
内容的提问来源于stack exchange,提问作者Bukha
相关产品推荐
相关产品推荐

