处理C# Selenium中的表格

6
<table cellpadding="0" cellspacing="0" onclick="" style="width: 1345px;">

  <tbody>

    <tr id="item_tcm:222-382904-131104" title="2. Publish to WIP (tcm:222-382904-131104)" class="item even" c:drawn="true">
      <td class="col0 icon odd" value="T131104L0P0">
        <div class="icon" style="background-image: url(&quot;/WebUI/Editors/CME/Themes/Carbon2/icon_v7.1.0.66.55_.png?name=T131104L0P0&amp;size=16&quot;);"></div>
      </td>
      <td class="col1 even">
        <div class="text">2.&nbsp;Publish&nbsp;to&nbsp;WIP</div>
      </td>
      <td class="col2 odd">
        <div class="text">JH&nbsp;Anchor&nbsp;link&nbsp;2</div>
      </td>
      <td class="col3 even">
        <div class="text">S070&nbsp;Public&nbsp;Site&nbsp;US&nbsp;English</div>
      </td>
      <td class="col4 odd" value="2015-12-23T14:41:04">
        <div class="text">12/23/2015 2:41 PM</div>
      </td>
      <td class="col5 even">
        <div class="text">NT&nbsp;AUTHORITY\SYSTEM</div>
      </td>
      <td class="col6 odd" value="">
        <div class="text">
          <span style="color: #f00"></span>
        </div>
      </td>
      <td class="col7 even" value="16">
        <div class="text">Suspended</div>
      </td>
      <td class="col8 odd">
        <div class="text">NT&nbsp;AUTHORITY\SYSTEM</div>
      </td>
      <td class="col9 even">
        <div class="text">Publishing&nbsp;Failed</div>
      </td>
    </tr>
    <tr id="item_tcm:222-382901-131104" title="2. Publish to WIP (tcm:222-382901-131104)" class="item even" c:drawn="true">
      <td class="col0 icon odd" value="T131104L0P0">
        <div class="icon" style="background-image: url(&quot;/WebUI/Editors/CME/Themes/Carbon2/icon_v7.1.0.66.55_.png?name=T131104L0P0&amp;size=16&quot;);"></div>
      </td>
      <td class="col1 even">
        <div class="text">2.&nbsp;Publish&nbsp;to&nbsp;WIP</div>
      </td>
      <td class="col2 odd">
        <div class="text">JH_anchor&nbsp;link</div>
      </td>
      <td class="col3 even">
        <div class="text">S070&nbsp;Public&nbsp;Site&nbsp;US&nbsp;English</div>
      </td>
      <td class="col4 odd" value="2015-12-23T14:17:51">
        <div class="text">12/23/2015 2:17 PM</div>
      </td>
      <td class="col5 even">
        <div class="text">NT&nbsp;AUTHORITY\SYSTEM</div>
      </td>
      <td class="col6 odd" value="">
        <div class="text">
          <span style="color: #f00"></span>
        </div>
      </td>
      <td class="col7 even" value="16">
        <div class="text">Suspended</div>
      </td>
      <td class="col8 odd">
        <div class="text">NT&nbsp;AUTHORITY\SYSTEM</div>
      </td>
      <td class="col9 even">
        <div class="text">Publishing&nbsp;Failed</div>
      </td>
    </tr>
    .....
  </tbody>
</table>

我有一组行数据。每行中都包含10个列(td)。我想要遍历每一行,对于每一行,我想要获取第8和第10列。 注意:如果第8列的值为“Suspended”,并且第10列的值为“Publishing Failed”,则测试用例将会失败,否则测试用例将会通过。
我尝试了以下逻辑。
IWebElement tableElement = driver.FindElement(By.XPath("/html/body/table"));
IList<IWebElement> tableRow = tableElement.FindElements(By.TagName("tr"));
foreach (var item in tableRow)
{

}

我不确定接下来该怎么做,有人能帮帮我吗?提前感谢。


当使用调试器逐步执行代码时,如果在第一个{上设置断点,那么tableRow和item的值是多少?你是否熟悉如何调试自己的代码?听起来你需要告诉我们更多关于你看到或没有看到的信息。 - MethodMan
3个回答

17

你的逻辑很好:

IWebElement tableElement = driver.FindElement(By.XPath("/html/body/table"));
IList<IWebElement> tableRow = tableElement.FindElements(By.TagName("tr"));
IList<IWebElement> rowTD;
foreach (IWebElement row in tableRow)
{
   rowTD = row.FindElements(By.TagName("td"));

   if(rowTD.Count > 9)
   {
      if(rowTD[8].Text.Equals("Suspended") && rowTD[10].Text.Equals("Publishing Failed");
      //test failed
   }
}

它运行良好..感谢您花费时间在这上面。 - Aishu

0

试试这个:

foreach (var item in tableRow)
{
    IWebElement column7 = item.FindElement(By.CssSelector("[class*='col7']"));
    IWebElement column9 = item.FindElement(By.CssSelector("[class*='col9']"));

    if (column7.Text.Equals("Suspended") && column9.Text.Equals("Publishing Failed"))
        Assert.Fail("Failed because column8 is 'Suspended' and column10 is 'Publishing Failed'");
    else
        Assert.Pass();
}

请注意,当代码找到"Suspended"和"Publishing Failed"时,测试将停止。如果您想继续测试直到表格的最后一行,请使用多个断言。NUnit,断言失败后是否可以继续执行测试?

我们不使用Assert函数。相反,我们将返回该值以将其与XML文件进行比较。 - Aishu
所以你可以用返回语句替换断言语句。 - Buaban

0
如果您只想查找第8列值为"Suspended"和第10列值为"Publishing Failed"的行,该怎么办呢?
IList<IWebElement> rows = tableElement.FindElements(By.TagName("//table//tr[td[8]/div = 'Suspended' and td[10]/div = 'Publishing Failed']"));

接下来,如果rows列表不为空,则测试会失败。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接