C# 如何单击表格单元格中的按钮

C# 如何单击表格单元格中的按钮,c#,selenium,xpath,selenium-webdriver,C#,Selenium,Xpath,Selenium Webdriver,我正在尝试单击表格单元格中的按钮。此单元格包含两个按钮。 表有5行和10个列。按钮单元是最后一个。 尝试在firefox中使用xpath工具,但我遇到一个异常,无法找到该元素。 尝试了以下xpath变体: Drv.Driver.FindElement(By.XPath("//table[@id='SERVICE_CANCEL']/tbody/tr[" + 4 + "]/td[10]")).Click(); Drv.Driver.FindElement(By.XPath(".//*[@id='SE

我正在尝试单击表格单元格中的按钮。此单元格包含两个按钮。 表有5行和10个列。按钮单元是最后一个。 尝试在firefox中使用xpath工具,但我遇到一个异常,无法找到该元素。 尝试了以下xpath变体:

Drv.Driver.FindElement(By.XPath("//table[@id='SERVICE_CANCEL']/tbody/tr[" + 4 + "]/td[10]")).Click();
Drv.Driver.FindElement(By.XPath(".//*[@id='SERVICE_CANCEL']/tr[" + 4 + "]/td[10]/div")).Click();
Drv.Driver.FindElement(By.XPath("//[@serid='10002455']/tr[4]")).Click();
这些都不管用。正如我之前所说,每行的第10个单元格中都有一组按钮。没有任何其他想法如何点击它。如果你能帮忙,我将不胜感激

因为HTML代码有点“庞大”,所以它的一部分:

<TR class=datagrid-row id=datagrid-row-r2-2-3 datagrid-row-index="3">
<TD style="DISPLAY: none" field="index">
<DIV class="datagrid-cell datagrid-cell-c2-index" style="HEIGHT: auto; WHITE-SPACE: normal; TEXT-ALIGN: left">4</DIV></TD>

<TD field="name">
<DIV class="datagrid-cell datagrid-cell-c2-name">Text1</DIV></TD>
<TD field="ID">
<DIV class="datagrid-cell datagrid-cell-c2-ID">000</DIV></TD>
<TD field="ID2">
<DIV class="datagrid-cell datagrid-cell-c2-ID2">111</DIV></TD>
<TD field="ID3">
<DIV class="datagrid-cell datagrid-cell-c2-ID3"></DIV></TD>

<TD field="buttons">
<DIV class="datagrid-cell datagrid-cell-c2-buttons" style="HEIGHT: auto; WHITE-SPACE: normal; TEXT-ALIGN: left">
<DIV class=gridbuttons><A title="shutdown" class="button enabled" id=SERVICE_CANCEL serid="10002455"></A></DIV></TD></TR>

4.
文本1
000
111
按钮有一个id(服务\u取消)。首先,您应该更正HTML,因为您需要这样的引号:
,然后只需使用:

 Drv.Driver.FindElement(By.Id("SERVICE_CANCEL")).Click();

当您有一个id时,您不需要任何xpath,因为我们不能在具有id的表单元格值中使用id(因为这些id可以动态生成,也可以不唯一),您需要提供整个xpath

我已经获取了您的HTML,刚刚更新了您可以使用**看到的最后一个值,下面是为我编写的selenium代码

HTML代码:

<html>
<body>
<table border="1" width="200px">
<TR class=datagrid-row id=datagrid-row-r2-2-3 datagrid-row-index="3">
<TD style="DISPLAY: none" field="index">
<DIV class="datagrid-cell datagrid-cell-c2-index" style="HEIGHT: auto; WHITE-SPACE: normal; TEXT-ALIGN: left">4</DIV></TD>
<TD field="name">
<DIV class="datagrid-cell datagrid-cell-c2-name">Text1</DIV></TD>
<TD field="ID">
<DIV class="datagrid-cell datagrid-cell-c2-ID">000</DIV></TD>
<TD field="ID2">
<DIV class="datagrid-cell datagrid-cell-c2-ID2">111</DIV></TD>
<TD field="ID3">
<DIV class="datagrid-cell datagrid-cell-c2-ID3"></DIV></TD>

<TD field="buttons">
<DIV class="datagrid-cell datagrid-cell-c2-buttons" style="HEIGHT: auto; WHITE-SPACE: normal; TEXT-ALIGN: left">
<DIV class=gridbuttons>**<input type=button value="shutdown" class="button enabled" id=SERVICE_CANCEL serid="10002455" onclick="calFunc()"></input>**</DIV></TD></TR>
</table>
<script>
function calFunc()
{
  alert("Hello World");
} 
</script>
</body>
</html>

挖掘了更多之后,找到了解决方案。 我使用的Xpath是:

//a[contains(@id, 'SERVICE_CANCEL') and contains (@serid, '" +tempPaslaugosIDReiksme + "')]"

共享HTML的相关部分。通常,我会列出所有
元素,然后为该列表中的每个项目列出
元素,然后以这种方式与单元格交互。ID不起作用,因为在另一个TR中,有新的TDs集合。还有一个相同的按钮具有相同的ID。我需要按的不是出现的第一个按钮,而是第三个或第五个按钮,这取决于条件。@Shien那么你的html是错误的,因为ID应该是唯一的。在尝试做任何其他事情之前先解决这个问题
//a[contains(@id, 'SERVICE_CANCEL') and contains (@serid, '" +tempPaslaugosIDReiksme + "')]"