繁体   English   中英

如何在 c# selenium 中获取表数据并将其保存在任何文档中

[英]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">&nbsp;</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&amp;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&amp;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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM