#wpf #automation #ui-automation #winium #automationpeer
#wpf #автоматизация #пользовательский интерфейс-автоматизация #winium #automationpeer
Вопрос:
Мой пользовательский элемент управления WPF имеет внутренние элементы. В моем случае моим пользовательским элементом управления является сетка, а внутренними элементами являются ячейки. Вы можете найти реализацию AutomationPeer ниже,
public class GridAutomationPeer : FrameworkElementAutomationPeer, IGridProvider
{
public virtual GridModel Model
{
get
{
var grid = this.Owner as GridBase;
return grid.Model;
}
}
protected override AutomationControlType GetAutomationControlTypeCore()
{
return AutomationControlType.DataGrid;
}
protected override string GetClassNameCore()
{
return this.Owner.GetType().Name;
}
protected override List<AutomationPeer> GetChildrenCore()
{
var peers = new List<AutomationPeer>();
foreach (var kvp in this.cellPeers)
{
peers.Add(kvp.Value);
}
return peers;
}
public override object GetPattern(PatternInterface patternInterface)
{
switch (patternInterface)
{
case PatternInterface.Grid:
case PatternInterface.Selection:
case PatternInterface.Table:
return this;
return base.GetPattern(patternInterface);
}
}
int IGridProvider.ColumnCount
{
get
{
return this.Model.ColumnCount;
}
}
IRawElementProviderSimple IGridProvider.GetItem(int row, int column)
{
if (row < this.Model.RowCount amp;amp; column < this.Model.ColumnCount)
{
var cellPeer = this.GetOrCreateCellPeer(row, column);
if (cellPeer != null)
{
var item = this.ProviderFromPeer(cellPeer);
return item;
}
}
return null;
}
int IGridProvider.RowCount
{
get
{
return this.Model.RowCount;
}
}
}
Моя проблема в том, что он правильно распознается в тестовом скрипте Winium, только если inspect.exe открыт. Если inspect.exe не открывается, Winium выдает исключение «Элемент не найден».
Ниже приведен мой тестовый скрипт,
try
{
var grid = driver.FindElementById("grid");
var cell = grid.FindElement(By.Id("6,1"));
if (cell.Text != "Movie Poster")
Assert.Fail("Cell value is not Movie Poster");
driver.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
Сведения об исключении,
Пожалуйста, предложите мне какое-либо решение для этого.
Комментарии:
1. Всем привет, есть ли какое-либо решение?