【问题标题】:How to grab just the first 3 elements in the table? Selenium Web Driver如何只获取表格中的前 3 个元素? Selenium 网络驱动程序
【发布时间】:2020-03-13 12:24:51
【问题描述】:

我只想获取每行的前 3 个 <td> 元素。

例如:“Vanessa 17 社会学”、“Mike 18 数学”和“Sam 18 英语”

如何在 Selenium 中使用 Web 驱动程序执行此操作。

<table id= "table3">
   <thead> </thead>
  <tbody>
    <tr class="odd"> 
        <td> Vanessa   </td>
        <td> 17 </td>
        <td> Sociology </td>
        <td> Female </td>
        <td> Student </td>
   </tr>
    <tr class="even"> 
        <td> Mike   </td>
        <td> 18 </td>
        <td> Maths </td>
        <td> Male </td>
        <td> Student </td>
   </tr>
    <tr class="odd"> 
        <td> Sam   </td>
        <td> 18 </td>
        <td> English </td>
        <td> Female </td>
        <td> Student </td>
   </tr>
  </tbody>
</table>

目前我只有这个: var mainStudents = driver.FindElements(By.Id("table3"));

正如预期的那样,这将返回整个表,包括我不想要的 &lt;th&gt; 和所有 &lt;td&gt;

【问题讨论】:

  • 创建一个新集合,循环访问mainStudents,获取您想要的内容并添加到您的新集合中?

标签: c# selenium selenium-webdriver webdriver element


【解决方案1】:

我以这种方式抓取了所有元素,然后通过计数循环遍历它们以获得我需要的结果。

IList<IWebElement> trList = driver.FindElements(By.XPath("//table[@id='table3']//tr//td[position()<4]"));
int count = 0;
foreach (var trElement in trList)
{

    Console.Write(trElement.Text  + " ");
    count++;
    if (count == 3)
    {
        count = 0;
        Console.WriteLine("");

    }
}

【讨论】:

  • 如有错误请做必要的C#相关语法修正
【解决方案2】:

下面的 xpath 将在每行中获取前 3 列。您必须获取行数,然后对其进行迭代。

//tbody/tr[row_number]/td[position()<4]

运行 jquery 并获得所需的输出很容易,如下所示。

您可以参考this 了解如何在您的 Selenium C# 程序中运行 jquery。您可以根据行号在脚本中构建 jquery 字符串,然后将其作为查询发送,如下所示。

var jqf = new JQueryFactory(driver); //Create the jQueryFactory
# write the loop here
   # with in the loop
   var row_text = jqf.Query("//tbody/tr[row_number]/td[position()<4]");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 2011-07-11
    • 1970-01-01
    相关资源
    最近更新 更多