Проблема: Я использую FindMatchingControls () для создания коллекции строк в таблице WPF.Я написал цикл, который будет устанавливать ComboBox в каждой строке на заданное значение.Иногда все это работает, но чаще всего FindMatchingControls () фактически находит около половины строк.Как я могу настроить тайм-ауты или изменить настройки, чтобы он каждый раз находил все 50 элементов управления или, возможно, чтобы найти первые 10, а затем найти следующие 10 и т. Д.?
Фон : я тестируюокно WPF и на нем есть таблица, у каждой строки в таблице есть выпадающий список.Есть 50 строк, и в будущем их может быть больше, поэтому я не могу записать настройки каждого из них, мой записанный тест будет устаревшим с каждой новой версией (каждый месяц или около того).
Поэтому я записал значение 1 ComboBox, а затем использовал FindMatchingControls () для создания Коллекции.Я перебираю коллекцию, устанавливая каждый ComboBox в этой коллекции на желаемый выбор.Первые 23 строки показаны на моем текущем разрешении экрана.Единственная проблема заключается в том, что FindMatchingControls () иногда возвращает 23, иногда 26, иногда 34, а иногда возвращает все 50 строк!У меня вопрос, как мне исправить приведенный ниже код, чтобы он всегда возвращал все 50 строк (и, возможно, больше в будущем).
Из кода видно, что я дважды обнаружил родительский элемент управления, поэтому псевдокодниже.
Код Psuedo :
1) Найти родительский контейнер (таблица) 2) Определить строку (которая является дочерней по отношению к родительской таблице) 3) Использовать FindMatchingControlsчтобы получить коллекцию строк 4) Выполните цикл по Коллекции, найдите ComboBox в каждой строке и установите для его выбора значение, переданное в метод.
КОД:
public void PlaceAnOrderScreen_SelectItems_List(String item /*Value to set all 50 ComboBoxes to*/)
{
WpfControl rowOfOrderItems = new WpfControl(this.UIOptimalOrderSystemClientShWindow.UIItemCustom22.UIListViewAutoID37Table);
rowOfOrderItems.SearchProperties[WpfControl.PropertyNames.ControlType] = "DataItem";
rowOfOrderItems.SearchProperties[WpfControl.PropertyNames.ClassName] = "Uia.ListViewItem";
rowOfOrderItems.WindowTitles.Add("Order Management System");
rowOfOrderItems.Find();
rowOfOrderItems.DrawHighlight(); //Visible diagnostic
//should get a collection of 50 controls ...
//... but this is dodgy, it sometimes finds 23, 26, 34 or ocassionaly all 50 controls.
//There are 23 visible controls and the rest, you have to scroll down to see.
UITestControlCollection itemRows = rowOfOrderItems.FindMatchingControls();
int c = 0;
int i = 1;
string label = String.Empty;
foreach (var auditSelectionBox in itemRows)
{
//After the top 15 drop down selections have been made, strat scrolling down.
//This is because setting the Value for a list box that is off the screen
//causes it to complain the control is blocked...
if (c >= 15)
{
if (i >= 3) //The scroll wheel moves 3 rows at a time, so only scroll once for every 3 rows...
{
Mouse.MoveScrollWheel(-1);
i = 0;
}
}
i++;
c++;
WpfCell auditDDL1 = new WpfCell(auditSelectionBox);
auditDDL1.SearchProperties[WpfCell.PropertyNames.ColumnHeader] = "Total";
auditDDL1.WindowTitles.Add("OrderSystem 5");
//Works but takes 5 - 16 seconds per drop down list
auditDDL1.Value = item;
}
}