win10使用WinAppDriver实现UI自动化

作者: zengde 分类: 技术相关 发布时间: 2021-10-29 01:43

win10使用WinAppDriver实现UI自动化

WinAppDriver说明

  • WinAppDriver(Windows Application Driver)是一个类似Selenium的UI自动化测试服务
  • 系统要求: Windows10或Windows Server 2016
  • 支持应用程序: UWP, WPF, WinForms, Win32

开发配置

  • 要求系统启用开发人员模式
  • 设置 -> 更新和安全 -> 开发者选项

测试环境

系统: win10
Python3.6.3

下载&安装&运行

示例

  • 连接WinAppDriver服务
webdriver.Remote(command_executor=\'http://127.0.0.1:4723\', desired_capabilities=desired_caps)
  • 元素查找
# 这里的 文本编辑器 指的是句柄的name
self.driver.find_element_by_name("文本编辑器")
  • 元素可以通过inspect.exe获取, 系统一般自带, 路径C:\Program Files (x86)\Windows Kits\10\bin\x64
  • 实践: 操作记事本

参考代码

import unittest

from appium import webdriver
from selenium.webdriver.common.keys import Keys


class NotepadTests(unittest.TestCase):

    @classmethod
    def setUpClass(self):
        desired_caps = {}
        desired_caps[\'app\'] = r"C:\Windows\System32\notepad.exe"
        self.driver = webdriver.Remote(
            command_executor=\'http://127.0.0.1:4723\',
            desired_capabilities=desired_caps)

    @classmethod
    def tearDownClass(self):
        self.driver.quit()

    def test_edit(self):
        self.driver.find_element_by_name("文本编辑器").send_keys("polyv")
        self.driver.find_element_by_name("文件(F)").click()
        self.driver.find_element_by_xpath(
            \'//MenuItem[starts-with(@Name, "保存(S)")]\').click()
        self.driver.find_element_by_xpath(
            \'//Pane[starts-with(@ClassName, "Address Band Root")]\').find_element_by_xpath(
            \'//ProgressBar[starts-with(@ClassName, "msctls_progress32")]\').click()
        self.driver.find_element_by_xpath(
            \'//Edit[starts-with(@Name, "地址")]\').send_keys(
            r"D:\test"   Keys.ENTER)
        self.driver.find_element_by_accessibility_id(
            \'FileNameControlHost\').send_keys("note_test.txt")
        self.driver.find_element_by_name("保存(S)").click()
        self.driver.find_element_by_name("关闭").click()


if __name__ == "__main__":
    suite = unittest.TestLoader().loadTestsFromTestCase(NotepadTests)
    unittest.TextTestRunner(verbosity=2).run(suite)