Unitest+slenium+appium+winappdriver:自动化桌面应用程序启动
三层框架:
- 逻辑层
- 测试层
- 数据层
整体:
- 编写桌面程序UI自动化脚本
- 结合业务加入断言判断结果
- 依据结果生成测试报告和文档
框架搭建文件结构
- Page:基本功能的封装
- temp:暂存文件
- testCase:测试项目用例,断言用例
- testSuit:项目运用场景实现
- report:存放html文件,输出测试报告
- runall:调用方法运行所有用例
- main:主函数,直接启动项目
- config:配置驱动文件
下图整体框架:
python使用库:
- WinAppDriver:桌面应用程序驱动,用来控制桌面应用程序启动
- Selenium:定位元素,进行点击输入等操作
- Appium:监听winappdriver启动的端口
PS:要注意版本的兼容性!
定位元素文件Inspect.exe
查看应用后台元素
inspect.exe定位元素
selenium查找元素方法
1、id、name、class_name:为元素属性定位
2、tag_name:为元素标签名称
3、Xpath:为元素路径定位
代码层:
config.py文件
from appium import webdriver
appium_server_url = "http://127.0.0.1:4723/wd/hub" #一定要改成这样,如果直接端口号appium响应不了
# 配置启动应用程序的Desired Capabilities
desired_caps = {
"platformName": "Windows",
"deviceName": "WindowsPC",
"app": r"你的程序位置", # 请替换成目标应用程序的信息
}
# 创建Appium驱动
driver = webdriver.Remote(appium_server_url, desired_caps)
TestPage.py文件
from appium import webdriver
from selenium.webdriver.common.by import By
from config import appium_server_url, desired_caps
class TestPage:
def __init__(self):
self.driver = webdriver.Remote(appium_server_url, desired_caps)
def click_element_by_name(self, element_name):
element = self.driver.find_element(By.NAME, element_name)
element.click()
def enter_text_by_name(self, element_name, text):
input_element = self.driver.find_element(By.NAME, element_name)
input_element.send_keys(text)
def close(self):
self.driver.quit()
TestCase.py文件
import time
import random
import unittest
from TestPage import TestPage
class TestMyApp(unittest.TestCase):
def setUp(self):
self.test_page = TestPage()
def tearDown(self):
self.test_page.close()
# driver.quit()
TestSuit.py文件
# test_suite.py
import unittest
from TestCase.testcase import TestMyApp
# 创建测试套件
test_suite = unittest.TestSuite()
# 添加测试用例类到测试套件
test_suite.addTest(unittest.TestLoader.loadTestsFromTestCase(TestMyApp))
if __name__ == '__main__':
# 运行测试套件
unittest.TextTestRunner().run(test_suite)
runall.py文件
import unittest
from TestCase.testcase import TestMyApp
from report.HTMLTestRunner import HTMLTestReportEN
if __name__ == '__main__':
# 添加测试用例到测试套件
test_loader = unittest.TestLoader()
test_suite = test_loader.loadTestsFromTestCase(TestMyApp)
# 指定报告文件的路径和名称
report_file = r''
# 打开报告文件
with open('./HwTestReportIMG.html', 'wb') as report:
runner = HTMLTestReportEN(stream=report,
verbosity=2,
images=True,
title='',#加自己的内容
description='',#加自己的内容
tester='')#加自己的内容
# 运行测试套件
runner.run(test_suite)