我在使用 Selenium webdriver-C# 从未读邮件中检索邮件的主题标题时遇到问题。
这是 HTML 代码:
<div class="ae4 UI UJ" gh="tl">
<div class="Cp">
<div>
<table id=":8e" class="F cf zt" cellpadding="0">
<colgroup>
<tbody>
<tr id=":8d" class="zA zE">
<td class="PF xY"></td>
<td id=":8c" class="oZ-x3 xY" style="">
<td class="apU xY">
<td class="WA xY">
<td class="yX xY ">
<td id=":87" class="xY " role="link" tabindex="0">
<div class="xS">
<div class="xT">
<div id=":86" class="yi">
<div class="y6">
**<span id=":85">
<b>hi</b>
</span>**
<span class="y2">
</div>
</div>
</div>
</td>
<td class="yf xY "> </td>
<td class="xW xY ">
</tr>
我能够在控制台中打印“emailSenderName”,但无法打印“text”(主题行,在本例中为“hi”),因为它位于 span 标签之间。这是我的代码。
//Try to Retrieve mail Senders name and Subject
IWebElement tbl_UM = d1.FindElement(By.ClassName("Cp")).FindElement(By.ClassName("F"));
IList<IWebElement> tr_ListUM = tbl_UM.FindElements(By.ClassName("zE"));
Console.WriteLine("NUMBER OF ROWS IN THIS TABLE = " + tr_ListUM.Count());
foreach (IWebElement trElement in tr_ListUM)
{
IList<IWebElement> td_ListUM = trElement.FindElements(By.TagName("td"));
Console.WriteLine("NUMBER OF COLUMNS=" + td_ListUM.Count());
string emailSenderName = td_ListUM[4].FindElement(By.ClassName("yW")).FindElement(By.ClassName("zF")).GetAttribute("name");
Console.WriteLine(emailSenderName);
string text = td_ListUM[5].FindElement(By.ClassName("y6")).FindElement(By.TagName("span")).FindElement(By.TagName("b")).Text;
Console.WriteLine(text);
}
我也尝试过直接从第 5 列 (td) 的标签中选择文本,其中包含主题文本(在我的例子中),但没有结果。
我可能在某个地方出错了,或者可能有其他方法。
请建议,提前致谢:)
最佳答案
Selenium Web Driver 的 Java 实现中可用的“getText”方法似乎比 C# 中可用的等效“Text”属性做得更好。
我找到了一种实现相同目的的方法,虽然有些复杂,但效果很好:
public static string GetInnerHtml(this IWebElement element)
{
var remoteWebDriver = (RemoteWebElement)element;
var javaScriptExecutor = (IJavaScriptExecutor) remoteWebDriver.WrappedDriver;
var innerHtml = javaScriptExecutor.ExecuteScript("return arguments[0].innerHTML;", element).ToString();
return innerHtml;
}
它的工作原理是将 IWebElement 作为参数传递给在浏览器中执行的某些 JavaScript,浏览器将其视为普通 DOM 元素。然后您可以访问它的属性,例如“innerHTML”。
我只在 Google Chrome 中对此进行了测试,但我看不出为什么这在其他浏览器中不起作用。
关于c# - 在 Selenium C# 中检索 <span>Text</span> 之间的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14057699/