[英]how to get the table data in c# selenium and save it any doc
driver.SwitchTo().Frame("menu");
WebDriverWait wait1 = new WebDriverWait(driver, TimeSpan.FromSeconds(15));
wait1.Until(ExpectedConditions.ElementExists(By.CssSelector("a[href='eventLog.cgi?command=0']")));
driver.FindElement(By.CssSelector("a[href='eventLog.cgi?command=0']")).Click();
driver.SwitchTo().Frame("content");
WebDriverWait wait2 = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait2.Until(ExpectedConditions.ElementExists(By.CssSelector("a[href='cgi-bin/terminal.cgi']")));
IWebElement baseTable = driver.FindElement(By.ClassName("TableText1"));
// gets all table rows
ICollection<IWebElement> rows = baseTable.FindElements(By.TagName("tr"));
// for every row
IWebElement matchedRow = null;
foreach (var row in rows)
{
Console.WriteLine(row.FindElement(By.XPath("td/a")).GetAttribute("href"));
}
首先在 .Frame("content") 中没有找到内容,如果此评论,则在 .FromSeconds(10) 中超时。 如果对此进行了注释,则在 .FindElement(By.ClassName("TableText1") 中找不到任何元素。html 代码在这里
<table class="TableText1" nowrap=""> <tbody><tr> <tr> <td class="Table_Header"> </td><td class="Table_Header"><a href="eventLog.cgi?command=0">User ID</a></td> <td class="Table_Header"><a href="eventLog.cgi?command=0">Name</a></td> <td class="Table_Header"><a href="eventLog.cgi?command=0">Department</a></td> <td class="Table_Header"><a href="eventLog.cgi?command=0">Date Time<img src="/sort_arrow_down.gif" border="0"></a></td> <tr nowrap=""><td class="Table_List">1</td><td class="Table_List"> <a href="employee.cgi?action=modify&rid=14">319</a></td><td class="Table_List">Abul Hosain</td><td class="Table_List">General</td><td class="Table_List">2017/01/29 15:22:33</td></tr> <tr nowrap=""><td class="Table_List_diff">2</td><td class="Table_List_diff"> <a href="employee.cgi?action=modify&rid=49">310</a></td><td class="Table_List_diff">Tabassum Tamanna</td><td class="Table_List_diff">General</td><td class="Table_List_diff">2017/01/29 15:19:50</td></tr> <tr><td colspan="10"><hr></td></tr> <tr> </tr></tbody></table>
希望您切换到正确的frame
。 如果您的文档中有一个以上的框架,并且您已切换到第1帧,则首先需要从第一个框架切换回,如下所示-
driver.SwitchTo().DefaultContent();
然后切换到另一个frame
并执行操作
使用以下代码提取表数据-
IList<IWebElement> allElement = driver.FindElements(By.TagName("td"));
foreach (IWebElement element in allElement )
{
string cellText= element.Text;
Console.WriteLine(cellText);
}
我怀疑问题出在不同的时间范围内……简而言之:
该表可以由客户端库(例如angular,react等)呈现,也可以通过ajax调用从服务器请求...
在检查内容之前,请花点时间 - 给页面一些时间以正确加载自身 。 (尤其是在处理包含大量信息的表或其他控件时)
下面是读取表格内容的 C# 代码
//tbody
IWebElement diagnosticsTableBody = _browser.FindElement(By.XPath("//div[contains(text(),'Diagnostics')]/../..//tbody"));
List<List<string>> diagnosticsTableContent = new List<List<string>>();
int diagnosticsTableRowsCount = diagnosticsTableBody.FindElements(By.XPath("./tr")).Count;
for (int i = 0; i < diagnosticsTableRowsCount; i++)
{
List<IWebElement> rowElements = diagnosticsTableBody.FindElements(By.XPath($".//tr[{i+1}]//td")).ToList();
List<string> diagnosticsRowContent = new List<string>();
for (int j = 0; j < rowElements.Count; j++)
{
diagnosticsRowContent.Add(rowElements[j].Text);
}
diagnosticsTableContent.Add(diagnosticsRowContent);
}
return diagnosticsTableContent;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.