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

所以这是我的代码,它能够获取datagrid列的标题,并从用户输入中找到匹配的值。 例如,如果输入是“jdoe”,它将查看datagrid中的Username列,并将[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 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 _values = new Dictionary(); public IReadOnlyDictionary Values { get { return _values; } } 

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

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

得到你的搜索元素= 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; } } } } 

一种可能的解决方案是使用xpath找到包含文本单元格的行,并从那里选择按钮。

例:

 //tr[.//td[text()='jdoe']]//button