- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们的应用程序有一个 Canvas ,我们可以在其中添加绘图视觉效果(如线条、多边形等)
// sample code
var canvas = new Canvas(); // create canvas
var visuals = new VisualCollection(canvas); // link the canvas to the visual collection
visuals.Add(new DrawingVisual()); // add the visuals to the canvas
visuals.Add(new DrawingVisual());
我们的目标是通过自动化将这些视觉效果添加到 Canvas 中,并验证它们是否已正确添加。我们使用基于 Microsoft 的 UIAutomation 的框架。
当使用“Inspect”之类的工具检查视觉结构时,我无法找到 Canvas 。做了一些研究,发现您需要重写 UIElement 中的 OnCreateAutomationPeer 方法,并返回适用的 AutomationPeer 对象,以便能够在自动化中看到这一点。
进行了更改,现在我可以看到 Canvas ,但是我仍然看不到 Canvas 下添加的任何视觉效果。
任何人都可以帮助我了解问题所在吗?
尝试过的事情/替代方案:
DrawingVisual
不是从 UIElement
派生的,我无法添加 UIElement
到Canvas.VisualCollection
。 最佳答案
只有 UIElement 可以从 UI Automation 中看到(就像您所看到的,OnCreateAutomationPeer 从此类开始,而不是从 Visual 类开始)。
因此,如果您希望 UIAutomation 可以使用它,则需要将 UIElement(或派生的 FrameworkElement)添加到 Canvas 。
您可以创建自己的类,如下所述:Using DrawingVisual Objects或者使用自定义 UserControl 或使用适合您需要的现有控件,但它必须以某种方式从 UIElement 派生。
一旦你有了一个好的类,你就可以使用默认的 AutomationPeer 或重写该方法并更紧密地适应。
如果要保留 Visual 对象,一种解决方案是修改包含对象(但它仍然需要从 UIElement 派生)。例如,如果我按照链接中的文章进行操作,我可以编写一个自定义包含对象(而不是示例代码的 Canvas ,因此您可能需要稍微调整),如下所示:
public class MyVisualHost : UIElement
{
public MyVisualHost()
{
Children = new VisualCollection(this);
}
public VisualCollection Children { get; private set; }
public void AddChild(Visual visual)
{
Children.Add(visual);
}
protected override int VisualChildrenCount
{
get { return Children.Count; }
}
protected override Visual GetVisualChild(int index)
{
return Children[index];
}
protected override AutomationPeer OnCreateAutomationPeer()
{
return new MyVisualHostPeer(this);
}
// create a custom AutomationPeer for the container
private class MyVisualHostPeer : UIElementAutomationPeer
{
public MyVisualHostPeer(MyVisualHost owner)
: base(owner)
{
}
public new MyVisualHost Owner
{
get
{
return (MyVisualHost)base.Owner;
}
}
// a listening client (like UISpy is requesting a list of children)
protected override List<AutomationPeer> GetChildrenCore()
{
List<AutomationPeer> list = new List<AutomationPeer>();
foreach (Visual visual in Owner.Children)
{
list.Add(new MyVisualPeer(visual));
}
return list;
}
}
// create a custom AutomationPeer for the visuals
private class MyVisualPeer : AutomationPeer
{
public MyVisualPeer(Visual visual)
{
}
// here you'll need to implement the abstrat class the way you want
}
}
关于wpf - 如何在 UIAutomation 中识别 WPF 绘图视觉效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26148177/
我有一个正在购买产品的应用程序。在 uiautomation 测试期间,我想测试整个 View ,但不希望它实际购买。 如果设备在 ui-automator 模式下运行,如何检查测试应用程序? 最佳答
import com.android.uiautomator.core.UiObject; import com.android.uiautomator.core.UiObjectNotFoundEx
我正在尝试使用 UIAutomator 滚动。场景是我进入选项卡中的“设置”菜单并单击“应用程序选项”,这会为我提供选项卡中所有应用程序的列表。现在我想滚动应用程序列表,这是我面临问题的地方。它滚动设
我目前使用的是 Nexus 5 设备。 我正在尝试点击屏幕上的“删除帐户”。我使用了 UIAutomatorViewer 工具并找到了屏幕上所有元素的节点详细信息。有三个元素对应于我正在查看的“添加帐
我想在 Windows 上仅使用命令行工具编译和运行 Android UI 黑盒测试。我编写了一个 UiAutomatorTestCase,构建它,并将其上传到 /data/local/tmp/。我确
在发布到 Android 应用程序商店的应用程序的实现中,有什么会阻止我使用 UIAutomator 吗? 我的目标是通过我的应用自动执行与第三方应用的一些简单用户交互。这需要对第三方应用程序进行自省
我试图找到一个很好的资源来开始使用 UIAutomation。我需要在 WPF 应用程序中模拟鼠标输入。有什么好的例子吗?我找不到,还有 MSDN documentation似乎太广泛了。 最佳答案
我的选择器 View 只有一个组件,并且该组件中有 5 个值。 我可以获得轮子的数量以及组件中的值,如下 var picker = window.pickers(); UIALogger.logMes
我是 iPhone Automation 和 iOS4 引入的 UIAutomation 框架的新手。最近,我使用 UIAutomation 通过仪器在 iPhone 模拟器上自动测试应用程序,但它给
当我在 Instruments 中运行 UIAutomation 脚本时,一切正常,但是当我从命令行运行完全相同的脚本时,出现此错误:无法对无效元素执行操作:来自 target.frontMostAp
当我在命令提示符下运行以下命令时,出现以下错误。 命令:C:\Users\ob>uiautomatorviewer 错误: -Djava.ext.dirs=..\lib\x86_64;..\lib i
我正在编写一个脚本来测试 iPhone 上的应用程序。我想放大图像。 我尝试执行inchOpenFromToForDuration({x:80, y:150}, {x:30, y:150}, 2),但
我有一个iPad应用程序,正在为其编写UIAutomation脚本。有一个UIButton,在点击时显示UIPopoverController。我的脚本如何选择(点击)该弹出框内的项目? 编辑: UI
由于我正在使用 Instruments 的 UIAutomation 工具,我需要以下信息: 1) 是否有任何动态提供数据的程序。例如,如果我需要使用此脚本来测试 Textfield 的不同数据,如何
我使用 UIAutomation 测试和制作脚本,我需要在我的 tableView 中循环选择 cell 并等待它下载到另一个. var target = UIATarget.localTarget(
我正在开发一个将捕获屏幕上的文本的 Windows 7 C++ 程序。 Microsoft 的 UIAutomation 框架似乎是实现它的最佳方式。除了一件事,我已经让它运行得很好——当我使用框架的
我正在通过 uiautomator 执行单元测试。现在我面临无法管理测试方法顺序的问题。请帮助我如何管理测试方法的运行顺序。它不是按方法顺序工作的。提前致谢。 @Test public void fi
我的 UI automator 测试在 (Lollipop) 模拟器上运行绿色,但在 Sony Xperia Z1 (Lollipop 5.1.1) 上出现此错误。有任何想法吗 ?解决方法? 11-2
我是 uiAutomator 的新手。我尝试将参数传递给方法,它运行但忽略传递给它的任何内容。只是想知道我们是否可以将任何参数传递给 uiAutomator 中的测试类或测试方法? 最佳答案 我知道这
我已经使用 UI Automator 自动转到 android 手机中的设置,我使用“getUiDevice().pressMenu();”单击菜单及其带有 3 个子菜单项的打开菜单,我想使用名称或索
我是一名优秀的程序员,十分优秀!