【问题标题】:Handling tables in c# selenium在 c# selenium 中处理表
【发布时间】:2016-01-11 15:16:51
【问题描述】:
<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”,则测试用例将获得 Fail,否则测试用例将获得 Pass

我尝试了以下逻辑

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

}

我不确定如何继续。有人可以帮我吗?提前致谢

【问题讨论】:

  • 因此,当使用调试器单步执行代码时,如果要在第一个 { 上放置断点,您对 tableRow 和 item 的值有什么了解?调试你自己的代码..?听起来您需要告诉我们更多关于您看到或没有看到的信息

标签: c# selenium


【解决方案1】:

你的逻辑很好:

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
   }
}

【讨论】:

  • 一切正常。感谢您抽出宝贵时间。
【解决方案2】:

如果您只是尝试查找具有第 8 列值“暂停”和第 10 列值“发布失败”的行:

IList<IWebElement> rows = tableElement.FindElements(By.TagName("//table//tr[td[8]/div = 'Suspended' and td[10]/div = 'Publishing Failed']"));

然后,如果rows 列表不为空,则测试失败。

【讨论】:

    【解决方案3】:

    试试这个:

    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();
    }
    

    请注意,此代码将在发现“暂停”和“发布失败”时停止测试。如果要继续测试直到表中的最后一行,则必须使用多个断言。 NUnit, is it possible to continue executing test after Assert fails?

    【讨论】:

    • 我们没有使用 Assert 函数。相反,我们将返回值以将其与 XML 文件进行比较
    • 所以你可以用return语句替换断言语句。
    猜你喜欢
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多