【问题标题】:how to loop through a table in selenium?如何遍历硒中的表格?
【发布时间】:2016-08-01 02:14:51
【问题描述】:

我是 selenium 的新手,我有一个问题,我需要遍历一个表并获取该表中的值

<table>
  <tr>
    <td style="width:5px">
    </td>
    <td>
      <table class="reportTable" id="Allocations">
        <tbody>
          <tr class="table_header">
            <td style="width:5px;">
              <img class="HideImage" src="Images/minus.gif" alt="Hide Details">
            </td>
            <td style="width:33%">
              Channel of Trade</td>
            <td style="width:33%">
              PILOT TRAVEL CENTE-122194-W/S - UNB Contract</td>
            <td style="width:33%">
              <span id="TruckLoading_10142602_Info" style="COLOR: white;text-decoration:underline;cursor:pointer">
Trucks loading - 0</span>
            </td>
          </tr>
          <tr>
            <td style="width:5px;">
            </td>
            <td colspan="3">
              <table rules="rows" class="reportTable" font-family="Tahoma" pagerstyle-visible="False" id="TerminalGrid" border="1">
                <tbody>
                  <tr class="productlabel2" align="left">
                    <td scope="col" style="width:5px;">
                    </td>
                    <td>
                      Product Details</td>
                  </tr>
                  <tr class="hdr2">
                    <td scope="col" style="width:5px;">
                    </td>
                    <td scope="col">
                      Fuel Type</td>
                  </tr>
                  <tr class="FuelTypeHeader">
                    <td style="width:5px;border:none" onclick="ShowHideDetails(this)">
                      <img class="HideImage" src="Images/minus.gif" alt="Hide Details" id="Fuel_Img">
                    </td>
                    <td style="border-left:none;border-right:none; padding-left:3px">
                      <table id="C_V" style="width:100%;border-collapse:collapse; border:none; padding:0px 0px 0px 0px; margin:0px 0px 0px 0px;">
                        <tbody>
                          <tr>
                            <td style="width:20em;">
                              <span>
DSL - LSD/ULSD</span>
                            </td>
                            <td style="width:60em;">
                              <span id="CVSpan">
<span style="margin-right:10px">
<span style="float:left;padding-top:3px">
Currently:</span>
                              <span style="float:left;width:6em;padding-top:2px; margin-left:5px; margin-right:5px;margin-top:2px;padding-bottom:2px; text-align:center; background-color:#00FF00;">
Available</span>
                              <span style="float:left; padding-top:3px">
