使用Selenium WebDriver c#

时间:2016-02-26 12:13:06

标签: c# selenium selenium-webdriver

对不起,我还是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);
        }

2 个答案:

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