赞
踩
1、windows桌面应用自动化 采用Python+Appium+WinAppDriver+Pytest
(1)WinAppDriver是微软开发的自动化测试工具,而windows是微软开发的,兼容性应该极好。
(2)WinAppDriver也可以是appium的一个自动化框架,而Appium 支持python语言。
(3)Appium 是一个开源工具,用于自动化 iOS 手机、 Android 手机和 Windows 桌面平台上的原生、移动 Web 和混合应用。它把这些系统本身提供的框架包装进一套 API —— WebDriver API 中。WebDriver,即Selenium WebDriver。
Windows Application Driver (WinAppDriver)是Windows系统上的一个应用程序驱动工具,使用该驱动程序,测试人员能够通过Appium-Python-Client依赖库完成对Windows桌面程序的自动化操作。
对于熟悉Appium的人员来说,可以轻松上手且完成WinApp自动化测试脚本的编写。本节就来介绍WinAppDriver工具。
WinAppDriver是Windows系统上的一个应用程序驱动工具,开源免费。与Selenium工具类似,都是用来实现产品UI自动化测试的一个工具。
WinAppDriver运行时对系统是有要求的,只能运行在Windows10或Windows Server 2016以上系统。如果测试程序兼容性,WinAppDriver很显然不能满足Windows10或Windows Server 2016以下系统的测试。因此使用WinAppDriver实现的自动化测试脚本是有局限性的。
WinAppDriver支持测试UWP、WinForms、WPF、Win32应用程序。
UWP:Universal Windows Platform,即Windows通用应用平台,在Windows 10 Mobile/Surface(Windows平板电脑)/PC/Xbox/HoloLens等平台上运行。它并不是为某一个终端而设计,而是可以在所有Windows10设备上运行。
WinForms:Windows Forms,是微软的.NET开发框架的图形用户界面部分,该组件通过将现有的Windows API(Win32 API)封装为托管代码提供了对Windows本地(native)组件的访问方式。
WPF:Windows Presentation Foundation,是微软推出的基Windows的用户界面框架,属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。
Win32:Classic Windows,是标准windows程序,完全拥有window的特性,可以通过鼠标点击窗口来完成控制。
WinAppDriver支持Appium,测试人员可以借助Appium的客户端Appium-Python-Client来编写自动化测试脚本,无论从语法还是脚本编写的思路构建上,都是相同的,减少了学习成本。
综上所述,WinAppDriver有以下优点:
它是一个开源工具,它使用Web驱动协议。
它是免费的,由微软开发。
WinAppDriver可以与Selenium和Appium项目集成在同一种语言中。
可以在WinAppDriver中使用任何编程语言。
可以使用Xpath和其他属性来定位UI元素。
初次使用WinAppDriver,借助Appium客户端编写自动化测试脚本需要经过安装WinAppDriver>>开启开发人员模式>>安装Appium客户端>>运行WinAppDriver.exe程序>>编写测试脚本,五个步骤。
WinAppDriver的运行需要开启开发人员模式,否则无法运行。依次进入计算机的设置>>更新和安全>>开发者选项,将【开发人员模式】打开
下载地址:WinAppDriver
如图,默认路径为:C:\Program Files\Windows Application Driver
安装完成会有一个WinAppDriver.exe程序文件,这便是WinAppDriver的启动文件。
WinAppDriver.exe 4727
WinAppDriver.exe 10.0.0.10 4725
WinAppDriver.exe 10.0.0.10 4723/wd/hub
WinAppDriver.exe所在路径下,执行命令WinAppDriver.exe 4727即可完成
http://appium.io/docs/cn/about-appium/intro/
下载地址:https://github.com/appium/appium-desktop/releases
{
"app": "C:\\Program Files\\XMind\\XMind.exe",
"deviceName": "WindowsPC",
"platformName": "Windows"
}
①可作为客户端或服务器使用
②提供元素查找功能
③提供脚本录制功能
④其他
也可能没有,附上下载链接 inspect-exe
inspect.exe查找到的键值对 | python查找元素的方法 |
---|---|
AutomationId | driver.find_element_by_accessibility_id() |
ClassName | driver.find_element_by_class_name() |
RuntimeId (decimal) | driver.find_element_by_id() |
Name | driver.find_element_by_name() |
LocalizedControlType (upper camel case) | driver.find_element_by_tag_name() |
Any | driver.find_element_by_xpath() |
前面,我们已经使用Appium作为客户端成功连接了服务端WinAppDriver;现在,我们通过python脚本连接WinAppDriver。
pip install Appium-Python-Client Selenium
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
# appium服务监听地址(WinAppDriver地址)
server='http://127.0.0.1:4723'
# app启动参数
desired_caps={
"app": "C:\\Program Files\\XMind\\XMind.exe",
"deviceName": "WindowsPC",
"platformName": "Windows"
}
# 连接
driver = webdriver.Remote(server, desired_caps)
wait = WebDriverWait(driver, 30)
appium默认监听端口为4723 WinAppDriver监听端口也为4723 会存在冲突所有一般会自定义了WinAppDriver端口
# appium服务监听地址(WinAppDriver地址)
修改server='http://127.0.0.1:4727'
例如编写一个简单的脚本,启动写字板应用,然后点击最大化按钮,接着点击关闭按钮关闭写字板应用。代码如下:
# winApp_demo.py
import time
from appium import webdriver
from selenium.webdriver.common.by import By
# 添加启动参数
desired_caps = {}
desired_caps['app'] = r"C:\Program Files\Windows NT\Accessories\wordpad.exe"
# 客户端连接 Server,启动 Session 会话
driver = webdriver.Remote(command_executor='http://127.0.0.1:4723', desired_capabilities=desired_caps)
time.sleep(3)
# 定位 最大化 按钮,并点击
driver.find_element(by=By.NAME, value="最大化").click()
time.sleep(1)
# 定位 关闭 按钮,并点击
driver.find_element(by=By.NAME, value="关闭").click()
# 关闭会话
driver.quit()
运行脚本后,会观察到计算机上启动了写字板应用,然后最大化,接着就被关闭。
上面代码中在启动参数中添加了app参数,指明要启动程序;
定位元素使用的是Selenium提供的定位方式,通过元素的NAME属性进行定位,然后对元素点击操作;
最后使用quit()方法结束会话。
整体语法与之前讲解的Web测试自动化和APP测试自动化是相同的,因此很容易掌握。
注意:使用WinAppDriver进行自动化测试时,由于与Appium、Selenium之间的兼容性处理不是很好,因此会许多意想不到的问题。
例如使用高版本的Selenium和Python时,在点击元素时可能会出现“‘dict’ object has no attribute ‘click’”异常,此时就需要将Selenium 版本由4降到3,又或者将Python版本降级到3.6解决。
因为正常定位到的元素是WebElement对象,而非字典。但相信随着这三个工具不断地更新迭代,这些问题都会得到解决。在此笔者WinAppDriver使用的版本是1.2,Appium-Python-Client版本是2.0.0a0,Selenium版本是4.0.0a1。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。