《用户体验测试的自动化实现》- 检查默认焦点位置

本文介绍如何通过自动化测试检查界面的默认焦点位置。使用C#代码和Windows API函数GetFocus获取当前焦点所在控件句柄,以及使用SetFocus将焦点设置到特定控件上。此外,还展示了在QTP中实现相同功能的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:本文最早发表在《51测试天地》第九期

检查默认焦点位置

在进行界面易用性测试和用户体验测试时,我们会要求在打开某个界面时,默认把焦点定位到某个控件,方便用户做后续的操作,例如默认定位到某个输入框,方便用户能马上输入数据。

如果用人工的方式进行检查的话,需要打开每个界面,观察当前光标的位置,检查是否定位到合适的位置上,这样会比较耗费时间。而如果采用自动化的测试方法,则可以利用控件的Focused属性当前是否为True,来判断焦点是否落在控件上。

每一个控件都会有Focused属性,可以使用Windows API函数中的GetFocus函数来获取当前焦点所在的控件,例如下面的C#代码可用于取得当前焦点所在控件的句柄:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Runtime.InteropServices;

namespace GetFocusTest

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

// 使用GetFocus函数获取当前焦点所在控件的句柄

Automation auto = new Automation();

IntPtr hand = auto.FindFocusWindow();

// 以十六进制显示

MessageBox.Show(hand.ToString("X"));

}

}

public class Automation

{

// 导入Windows API中的GetFocus函数

[DllImport("user32.dll", CharSet = CharSet.Auto)]

static extern IntPtr GetFocus();

// 获取当前焦点所在的控件

public IntPtr FindFocusWindow()

{

// 返回控件句柄

return GetFocus();

}

}

}

由代码可知,单击Button1按钮后,获取到的当前焦点所在控件必然是Button1按钮自身,这个可以使用Spy++来进一步验证,如图2所示。

<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 414.75pt; HEIGHT: 300.75pt" type="#_x0000_t75"><imagedata src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image001.png" o:title=""></imagedata></shape>

2 获取焦点所在控件的句柄

GetFocus相对应的Windows API函数是SetFocus,用于把焦点设置到某个控件上。大部分的测试工具在实现焦点的检查和设置其实都是采用了上述过程的原理。例如在QTP中,则可以采用如下脚本来实现相同的功能:

Dialog("Login").Activate

' 如果默认焦点不在Agent Name输入框,则提示错误

If NOT Dialog("Login").WinEdit("Agent Name:").CheckProperty("focused","True" )Then

Msgbox Dialog("Login").WinEdit("Agent Name:").GetROProperty("focused")

End If

这里的CheckProperty函数和GetROProperty函数是基本上可以在每个测试对象中使用的函数,其中CheckProperty类似于检查点,用于检查测试对象的指定属性是否等于指定的值,对于控件焦点,则是focused属性,属性值为True表示焦点落在控件上,属性值为False则表示焦点没有在控件上。

GetROProperty用于获取测试对象运行时的值。通过指定focused属性,可以获取到控件的焦点属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值