一尘不染

在C#中找到正确的用户名后如何单击数据网格中的按钮

selenium

所以这是我的代码,它能够获取datagrid列的标题并从用户输入中找到匹配的值。例如,如果输入为“ jdoe”,它将查看数据网格中的“用户名”列,并将
[value.Key] .Textvalue.Value相匹配
。现在的问题是,每行都有一个具有相同自动化ID的“编辑”按钮。我如何遍历数据网格并能够单击“编辑”按钮,而不管“
jdoe”在哪一行:这是我到目前为止的内容:

    public static bool Contains(this ListView listView, ObjectInList  objectInList)
    {
        foreach (ListViewRow row in listView.Rows)
        {

            if (DataMatches(row, objectInList))
                return true;
        }

        return false;
    }


    private static bool DataMatches(ListViewRow row, ObjectInList objectInList)
    {
        foreach (KeyValuePair<string, string> value in objectInList.Values)
        {
            if (row.Cells[value.Key].Text != value.Value)


                return false;


        }
        return true;
    }
}


internal class UserInList : ObjectInList
{



    public UserInList(string username)
    {

        _values["Username"] = username;


    }
}

internal class OrderInList : ObjectInList
{

    public OrderInList(string orderNumber)
    {

        _values["Depot Tag #"] = orderNumber;


    }
}

internal abstract class ObjectInList
{

    protected readonly Dictionary<string, string> _values = new Dictionary<string, string>();

    public IReadOnlyDictionary<string, string> Values
    {

        get { return _values; }
    }

这是WPF应用程序的屏幕截图


阅读 208

收藏
2020-06-26

共1个答案

一尘不染

这是我用来遍历表的内容:

得到你的搜索元素= value2

得到你的表ID,xpath或css = myTable

循环将遍历表,然后找到value2。在这里,您可以选择下一步要做什么。假设您的专栏看起来像这样:

|col 1 |col  2  | col   3 |
|link1 | value1 | link2   |
|link1 | value2 | link2   |

在下面,它将停止在value2上。变成tds [i]。单击链接1,我使用:

 tds[i - 1].Click();

如果要单击链接2,请使用:

 tds[i + 1].Click();

只需考虑[i]中的列号,然后向左(减)或向右(加)计数。

 public void ClickTableLink(String value2)
  {
  var table =  driver.FindElement(By.Id("myTable"));
  foreach (var tr in table.FindElements(By.TagName("tr")))
  {
   var tds = tr.FindElements(By.TagName("td"));
    for (var i = 0; i < tds.Count; i++)
    {
        if (tds[i].Text.Trim().Contains(value2))
        {
            tds[i - 1].Click();
           break;
        }

    }
  }
}
2020-06-26