<b>
30,839</b>
gallons remaining until Mon 8/1/2016 12:00:00 AM CDT</span>
                              </span>
                              </span>
                            </td>
                            <td align="right">
                            </td>
                          </tr>
                        </tbody>
                      </table>
                    </td>
                  </tr>
                  <tr style="">
                    <td style="width:5px;">
                    </td>
                    <td>
                      <table id="ProdDetails" rules="all" pagerstyle-visible="False" style="width: 100%" border="1">
                        <tbody>
                          <tr class="table_header2">
                            <th scope="col">
                              Nominated Volume</th>
                            <th scope="col">
                              Allocation Period</th>
                            <th scope="col">
                              Allocation %</th>
                            <th scope="col">
                              Allocation Start Amt</th>
                            <th scope="col">
                              Allocation Lifted</th>
                            <th scope="col">
                              Allocation Remaining</th>
                            <th scope="col">
                              GPO Allowance</th>
                            <th scope="col" class="center width8em">
                              GPO Remaining</th>
                            <th scope="col">
                              Category Status</th>
                            <th scope="col">
                              Ratability Status</th>
                            <th scope="col">
                              Next Scheduled Refresh Date</th>
                            <th scope="col">
                              Reference ID</th>
                          </tr>
                          <tr class="tablerow2">
                            <td class="right width8em">
                              41,118</td>
                            <td class="center width10em">
                              Daily</td>
                            <td class="right">
                              75%</td>
                            <td class="right">
                              30,839</td>
                            <td class="right">
                              0</td>
                            <td class="right">
                              30,839</td>
                            <td class="right">
                              0</td>
                            <td class="right width8em bold" id="GPO_Rmd">

                              0
                            </td>
                            <td class="center" style="background-color:#00FF00;">
                              Available</td>
                            <td class="center" style="background-color:#0099CC;">
                              Below Trend</td>
                            <td class="center width20em">
                              8/1/2016 12:00:00 AM CDT</td>
                            <td class="center width20emWordWrap">
                              DSL - LSD/ULSD</td>
                          </tr>
                          <tr class="tablerow2">
                            <td class="right width8em">
                              287,826</td>
                            <td class="center width10em">
                              Weekly</td>
                            <td class="right">
                              125%</td>
                            <td class="right">
                              359,783</td>
                            <td class="right">
                              114,083</td>
                            <td class="right">
                              245,700</td>
                            <td class="right">
                              0</td>
                            <td class="right width8em bold" id="GPO_Rmd">

                              0
                            </td>
                            <td class="center" style="background-color:#00FF00;">
                              Available</td>
                            <td class="center" style="background-color:#0099CC;">
                              Below Trend</td>
                            <td class="center width20em">
                              8/4/2016 12:00:00 AM CDT</td>
                            <td class="center width20emWordWrap">
                              DSL - LSD/ULSD</td>
                          </tr>
                          <tr class="tablerow2">
                            <td class="right width8em">
                              1,233,540</td>
                            <td class="center width10em">
                              Monthly</td>
                            <td class="right">
                              115%</td>
                            <td class="right">
                              1,418,571</td>
                            <td class="right">
                              1,361,264</td>
                            <td class="right">
                              57,307</td>
                            <td class="right">
                              0</td>
                            <td class="right width8em bold" id="GPO_Rmd">

                              0
                            </td>
                            <td class="center" style="background-color:#FFFF00;">
                              Low</td>
                            <td class="center" style="background-color:#00CC00;">
                              On Track</td>
                            <td class="center width20em">
                              8/1/2016 12:00:00 AM CDT</td>
                            <td class="center width20emWordWrap">
                              DSL - LSD/ULSD</td>
                          </tr>
                        </tbody>
                      </table>
                    </td>
                  </tr>
                  <tr id="GPO_Row">
                    <td style="width:5px;">
                    </td>
                    <td>
                    </td>
                  </tr>
                </tbody>
              </table>
            </td>
          </tr>
          <tr class="table_header">
            <td style="width:5px;" onclick="ShowHideDetails(this)">
              <img class="HideImage" src="Images/minus.gif" alt="Hide Details">
            </td>
            <td style="width:33%">
              Channel of Trade</td>
            <td style="width:33%">
              PILOT TRAVEL CENTE-122194-W/S - UNB Fwrd Cont</td>
            <td style="width:33%">
              <span id="TruckLoading_17049566_Info" style="COLOR: white;text-decoration:underline;cursor:pointer" onclick="GetTruckLoadingInformationJS(this,17049566);">
Trucks loading - 0</span>
            </td>
          </tr>
          <tr>
            <td style="width:5px;">
            </td>
            <td colspan="3">
              <table rules="rows" class="reportTable" font-family="Tahoma" pagerstyle-visible="False" id="TerminalGrid" border="1">
                <tbody>
                  <tr class="productlabel2" align="left">
                    <td scope="col" style="width:5px;">
                    </td>
                    <td>
                      Product Details</td>
                  </tr>
                  <tr class="hdr2">
                    <td scope="col" style="width:5px;">
                    </td>
                    <td scope="col">
                      Fuel Type</td>
                  </tr>
                  <tr class="FuelTypeHeader">
                    <td style="width:5px;border:none" onclick="ShowHideDetails(this)">
                      <img class="HideImage" src="Images/minus.gif" alt="Hide Details" id="Fuel_Img">
                    </td>
                    <td style="border-left:none;border-right:none; padding-left:3px">
                      <table id="C_V" style="width:100%;border-collapse:collapse; border:none; padding:0px 0px 0px 0px; margin:0px 0px 0px 0px;">
                        <tbody>
                          <tr>
                            <td style="width:20em;">
                              <span>
DSL - LSD/ULSD</span>
                            </td>
                            <td style="width:60em;">
                              <span id="CVSpan">
<span style="margin-right:10px">
<span style="float:left;padding-top:3px">
Currently:</span>
                              <span style="float:left;width:6em;padding-top:2px; margin-left:5px; margin-right:5px;margin-top:2px;padding-bottom:2px; text-align:center; background-color:#FF0000;">
Out</span>
                              <span style="float:left; padding-top:3px">
