我有一个使用一个DataGrid显示联系人列表的应用程序。 8列,4代表客户信息(串)和其他4两个复选框(即用于测试目的,我将所有设置为true)。
使用TestStack.White我可以通过它来获取DataGrid控件(即使元素表):
var distributionGrid = window.Get<Table>(SearchCriteria.ByAutomationId("DistributionGrid"));
但是我还没有能够添加行。 我试过了:
distributionGrid.Rows[0].Cells[0].SetValue(firstName); // firstName is a string
但是,这并不能工作,即使它编译和运行。 当我回去使用调试器,单元格的值[0,0]仍然无效。
我似乎无法工作,这一个。 我一直在使用Rows.Add()也试过,但我永远不能得到它似乎是正确的语法。
我不喜欢这样的:
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
毛毡哈克。
其实,我已经找到了答案(那种)。
我无法解释为什么的SetValue是行不通的,但如果我改变的代码行:
distributionGrid.Rows[0].Cells[0].Value = firstName;
一切正常。 由于任何人谁看着这一点。
TestStack.White的最新版本不公开Value属性。 我使用以下行来模拟用户操作:
var match = FindMatchingRow(SomeSearchCriteria);
var cell = match.Cells[fieldName];
cell.Click();
cell.Enter(fieldValue);
Keyboard.Instance.PressSpecialKey(KeyboardInput.SpecialKeys.RETURN);
另一种可能性,不是投给ListView的,是读取每个一行。 这是我需要的,因为我的DataGrid里面有不同的对象,这改变了一些行的列数。
var column3 = mainWindow.GetMultiple(SearchCriteria.ByAutomationId("Column3"));
var column3cell0 = (CheckBox)column3[0];
var column3cell0State = column3cell0.State;
但是,离开了我的问题是要访问的只有文字,但没有其他的UI对象内部的DataGridTextColumn。 Teststack白不承认该小区为UI项目,并留下阵列空。 我想我必须改变执行的添加一个文本框。