C# 使用SeleniumWebDriver c检索表数据
很抱歉,我还是c和selenium编程新手 我正在自动化一个包含动态表的应用程序。该表由4列组成,3列包含数据,1列包含每行2个按钮 在编写Selenium测试时,我希望传入一个“Username”字符串,然后使用一些智能代码从表中检索数据,并与传入的字符串进行匹配。找到后,我希望它穿过这一行,并选择该行上的两个按钮之一C# 使用SeleniumWebDriver c检索表数据,c#,selenium,selenium-webdriver,C#,Selenium,Selenium Webdriver,很抱歉,我还是c和selenium编程新手 我正在自动化一个包含动态表的应用程序。该表由4列组成,3列包含数据,1列包含每行2个按钮 在编写Selenium测试时,我希望传入一个“Username”字符串,然后使用一些智能代码从表中检索数据,并与传入的字符串进行匹配。找到后,我希望它穿过这一行,并选择该行上的两个按钮之一 <table> <tbody> <tr> <td>UserName_Data</td> <
<table>
<tbody>
<tr>
<td>UserName_Data</td>
<td>Email_data</td>
<td>IsDeactivated</>
<td>[blank]</td>
<a class="xxx" title="Edit User Account" href="xxx"/>
<a class="xxx" title="Deactivate User" href="xxx"/>
</td>
</tr>
<tr>
<td>UserName_Data</td>
<td>Email_data</td>
<td>IsDeactivated</>
<td>[blank]</td>
<a class="xxx" title="Edit User Account" href="xxx"/>
<a class="xxx" title="Deactivate User" href="xxx"/>
</td>
</tr>
<tr>
<td>UserName_Data</td>
<td>Email_data</td>
<td>IsDeactivated</>
<td>[blank]</td>
<a class="xxx" title="Edit User Account" href="xxx"/>
<a class="xxx" title="Deactivate User" href="xxx"/>
</td>
</tr>
</tbody>
</table>
[TestMethod]
public void NavigateToEditManageUsers()
{
ManageUsersPage.GoTo();
ManageUsersPage.EditUser(Bill);
}
出于回答的目的,我从您的示例中删除了[blank]td,因为您在第4列中描述了标签:
<table>
<tbody>
<tr>
<td>UserName_Data</td>
<td>Email_data</td>
<td>IsDeactivated</td>
<td>
<a class="xxx" title="Edit User Account" href="xxx"/>
<a class="xxx" title="Deactivate User" href="xxx"/>
</td>
</tr>
<tr>
<td>Bill</td>
<td>Email_data</td>
<td>IsDeactivated</td>
<td>
<a class="xxx" title="Edit User Account" href="xxx"/>
<a class="xxx" title="Deactivate User" href="xxx"/>
</td>
</tr>
<tr>
<td>UserName_Data</td>
<td>Email_data</td>
<td>IsDeactivated</td>
<td>
<a class="xxx" title="Edit User Account" href="xxx"/>
<a class="xxx" title="Deactivate User" href="xxx"/>
</td>
</tr>
</tbody>
</table>
以下是C语言中的一个实现:
public class ManageUsersPage
{
public static void GoTo()
{
// Loads page
}
public static void EditUserAccount(string username)
{
Driver.FindElement(By.XPath("//table/tbody/tr[td[1] = '" + username + "']/td[4]/a[1]")).Click();
}
public static void DeactivateUser(string username)
{
Driver.FindElement(By.XPath("//table/tbody/tr[td[1] = '" + username + "']/td[4]/a[2]")).Click();
}
}
[TestMethod]
public void NavigateToEditManageUsers()
{
ManageUsersPage.GoTo();
ManageUsersPage.EditUserAccount("Bill");
}
这看起来像是.NET WebDriver的TableDriver扩展的作业。在上面的示例中,可以这样使用: public void UserActionstring用户名,string操作 { Table Table=Table.CreateWithNoHeadersdriver.FindElementBy.TagNametable,0;//假设这是页面上唯一的表。 TableCell cell=table.FindCell$0={username},3 如果操作==编辑 { cell.Element.FindElementBy.CssSelectora[title='Edit User Account'。单击; } 否则,如果操作==停用 { cell.Element.FindElementBy.CssSelectora[title='Deactivate User'。单击; } }
感谢Ben,由于此表是动态的,而且由于添加了其他用户,bill可能会出现在表的下方,如果我传入一个字符串“bill”,我如何才能使此场景正常工作?嘿,Dulku,我不完全确定我是否理解您的问题。我的答案中的XPath将返回正确的行,即用户名为bill的行,即使该行为这是表中的最后一个。我在C中添加了两个示例,说明如何在所需行中单击任一标记。没问题,很乐意提供帮助:
public class ManageUsersPage
{
public static void GoTo()
{
// Loads page
}
public static void EditUserAccount(string username)
{
Driver.FindElement(By.XPath("//table/tbody/tr[td[1] = '" + username + "']/td[4]/a[1]")).Click();
}
public static void DeactivateUser(string username)
{
Driver.FindElement(By.XPath("//table/tbody/tr[td[1] = '" + username + "']/td[4]/a[2]")).Click();
}
}
[TestMethod]
public void NavigateToEditManageUsers()
{
ManageUsersPage.GoTo();
ManageUsersPage.EditUserAccount("Bill");
}