Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用SeleniumWebDriver c检索表数据_C#_Selenium_Selenium Webdriver - Fatal编程技术网

C# 使用SeleniumWebDriver c检索表数据

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

很抱歉,我还是c和selenium编程新手

我正在自动化一个包含动态表的应用程序。该表由4列组成,3列包含数据,1列包含每行2个按钮

在编写Selenium测试时,我希望传入一个“Username”字符串,然后使用一些智能代码从表中检索数据,并与传入的字符串进行匹配。找到后,我希望它穿过这一行,并选择该行上的两个按钮之一

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