我有一个使用DataGrid显示联系人列表的应用程序。 8列,4代表客户信息(字符串),其他4列是CheckBoxes(出于测试目的,我将所有设置为true)。
使用TestStack.White我可以通过它获取DataGrid控件(即使元素是表):
var distributionGrid = window.Get<Table>(SearchCriteria.ByAutomationId("DistributionGrid"));
但我还没有能够添加行。我试过了:
distributionGrid.Rows[0].Cells[0].SetValue(firstName); // firstName is a string
但即使它编译并运行,它也无法工作。当我返回并使用调试器时,cell [0,0]的值仍为null。
我似乎无法解决这个问题。我也尝试过使用Rows.Add(),但我似乎永远无法获得正确的语法。
答案 0 :(得分:4)
我确实喜欢这个:
var dataGrid = page.Get<ListView>(AutomationIds.MyDataGridId);
var cell = dataGrid.Rows[0].Cells[1];
cell.Click();
cell.Enter("New Value");
dataGrid.Select(1); // lose focus
感到hacky。
答案 1 :(得分:1)
实际上,我找到了答案(有点)。
我无法解释为什么SetValue不起作用,但如果我将代码行更改为:
distributionGrid.Rows[0].Cells[0].Value = firstName;
一切都按预期工作。感谢任何研究过此事的人。
答案 2 :(得分:0)
最新版本的TestStack.White不会公开Value属性。 我使用以下行来模拟用户操作:
var match = FindMatchingRow(SomeSearchCriteria);
var cell = match.Cells[fieldName];
cell.Click();
cell.Enter(fieldValue);
Keyboard.Instance.PressSpecialKey(KeyboardInput.SpecialKeys.RETURN);
答案 3 :(得分:0)
除了强制转换为ListView之外,另一种可能性是读取每一行。这对我来说是必须的,因为我的DataGrid里面有不同的对象,这改变了一些行列的数量。
var column3 = mainWindow.GetMultiple(SearchCriteria.ByAutomationId("Column3"));
var column3cell0 = (CheckBox)column3[0];
var column3cell0State = column3cell0.State;
但是我剩下的问题是访问DataGridTextColumn,它仅包含文本,而内部没有其他UI对象。 Teststack-white无法将此单元格识别为UI项,并将数组留空。 我想我必须更改实现并添加一个Textfield。