wpf - Winium 驱动程序仅在打开 inspect.exe 时才识别 WPF 控件内部元素,否则将引发“未找到元素”异常
问题描述
我的 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 && 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;
}
}
}
我的问题是,只有在打开 inspect.exe 时,它才能在 Winium 测试脚本中正确识别。如果 inspect.exe 没有打开,Winium 会抛出“Element not found”异常。
下面是我的测试脚本,
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());
}
异常详情,
请为此建议我任何解决方案。
解决方案
推荐阅读
- excel - 从超过 120 万行的文本文档创建电子表格
- python - Python jpype.isJVMStarted 没有属性
- testing - 如何在 Cypress 的 E2E 测试中登录 Auth0?
- python - Keras 打开图像并使用它们创建批处理
- r - 嵌套循环遍历 R 中的不同列表
- java - Hibernate 中枚举和 json 类型的问题
- bing - Bing 实体搜索在美国以外不可用
- python - Docker build pytest:无法建立新连接:[Errno 111] Connection denied
- reactjs - 选择字段未填充 从 Redux 表单中的下拉数组中选择值
- python - 纪元纳秒到正常时间