Bir Winform uygulamasında bir kılavuzum (ComponentOne'dan FlexGrid) var ve hücrenin sütun dizini ve değeri göz önüne alındığında o ızgarada bir hücre bulmaya çalışıyorum.CodedUI: Neden bu kadar yavaş bir hücre arıyor?
Aşağıdaki uzantı yöntemini, kılavuzun içinden geçerek o hücreyi bulmak için yazdım.
Bu yöntemi 6 sütun ve 64 satır içeren bir ızgarada test ediyorum. Kodumun doğru hücreyi bulması 10 dakika sürdü (son satırdaydı)
Algoritmamı hızlandırabilmemin bir yolu var mı?
Not: ... Ben de TopLevelWindow için PlayBack.PlayBackSetting.SmartMatchOption ayarı denedim ama hiçbir şeyi değiştirmez görünmüyor
teşekkürler! Düzenleme
public static WinCell FindCellByColumnAndValue(this WinTable table, int colIndex, string strCellValue)
{
int count = table.GetChildren().Count;
for (int rowIndex = 0; rowIndex < count; rowIndex++)
{
WinRow row = new WinRow(table);
WinCell cell = new WinCell(row);
row.SearchProperties.Add(WinRow.PropertyNames.RowIndex, rowIndex.ToString());
cell.SearchProperties.Add(WinCell.PropertyNames.ColumnIndex, colIndex.ToString());
cell.SearchProperties.Add(WinCell.PropertyNames.Value, strCellValue);
if (cell.Exists)
return cell;
}
return new WinCell();
}
aşağıda gibi olmak benim yöntemi (örn. Artık Winrow kullanmayın) modifiye, bu daha hızlı 3x civarında olduğu görülmektedir. Hala 3 satır ve 6 sütun ile bir tabloda bir hücre bulmak için 7 saniye gerekiyor, bu yüzden hala oldukça yavaş ...
Diğer kişilerin önerebileceği zaman bırakmak için bu cevabı daha sonra kabul edildiği şekilde işaretleyeceğim daha iyi bir şey
public static WinCell FindCellByColumnAndValue(this WinTable table, int colIndex, string strCellValue, bool searchHeader = false)
{
Playback.PlaybackSettings.SmartMatchOptions = Microsoft.VisualStudio.TestTools.UITest.Extension.SmartMatchOptions.None;
int count = table.GetChildren().Count;
for (int rowIndex = 0; rowIndex < count; rowIndex++)
{
WinCell cell = new WinCell(table);
cell.SearchProperties.Add(WinRow.PropertyNames.RowIndex, rowIndex.ToString());
cell.SearchProperties.Add(WinCell.PropertyNames.ColumnIndex, colIndex.ToString());
cell.SearchProperties.Add(WinCell.PropertyNames.Value, strCellValue);
if (cell.Exists)
return cell;
}
return new WinCell();
}
Düzenleme # 2: Ben Andrii önerisi @ uyarınca FindMatchingControls kullanılarak denedim ve ben hücrenin sütun indeksi aşağıdaki kodda dışında neredeyse orada (c.ColumnIndex) değilim yanlış değere sahip ..
public static WinCell FindCellByColumnAndValue2(this WinTable table, int colIndex, string strCellValue, bool searchHeader = false)
{
WinRow row = new WinRow(table);
//Filter rows containing the wanted value
row.SearchProperties.Add(new PropertyExpression(WinRow.PropertyNames.Value, strCellValue, PropertyExpressionOperator.Contains));
var rows = row.FindMatchingControls();
foreach (var r in rows)
{
WinCell cell = new WinCell(r);
cell.SearchProperties.Add(WinCell.PropertyNames.Value, strCellValue);
//Filter cells with the wanted value in the current row
var controls = cell.FindMatchingControls();
foreach (var ctl in controls)
{
var c = ctl as WinCell;
if (c.ColumnIndex == colIndex)//ERROR: The only cell in my table with the correct value returns a column index of 2, instead of 0 (being in the first cell)
return c;
}
}
return new WinCell();
}
Satıcıyla iletişim kurun. – leppie
MSDN forumlarının [UI Otomasyon Testi] (http://social.msdn.microsoft.com/Forums/da/vsautotest/threads) bölümünde genellikle Kodlanmış UI soruları için oldukça kapsamlı yanıtlar sağladığına katılıyorum. –
@leppie: Evet, kendi forumunda bir ileti gönderdim, sadece bir cevap bekliyorum – David