Automate Everything

关于自动化相关的任何东西,包括自动化测试,Visual Studio宏, 自动化安装部署等
11
Apr
2008

在C#中如何模式鼠标键盘操作

上一篇讲了在自动化测试中如果控件不能识别,我们最后的办法是模拟鼠标键盘,这一篇就讲如何来做。

首先我先讲在C#中怎么做,至于在C++或者脚本中怎么做,留在后边来讲

对C#来说,键盘的模拟比较简单,在.Net Framework中System.Windows.Forms.SendKeys这个类

鼠标呢,看下边代码:

   1: [DllImport(“user32″)]
   2: public static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
   3: 
   4: [Flags]
   5: public enum MouseEventFlags
   6: {
   7:     Move = 0×0001,
   8:     LeftDown = 0×0002,
   9:     LeftUp = 0×0004,
  10:     RightDown = 0×0008,
  11:     RightUp = 0×0010,
  12:     MiddleDown = 0×0020,
  13:     MiddleUp = 0×0040,
  14:     Wheel = 0×0800,
  15:     Absolute = 0×8000
  16: }
  17: 
  18: void PixelsToAbsCoors(double x, double y, ref double xOut, ref double yOut)
  19: {
  20:     //points are based on current screen size setting   
  21:     xOut = x * 65536 / Screen.PrimaryScreen.Bounds.Width + 0.5;
  22:     yOut = y * 65536 / Screen.PrimaryScreen.Bounds.Height + 0.5;
  23: }
  24: public void Move(double x, double y)
  25: {
  26:     PixelsToAbsCoors(x, y, ref x, ref y);
  27:     mouse_event((int)(MouseEventFlags.Move | MouseEventFlags.Absolute), (int)x, (int)y, 0, 0);
  28: }
  29: public void Click(double x, double y)
  30: {
  31:     Move(x, y);
  32:     PixelsToAbsCoors(x, y, ref x, ref y);
  33:     mouse_event((int)(MouseEventFlags.LeftDown | MouseEventFlags.Absolute), (int)x, (int)y, 0, 0);
  34:     mouse_event((int)(MouseEventFlags.LeftUp | MouseEventFlags.Absolute), (int)x, (int)y, 0, 0);
  35: }
把这篇文章分享到: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • bodytext
  • Google
  • Facebook
  • Furl
请给这篇文章打分:
太差了有点差马马虎虎了很不错非常好 (2 votes, average: 5 out of 5)
Loading ... Loading ...

11
Apr
2008

在自动化测试中,如果控件不能识别,你会这么做?

我们知道,在做自动化测试时,总会碰到一些自动化测试工具不能识别的控件,比如WPF控件、用户自己绘制的控件、以及一些复杂的组合控件等。当自动化工具对这些控件无能为力的时候,我们怎么办?
这个时候是最考察自动化测试人员能力的时候,因为能解决多少这种问题,决定了你能够自动化多少Testcase。
解决这种问题的方法我认为大概有一下几种:
1. 如果是因为自动化测试工具的限制,比如对于WinForm的控件,有些自动化工具就不能识别,碰到这种情况,最好是看这个工具有没有扩展可以用,比如Silktest的.Net Framework扩展。如果不行,那只能换自动化测试工具了。所以这个凸显出在做自动化测试以前,选择自动化测试工具的重要性。
2. 如果是因为控件比较复杂,自动化工具可以识别,但是无法操作。这时我们可以通过Window API以及消息的方式来做,比如自己去调Window API来操作窗口,或者请开发实现一下消息的接口来给自动化工具调用等
3. 跟开发沟通,让他们的控件支持IAccessible接口,然后我们通过MSAA来操作(如果是WPF控件,则需要实现UIAutomation定义的一些接口)。不过一般情况下,除了微软这样对软件的Accessible要求很高的公司,其它公司很少会花费时间来实现这个接口……。 另外扯一句,产品的Accessible的程度,实质上决定了一个公司能对产品做自动化测试的程度。
4. 如果以上方法都不行,那只有最后一个双刃剑可以用了,就是鼠标键盘模拟。理论上来说,只要用户可以操作的东西,只要有界面,就可以通过鼠标键盘模拟来实现(君不见N多游戏外挂的键盘鼠标模拟大法)。就如双刃剑一样,这种做法是杀敌一千,自损八百。因为鼠标键盘模拟非常依赖于当前激活的窗口以及光标位置和焦点位置,而且同步起来很困难。这也造成了后期维护成本很高。

