我尝试过的事情:

Windows.Graphics.Display.DisplayInformation WinRT API — GetForCurrentView引发说“必须在与CoreWindow关联的线程上调用GetForCurrentView”,就像CodedUI测试在没有Windows的进程中运行一样。

GetSystemMetrics WinAPI-返回正确的大小值,但是屏幕没有旋转。

EnumDisplaySettingsEx WinAPI-不填写任何值。

DisplayProperties WinRT API-CurrentOrientation和NativeOrientation始终都是纵向的。

还有其他想法吗?

提前致谢。

最佳答案

CODEDUI测试确实在单独的过程中运行。它使用一种非常特殊的“反射”形式来查找“其他”过程中的控件。 codedUI测试控件的基类是UITestControl

Windows操作系统通过设计可防止其他进程中断或监听正在发生的事情。因此,MSFT必须提出被测过程的抽象,以使您可以“看到”其他控件。您获得的可寻址性不是实际的控件,而是在其他过程中该控件的表示。您能够控制它,因为MSTest能够“向该控件发送消息”。您受到以下限制:您只能通过在此命名空间的类中找到的内容来“获取”其他进程的信息:Microsoft.VisualStudio.TestTools.UITesting

一个很好的例子是在测试WebBrowsers时,CODEDUI使用一个名为BrowserWindow的类,它根本不同于其他地方的W​​ebBrowser类。在CODEDUI中获得DOM的唯一方法是通过BrowserWindow.Document属性。然后,我必须做一些花哨的石膏才能得到想要的东西。我怀疑这是您要做的。


确定哪个CodedUI类将代表您要自动化的Window。
在该类中查找方法或属性,这些方法或属性将使您可以寻址所需的内容。
如果找不到所需的内容,则只剩下一个选项,即下拉至OS消息传递层,然后查看是否(无法进行)发送和接收消息。这是一个非常复杂的话题,我从未成功过。注意:在这一层完成的大多数工作都是在C ++中完成的,因此确实有助于了解C ++以及Windows如何使用它(API)...


还能做其他事情吗?

是的,质量保证团队应该能够与编程团队一起为他们建立一些需求/要求。首先要问的是“单元测试应该做到这一点吗?” CODEDUI并不是真正的功能测试,无论任何人教什么,它在验证功能方面都远不及单元测试。

其次,您可以要求开发团队在其代码中添加钩子,以便您“了解这些内容”。换句话说,代码现在必须包含一些内容,以便质量检查小组进行验证。在您的情况下,您可以要求开发人员为您提供一个调用GetForCurrentView并将结果传回的方法。但是,由于CodedUI是可视的并且不起作用,因此您必须与它们一起工作以弄清楚如何在GUI层公开结果。

还要别的吗?

是的,最后一件事是您可以使用Fakes拦截方法调用。如果他们帮了您的忙,您可以调用它并拦截方法调用的结果...但是,这听起来像单元测试吗?

关于c# - 编码的UI + Windows Phone 8.1-获取屏幕尺寸和方向?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27167292/

10-10 21:55