在Selenium C中检索<span> Text </ span>之间的文本#

Adi*_*Adi 5 html c# selenium-webdriver

我在使用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>
Run Code Online (Sandbox Code Playgroud)

我能够在控制台中打印'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);
        }
Run Code Online (Sandbox Code Playgroud)

我也试过直接从第5列(td)的标签中选择Text,其中包含主题文本(在我的例子中),但没有结果.

我可能在某个地方出错了,或者可能还有其他方法可以做到这一点.

请建议,提前致谢:)

Hol*_*olf 6

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;
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理是将IWebElement作为参数传递给在浏览器中执行的某些JavaScript,它将其视为普通的DOM元素.然后,您可以访问它上面的属性,例如'innerHTML'.

我只是在谷歌浏览器中对此进行了测试,但我认为没有理由不在其他浏览器中使用它.


San*_*rma 1

尝试这个

findElement(By.cssSelector("div.y6>span>b")).getText();
Run Code Online (Sandbox Code Playgroud)

  • 根据最初的问题,这个答案在 C# 世界中根本行不通。 (3认同)