总之,碰到界面控件不能操作的问题我们需要开动我们的思维,能绕过去的尽量绕过去;能不通过界面操作就可以做的,一定不通过界面;实在绕不过去的,就找一个最稳定的方式去做;最后还没有办法就用鼠标键盘模拟吧,总比没法做强……

把这篇文章分享到: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • bodytext
  • Google
  • Facebook
  • Furl
请给这篇文章打分:
太差了有点差马马虎虎了很不错非常好 (1 votes, average: 5 out of 5)
Loading ... Loading ...

11
Apr
2008

你是否知道-你可把代码段拖拽到Toolbox里边

转载翻译自:Did you know… You can drag and drop code onto the Toolbox General tab? - #191

今天的小提示很有意思,特别是如果你在给别人做演示的时候。所有的人都看到你没有写任何代码,但是实际上代码已经准备好了:),让我们看一下如何做吧:

你可以已经注意到Toolbox的General页在你编辑代码的时候默认显示如下:
ToolboxGeneralTab_thumb

其实你可以拖拽代码段到这个地方,在然后需要的时候再拖拽回来,不明白的看下图:
ToolboxGeneralTab2_thumb

把这篇文章分享到: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • bodytext
  • Google
  • Facebook
  • Furl
请给这篇文章打分:
太差了有点差马马虎虎了很不错非常好 ( 您是第一个打分的人)
Loading ... Loading ...

10
Apr
2008

你是否知道- 你可以在Toolbox中显示所有被隐藏的控件

转载自:Did you know… You can do a "show all" to find your "hiding" toolbox controls - #190

很多问都会奇怪为什么某个控件在Toolbox上找不到了, 特别是当他们刚刚添加了一些控件。(比如:你在Toolbox上点击右键, 选中Choose Items菜单项,然后选择了一些特定的dll和已经注册的控件),但是你有可能找不到你所添加的控件。

出现这种情况的原因就是在Toolbox上边显示的所有控件都被与当前被激活的设计器(designer)相关。设计器都都在VS中相同的位置,你可以用它来设计UI(比如设计一个WinForm的窗口)而不是写代码,在设计器名称的前边会有‘[design]’。因此,如果你当前打开的设计器不支持你新添加的控件,那么它就不会被显示在Toolbox中。

ToolboxShowAll_thumb

通过点击“Show All”, 你可以看到所有的控件。通过这种方式,你可以验证控件是否被正确的添加到Toolbox中,但是控件是否可用,依赖于你打开的设计器是否支持这种控件(不支持的控件显示为灰色)。

toolbox_showall

把这篇文章分享到: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • bodytext
  • Google
  • Facebook
  • Furl
请给这篇文章打分:
太差了有点差马马虎虎了很不错非常好 ( 您是第一个打分的人)
Loading ... Loading ...

09
Apr
2008

你是否知道-你可以用Ctrl+Up和Ctrl+Down在控件组之间移动

转载自:Did you know… You can use Ctrl+Up and Ctrl+Down to move among the various control groups in the Toolbox - #187

你可能使用PageUp和PageDown在Toolbox中移动光标,更方便的一种方式是用Ctrl+Up和Ctrl+Down

把这篇文章分享到: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • bodytext
  • Google
  • Facebook
  • Furl
请给这篇文章打分:
太差了有点差马马虎虎了很不错非常好 ( 您是第一个打分的人)
Loading ... Loading ...

09
Apr
2008

blog建设终于搞一阶段了,新功能展示

分享功能经过今天一早上对RSS布局的调整和安装配置各种各样的插件,blog建设基本定型,短期内不会再进行大的改动。FeedSky和Google Analytics的域名绑定也完成了。

Blog新加功能展示:
1. 相册
    没有在主页面上显示缩略图,主要是处于页面空间考虑,而且也没有找到一个合适的插件来做。请点击主页上‘相册’链接进入
     Blog_album.png
2. 日期时间显示格式
    现在调整为显示星期、按中国习惯的日期格式、显示发表的时间
3. 侧边栏宽度调整,使第一个侧边栏宽度略宽,用以显示链接收藏
4. 页面文字全部汉化,用更有个性的语言替代模板默认的英文字符
5. 增加分享功能,可以收藏文章到Delicious等
6. 增加评分功能,可以针对文章打分(最高为5分)
7. 在侧边栏显示评分最高的文章、评论最多的文章等
8. 在每一篇文章后便,增加随机显示文章功能

把这篇文章分享到: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • bodytext
  • Google
  • Facebook
  • Furl
请给这篇文章打分:
太差了有点差马马虎虎了很不错非常好 (1 votes, average: 5 out of 5)
Loading ... Loading ...