使用TestStack.White进行测试时,如何操作DataGrid值?

时间:2014-08-08 12:38:18

标签: c# user-interface datagrid automated-tests

我有一个使用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(),但我似乎永远无法获得正确的语法。

4 个答案:

答案 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。