<b>
0</b>
gallons remaining until Mon 8/1/2016 12:00:00 AM CDT</span>
                              </span>
                              </span>
                            </td>
                            <td align="right">
                            </td>
                          </tr>
                        </tbody>
                      </table>
                    </td>
                  </tr>
                  <tr style="">
                    <td style="width:5px;">
                    </td>
                    <td>
                      <table id="ProdDetails" rules="all" pagerstyle-visible="False" style="width: 100%" border="1">
                        <tbody>
                          <tr class="table_header2">
                            <th scope="col">
                              Nominated Volume</th>
                            <th scope="col">
                              Allocation Period</th>
                            <th scope="col">
                              Allocation %</th>
                            <th scope="col">
                              Allocation Start Amt</th>
                            <th scope="col">
                              Allocation Lifted</th>
                            <th scope="col">
                              Allocation Remaining</th>
                            <th scope="col">
                              GPO Allowance</th>
                            <th scope="col" class="center width8em">
                              GPO Remaining</th>
                            <th scope="col">
                              Category Status</th>
                            <th scope="col">
                              Ratability Status</th>
                            <th scope="col">
                              Next Scheduled Refresh Date</th>
                            <th scope="col">
                              Reference ID</th>
                          </tr>
                          <tr class="tablerow2">
                            <td class="right width8em">
                              0</td>
                            <td class="center width10em">
                              Custom 1 day(s)</td>
                            <td class="right">
                              100%</td>
                            <td class="right">
                              0</td>
                            <td class="right">
                              0</td>
                            <td class="right">
                              0</td>
                            <td class="right">
                              0</td>
                            <td class="right width8em bold" id="GPO_Rmd">

                              0
                            </td>
                            <td class="center" style="background-color:#FF0000;">
                              Out</td>
                            <td class="center" style="background-color:#0099CC;">
                              Below Trend</td>
                            <td class="center width20em">
                              8/1/2016 12:00:00 AM CDT</td>
                            <td class="center width20emWordWrap">
                              MERC-DSL</td>
                          </tr>
                        </tbody>
                      </table>
                    </td>
                  </tr>
                  <tr id="GPO_Row">
                    <td style="width:5px;">
                    </td>
                    <td>
                    </td>
                  </tr>
                </tbody>
              </table>
            </td>
          </tr>
        </tbody>
      </table>
    </td>
  </tr>
</table>

我想知道如何循环表格,以便获得一份合同,即“PILOT TRAVEL CENTE-122194-W/S - UNB Contract”、“PILOT TRAVEL CENTE-122194-W/S - UNB Fwrd Cont”和“UNB Spot”以及表格的数据。 提前致谢。

【问题讨论】:

  • 你自己尝试了什么??结果如何??
  • 我试图循环表格,但我得到了前 3 条记录的合同,而且合同也被添加到第 4 行。我想获得前 3 排的第一份合同,而不是第 4 排的合同
  • 您能分享一下您已经尝试过哪些吗??

标签: loops selenium html-tableextract


【解决方案1】:

好吧,你没有说你使用的语言,所以我会用 C# 给你例子

//Init table element (in this case by tag name but better chose by id or Name)
IWebElement tableElement = driver.FindElement(By.TagName("table"));

//Init TR elements from table we found into list
IList<IWebElement> trCollection = tableElement.FindElements(By.TagName("tr"));
//define TD elements collection.
IList<IWebElement> tdCollection;

//loop every row in the table and init the columns to list
foreach(IWebElement element in trCollection)
{
   tdCollection = element.FindElements(By.TagName("td"));

   //now in the List you have all the columns of the row
   string column1 = tdCollection[0].Text;
   string column2 = tdCollection[1].Text;
   ...
}

如果您使用其他语言,只需更改语法,逻辑是相同的。

【讨论】:

  • 我使用你给出的相同逻辑,但得到element = null
  • 我越来越完美了。即 10。但问题仅在于元素。
  • 在 foreach 你得到 element = null ?
  • 我已经复制了你的代码。只是变量名可能不同。
  • 找到第一个通用表并报告其中的元素。这还不错,但它没有解释如何遍历具有 N 个 TR 元素的特定表。这是一个开始。需要更多的编程。这个答案让我既鼓舞又失望。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 2018-10-20
  • 2011-03-14
  • 2011-03-05
相关资源
最近更新 更多