【问题标题】:Coded UI + Windows Phone 8.1 — get screen size and orientation?Coded UI + Windows Phone 8.1 — 获取屏幕尺寸和方向?
【发布时间】:2015-01-25 20:26:37
【问题描述】:

我尝试过的事情:

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

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

EnumDisplaySettingsEx WinAPI — 不填充任何值。

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

还有其他想法吗?

提前致谢。

【问题讨论】:

  • CoreApplication.GetCurrentView().CoreWindow.Bounds 是否工作(直接或通过 CoreApplication.GetCurrentView().Dispatcher.RunAsync)?
  • CoreApplication.GetCurrentView() 抛出“找不到元素”HResult 为 0x80070490

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


【解决方案1】:

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

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

一个很好的例子是在测试 WebBrowser 时,CODEDUI 使用了一个名为 BrowserWindow 的类,它与其他地方的 WebBrowser 类完全不同。我可以在 CODEDUI 中访问 DOM 的唯一方法是通过 BrowserWindow.Document 属性。然后我必须做一些花哨的演员才能得到我想要的。我怀疑这是你必须做的。

  1. 确定哪个 CodedUI 类将代表您要自动化的窗口。
  2. 在该类中寻找方法或属性,使您能够根据需要进行寻址。
  3. 如果您找不到您需要的内容,那么您只剩下一个选项,即下拉到操作系统消息传递层,看看您是否无法(进程外)发送和接收消息。这是一个复杂而复杂的话题,我从未成功过。注意:在这一层完成的大部分工作都是用 C++ 完成的,因此了解 C++ 以及 Windows 如何使用它(API)真的很有帮助...

还有什么办法吗?

是的,QA 团队应该能够为他们与编程团队建立一些需求/挂钩。首先要问的是“单元测试应该这样做吗?”无论任何人教什么,CODEDUI 都不是真正的功能测试,它在验证功能方面与单元测试相去甚远。

其次,您可以要求开发团队在他们的代码中添加挂钩,这样您就可以“搞定这些事情”。换句话说,代码现在必须包含 QA 团队进行验证的内容。在您的情况下,您可以要求开发人员为您输入一个调用 GetForCurrentView 并将结果传回的方法。但是因为 CodedUI 是可视化的而不是功能性的,所以您必须与他们合作才能弄清楚如何在 GUI 层公开结果。

还有什么?

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

【讨论】:

  • 我正在开发适用于 windows phone 8.1 平台的商业测试自动化工具。我不在 QA 团队中,也没有开发团队,我需要自动化客户想要测试的任何二进制文件。 windows phone 上没有 windows 消息层。 GUI 不是基于 Win32 构建的(例如,整个系统只有一个 HDC,user32.dll 仅导出约 40 个函数,而在 Win 8.1 桌面上仅导出约 2400 个函数)。
  • 哎哟......祝你好运,如果你能解决这个问题,请回帖,因为我不知道如何做到这一点......
  • "Windows Phone 上没有窗口消息层" 实际上有一个消息层,但你是对的,它不是 Win32,它被称为别的东西。概念是一样的。在 C++ 中,它们确实有一个称为 IPC 的层,您可能想研究一下……当您遇到进程间障碍时。
  • 另外,我觉得很奇怪你仅仅因为我说的是实话就给我打分。
  • 最后一个提示,UITestControls 中有一个名为 Native Element 的属性,尝试查看是否可以获取该值并解析出这些值。
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多