对不起,我还是c#和selenium编程的新手。
我正在自动化包含动态表的应用程序。该表由4列组成,3列包含数据,1列包含每行2个按钮。
在编写我的Selenium测试时,我想传入一个'用户名'字符串,然后有一些智能代码从表中检索数据并匹配传入的字符串。一旦找到,我希望它穿过该行并选择该行上的2个按钮中的任何一个。
<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);
}
答案 0 :(得分:0)
为了回答我的问题,我从您的示例中删除了[blank] td,因为您描述了第4列中的<a>
标记:
<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>
以下内容将找到包含用户名“Bill”的第二行,然后获取第一个<a>
标记:
//table/tbody/tr[td[1] = "Bill"]/td[4]/a
以下是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");
}
答案 1 :(得分:0)
这看起来像是将 TableDriver 扩展到 .NET WebDriver (https://github.com/jkindwall/TableDriver.NET) 的工作。在上面的例子中,它可以这样使用:
public void UserAction(string username, string action)
{
Table table = Table.CreateWithNoHeaders(driver.FindElement(By.TagName("table")), 0); // Assumes this is the only table on the page.
TableCell cell = table.FindCell($"0={username}", 3)
if (action == "edit")
{
cell.Element.FindElement(By.CssSelector("a[title='Edit User Account'")).Click();
}
else if (action == "deactivate")
{
cell.Element.FindElement(By.CssSelector("a[title='Deactivate User'")).Click();
}
}