编码的UI + Windows Phone 8.1 - 获取屏幕尺寸和方向?

时间:2014-11-27 09:37:34

标签: c# winapi windows-runtime windows-phone-8.1 coded-ui-tests

我尝试的事情:

Windows.Graphics.Display.DisplayInformation WinRT API - GetForCurrentView抛出“必须在与CoreWindow相关联的线程上调用GetForCurrentView”,看起来CodedUI测试在没有窗口的进程中运行。

GetSystemMetrics WinAPI - 返回正确的大小值,但屏幕不会旋转。

EnumDisplaySettingsEx WinAPI - 不填充任何值。

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

还有其他想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

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

一个很好的例子是在测试WebBrowsers时,CODEDUI使用一个名为BrowserWindow的类,它与其他地方找到的WebBrowser类完全不同。我在CODEDUI中获取DOM的唯一方法是通过BrowserWindow.Document属性。然后,我必须做一些花哨的铸造来得到我想要的东西。我怀疑这是你必须要做的。

  1. 确定哪个CodedUI类代表您正在自动化的窗口。
  2. 在该类中查找允许您满足所需要的方法或属性。
  3. 如果找不到您需要的内容,那么您只剩下一个选项,即下拉到操作系统消息传递层,看看是否可以(进程外)发送和接收消息。这是一个复杂而复杂的话题,我从未成功过。注意:在这一层完成的大部分工作都是用C ++完成的,所以知道C ++以及Windows如何使用它(API)确实很有帮助......
  4. 还能做些什么吗?

    是的,QA团队应该能够与编程团队为他们建立一些要求/挂钩。首先要问的是“单元测试是否应该这样做?” CODEDUI不是真正的功能测试,无论任何人教授,它都无法在单元测试中验证功能。

    其次,您可以要求开发团队在其代码中添加钩子,以便您可以“了解这些内容”。换句话说,代码现在必须包含QA团队进行验证的内容。在您的情况下,您可以要求开发人员为您调用GetForCurrentView并将结果传回给您。但是因为CodedUI是Visual而不是功能,所以你必须使用它们来弄清楚如何在GUI层公开结果。

    还有什么?

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