在做WPF的开发中在某些场景下会需要进行重复的行为进行各方面覆盖测试,例如:
这个时候如果纯手动操作会非常影响进度效率低下,这个时候单独开一台机器跑自动化测试的脚本来辅助测试,不需要有人值守在傍边就可以完成这样的工作可以说是一件非常节约生命的事情。
这里分享一下脚本自动化测试的一个例子,给有这样需求的小伙伴一个思路。
语言:python
版本:3.11.5
IDE:VS Code
环境:https://www.python.org/ftp/python/3.11.5/python-3.11.5-amd64.exe
语言:C#
框架:WPF
IDE:VS 2022
环境:.NET 6
测试内容:自动点击窗体中的某个按钮。
这个自动化测试会需要用到pyautogui的包,这个时候需要在项目目录下打开powershell输入。
pip install pyautogui
代码:
pyautogui这个包的特点是根据图像来识别要点击的图片,所以需要把你要点击的按钮截图下来保存与py脚本同一级目录下(只用截图按钮即可)。然后先启动WPF应用程序再启动py脚本即可(注意WPF窗体不能被遮挡)。
import pyautogui
# 找到按钮图像位置 (这里需要一张按钮的截图,命名为'button.png')
button_location = pyautogui.locateOnScreen('button.png')
if button_location:
# 计算按钮中心点位置
button_center = pyautogui.center(button_location)
# 移动鼠标至按钮中心并点击
pyautogui.moveTo(button_center)
pyautogui.click()
else:
print("Button not found on screen.")
运行效果:
测试内容:自动向文本框输入一段字符串,然后点击按钮验证输入的内容。
这个自动化测试会需要用到pywinauto的包,这个时候需要在项目目录下打开powershell输入。
pip install pywinauto
代码:
这里只需要把py脚本中的路径配置好即可,注意路径的斜杠。
from pywinauto.application import Application
import time
# 启动应用程序
app = Application(backend="uia").start("your path/..../WpfApp1.exe")
time.sleep(1) # Wait for 5 seconds
# 选择窗口
dlg = app.window(title='MainWindow')
# 在密码框中输入内容 , control_type="TextBox"
dlg.child_window(auto_id="TxboxPwd").type_keys('123')
# 点击登录按钮 , control_type="Button"
dlg.child_window(auto_id="BtnOK").click()
WPF代码:
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBox x:Name="TxboxPwd" Width="200" Height="25" ></TextBox>
<Button x:Name="BtnOK" Width="200" Height="25" Content="Button" Click="Button_Click" Margin="0,20,0,0"></Button>
</StackPanel>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
TxboxPwd.Text = "hello,py";
}
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(TxboxPwd.Text);
}
}
运行效果: