前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PC端自动化测试(三)

PC端自动化测试(三)

作者头像
zx钟
发布2020-04-08 15:22:19
1.4K0
发布2020-04-08 15:22:19
举报
文章被收录于专栏:测试游记

编辑类控件的基本操作

通过记事本来进行测试

代码语言:javascript
复制
import pywinauto

app = pywinauto.Application().start("notepad.exe")
# 选择主窗口
dlg = app["无标题 - 记事本"]
dlg.print_control_identifiers()

输入内容

选择编辑框并输入Hello World!

代码语言:javascript
复制
dlg["Edit"].type_keys("Hello World!")

替换

  1. 通过菜单选择替换
  2. 选择替换窗口app["替换"]
  3. 选择查找编辑框并输入World
  4. 选择替换为编辑框并输入Python
  5. 点击全部替换按钮
代码语言:javascript
复制
dlg.menu_select("编辑->替换(R)")
app["替换"].print_control_identifiers()
app["替换"]["Edit1"].type_keys("World")
app["替换"]["Edit2"].type_keys("Python") 
app["替换"]["Button3"].click()

键盘操作

键盘操作模块:pywinauto.keyboard

send_keys方法

  • 按F5:send_key("{VK_F5}")
  • 按F5:send_key("{F5}")
  • 按回车:send_key("{VK_RETURN}")
  • 按字母A:send_key('A')

常用按键

  • ESC:VK_ESCAPE
  • TAB:VK_TAB
  • Shift:VK_SHIFT
  • Ctrl:VK_CONTROL
  • Alt:VK_MENU
  • 空格:VK_SPACK
  • 退格:VK_BACK
  • 左win:VK_LWIN
  • 右win:VK_RWIN

键盘修饰符

  • +:按Shift
  • ^:按Ctrl
  • %:按Alt

例如^s相当于输入ctrl+s

鼠标操作

鼠标操作模块:pywinauto.mouse

  • click:点击
  • double_click:双击
  • right_clik:右击
  • wheel_click:中间点击
  • press:按下
  • repleace:释放
  • move:移动
  • scrool:滚动
代码语言:javascript
复制
from pywinauto import mouse

# 鼠标单击(默认左键)
mouse.click(coords=(580,52))

# 鼠标右键
mouse.right_click(coords=(1000,500))

# 鼠标双击
mouse.double_click(button="left",coords=(155,50))

# 点击鼠标中键
mouse.wheel_click(coords=(1000,500))

# 按下鼠标
mouse.press(coords=(72,31))
# 释放鼠标    
mouse.release(coords=(1000,500))

# 滑动鼠标滚轮
mouse.scroll(coords=(1000, 500), wheel_dist=1)

# 移动鼠标位置
mouse.move(coords=(0, 0))

for i in range(0, 1000, 50):
    mouse.move(coords=(i, i))

# 部分无法直接点击的控件:获取控件中心点位置,双击点击
rect = db_name.rectangle().mid_point()
mouse.double_click(coords=(rect.x, rect.y))

查看系统提示

在时钟附近有表示正在运行的应用程序的图标,也就是「系统托盘」,也被称为「通知区域」。

可以通过启动Explorer.exe应用程序,在任务栏用户提示通知区域找到工具栏控件

代码语言:javascript
复制
from pywinauto import Application

app = Application("uia").connect(path="explorer")
icons = app['任务栏']['用户提示通知区域']

结合Selenium实现文件上传

代码语言:javascript
复制
import pywinauto
from pywinauto.keyboard import send_keys
from selenium import webdriver

url= "https://www.layui.com/demo/upload.html"
browser = webdriver.Chrome()
browser.get(url=url)
browser.find_element_by_xpath("//button[@id='test1']").click()

# 使用pywinauto来选择文件
app = pywinauto.Desktop()
# 选择文件上传的窗口
dlg = app["打开"]
dlg.print_control_identifiers()

# 选择文件地址输入框
dlg["Toolbar3"].click()
send_keys("C:\images")
send_keys("{VK_RETURN}")

# 选中文件名输入框
dlg["文件名(&N):Edit"].type_keys("9.png")

# 点击打开
dlg["打开(&O)"].click()

连接Navicat并操作

代码语言:javascript
复制
import pywinauto
from pywinauto import mouse
from pywinauto.keyboard import send_keys


class NavicatTest:

    def __init__(self, path=None, precess=None):
        # 初始化一个应用程序对象
        if path:
            self.app = pywinauto.Application(backend="uia").start(path)
        else:
            self.app = pywinauto.Application(backend="uia").connect(process=precess)
        # 选择主窗口
        self.dlg = self.app["Navicat for MySQL"]

    def new_connect(self, title, host, port, user, password):
        """
            新建连接
        """
        # 选择菜单栏
        menu = self.dlg["Menu"]
        # 点击文件
        menu.child_window(title="文件", control_type="MenuItem").click_input()
        # 点击新建连接
        menu.item_by_path("文件->新建连接...").click_input()
        # 选择新建连接窗口
        new_dlg = self.app["新建连接"]
        # 连接名称输入框
        new_dlg["常规"].Edit5.type_keys(title)
        # ip输入框
        new_dlg["常规"].Edit1.type_keys(host)
        # 端口输入框
        new_dlg["常规"].Edit4.type_keys(port)
        # 用户名输入框
        new_dlg["常规"].Edit3.type_keys(user)
        # 密码输入框
        new_dlg["常规"].Edit2.type_keys(password)
        # 点击确定按钮
        new_dlg["确定"].click()

    def open_connect(self, title):
        """
        打开连接或者数据库
        :param title: 连接名或者数据库名
        :return:
        """
        # 获取控制坐标中心点,进行点击,打开连接
        db_name = self.dlg["TTreeView"].child_window(title=title, control_type="TreeItem")
        rect = db_name.rectangle().mid_point()
        print(rect.x, rect.y)
        mouse.double_click(coords=(rect.x, rect.y))

    def del_connect(self, title):
        """删除连接"""
        # 获取控件中心点位置
        db_name = self.dlg["TTreeView"].child_window(title=title, control_type="TreeItem")
        rect = db_name.rectangle().mid_point()
        # 鼠标在控件中心点,右击
        mouse.right_click(coords=(rect.x, rect.y))
        # 删除连接
        self.app["上下文"]["MenuItem5"].click_input()
        # 选择删除窗口
        self.app["确认删除"]["删除"].click()

    def close_coonnect(self, title):
        """
        关闭连接或者数据库
        :param title: 连接名或者数据库名
        :return:
        """
        # 获取控件中心点位置
        db_name = self.dlg["TTreeView"].child_window(title=title, control_type="TreeItem")
        rect = db_name.rectangle().mid_point()
        # 鼠标在控件中心点,右击
        mouse.right_click(coords=(rect.x, rect.y))
        # 删除连接
        self.app["上下文"]["MenuItem2"].click_input()

    def del_database(self, database):
        db_name = self.dlg["TTreeView"].child_window(title=database, control_type="TreeItem")
        rect = db_name.rectangle().mid_point()
        mouse.right_click(coords=(rect.x, rect.y))
        self.app["上下文"]["MenuItem4"].click_input()
        # 选择删除窗口
        self.app["确认删除"]["删除"].click()

    def new_database(self, title, database, charset="utf8 -- UTF-8 Unicode"):
        """新建数据库"""
        db_name = self.dlg["TTreeView"].child_window(title=title, control_type="TreeItem")
        rect = db_name.rectangle().mid_point()
        mouse.right_click(coords=(rect.x, rect.y))

        dlg = self.app["上下文"]
        # 点击新建连接
        dlg.MenuItem8.click_input()
        # 获取新建连接的窗口
        # self.app["新建数据库"].print_control_identifiers()
        # 数据数据库名
        self.app["新建数据库"]["常规"].Edit3.type_keys(database)
        self.app["新建数据库"]["常规"].Edit2.type_keys(charset)
        # 键盘回车键,点击确定
        send_keys("{VK_RETURN}")

    def new_find_dlg(self):
        """新建查询窗口"""
        find = self.dlg["TTreeView"].child_window(title="查询", control_type="TreeItem")
        # 获取查询的左边
        rect = find.rectangle().mid_point()
        # 鼠标右击
        mouse.right_click(coords=(rect.x, rect.y))
        # 选择出现的小窗口
        dlg = self.app["上下文"]
        # 点击新建连接
        dlg.MenuItem1.click_input()

    def find_sql(self, database, title, sql):
        """查询sql"""
        title = "无标题 @{} ({}) - 查询".format(database, title)
        find_dlg = self.app[title]
        find_dlg["TabControl"].print_control_identifiers()
        # 获取编辑框
        edit = find_dlg["TabControl"].Pane4
        # 获取编辑窗口控件位置
        rect = edit.rectangle().mid_point()
        mouse.click(coords=(rect.x, rect.y))
        sql = "^a{}".format(sql.replace(" ", "{VK_SPACE}")) + ";"
        send_keys(sql)
        # 使用运行快捷键
        send_keys("^r")


if __name__ == '__main__':
    nav = NavicatTest(precess=1320)

    # 新建连接
    nav.new_connect(title="python666", host="localhost", port=3306, user="root", password="mysql")

    # 打开连接
    nav.open_connect("win")

    # 关闭连接
    nav.close_coonnect("test")

    # 打开数据库
    nav.open_connect("test")

    # 新建查询窗口
    nav.new_find_dlg()

    # 查询数据
    sql = "SELECT * FROM students"
    nav.find_sql("test", "win", sql)

    # # 删除连接
    nav.del_connect("localhost_3306")
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 编辑类控件的基本操作
    • 通过记事本来进行测试
      • 输入内容
        • 替换
        • 键盘操作
          • 常用按键
            • 键盘修饰符
            • 鼠标操作
            • 查看系统提示
            • 结合Selenium实现文件上传
            • 连接Navicat并操作
            相关产品与服务
            云数据库 MySQL
            腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档