基于pywinauto的自动化测试(三)

自动化测试主要包括四个步骤:获取软件、控件定位、执行操作和结果验证。在控件定位阶段,如pywinauto库所示,可以识别各种控件如Dialog、Button、Edit等,并通过click_input、type_keys等方法进行交互。最后,使用断言模块确保操作后的结果符合预期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       在所有的自动化测试中,不管是对于app软件CS架构还是web段的BS架构进行的自动化测试操作,流程主要分为四步骤:第一步是通过app获取到你想要操作的软件;第二步是定位到具体软件的控件;第三步是进行对控件的操作;第四步是校验操作后的结果。

第一步在前面已经详细进行介绍

这里不过多进行赘述。

第二步是定位到具体软件的控件

​
Dialog - 'python'    (L791, T144, R1511, B915)

['python', 'Dialog', 'pythonDialog']

child_window(title="python", auto_id="xxx--测试平台", control_type="Window")

   |

   | TitleBar - ''    (L-31965, T-31997, R-31774, B-31961)

   | ['TitleBar']

   |    |

   |    | Menu - '系统'    (L-31989, T-31989, R-31956, B-31956)

   |    | ['系统', 'Menu', '系统Menu', '系统0', '系统1']

   |    | child_window(title="系统", auto_id="MenuBar", control_type="MenuBar")

   |    |    |

   |    |    | MenuItem - '系统'    (L-31989, T-31989, R-31956, B-31956)

   |    |    | ['系统2', 'MenuItem', '系统MenuItem']

   |    |    | child_window(title="系统", control_type="MenuItem")

   |    |

   |    | Button - '还原'    (L-31985, T-31999, R-31914, B-31961)

   |    | ['Button', '还原', '还原Button', 'Button0', 'Button1']

   |    | child_window(title="还原", control_type="Button")

   |    |

   |    | Button - '最大化'    (L-31914, T-31999, R-31844, B-31961)

   |    | ['Button2', '最大化Button', '最大化']

   |    | child_window(title="最大化", control_type="Button")

   |    |

   |    | Button - '关闭'    (L-31844, T-31999, R-31773, B-31961)

   |    | ['关闭', 'Button3', '关闭Button']

   |    | child_window(title="关闭", control_type="Button")

   |

   | Static - '姓名:'    (L831, T174, R885, B190)

   | ['姓名:', 'Static', '姓名:Static', 'Static0', 'Static1']

   | child_window(title="姓名:", control_type="Text")

   |

   | Edit - ''    (L886, T174, R986, B194)

   | ['姓名:Edit', 'Edit', 'Edit0', 'Edit1']

   |

   | Static - '工号:'    (L1061, T174, R1115, B190)

   | ['Static2', '工号:', '工号:Static']

   | child_window(title="工号:", control_type="Text")

   |

   | Edit - ''    (L1116, T174, R1216, B194)

   | ['工号:Edit', 'Edit2']

   |

   | Static - '部门: '    (L1291, T174, R1345, B190)

   | ['部门: ', 'Static3', '部门: Static']

   | child_window(title="部门: ", control_type="Text")

   |

   | Edit - ''    (L1341, T174, R1441, B194)

   | ['部门: Edit', 'Edit3']

   |

   | Static - '外网IP:'    (L831, T214, R885, B230)

   | ['Static4', '外网IP:', '外网IP:Static']

   | child_window(title="外网IP:", control_type="Text")

   |

   | Edit - ''    (L886, T214, R986, B234)

   | ['外网IP:Edit', 'Edit4']

   |

   | Static - '用户名:'    (L1061, T214, R1115, B230)

   | ['用户名:', 'Static5', '用户名:Static']

   | child_window(title="用户名:", control_type="Text")

   |

   | Edit - ''    (L1116, T214, R1216, B234)

   | ['Edit5', '用户名:Edit']

   |

   | Static - '密码: '    (L1291, T214, R1345, B230)

   | ['Static6', '密码: ', '密码: Static']

   | child_window(title="密码: ", control_type="Text")

   |

   | Edit - ''    (L1341, T214, R1441, B234)

   | ['密码: Edit', 'Edit6']

   |

   | Button - '录入信息'    (L1341, T254, R1416, B277)

   | ['录入信息Button', 'Button4', '录入信息']

   | child_window(title="录入信息", control_type="Button")

   |

   | Table - ''    (L843, T394, R1459, B694)

   | ['Table', '按类型查找Table']

   |    |

   |    | Pane - ''    (L0, T0, R0, B0)

   |    | ['Pane']

   |    |

   |    | Header - '号码'    (L844, T395, R884, B432)

   |    | ['Header', '号码', '号码Header', 'Header0', 'Header1']

   |    | child_window(title="号码", control_type="Header")

   |    |

   |    | Header - '姓名'    (L884, T395, R944, B432)

   |    | ['Header2', '姓名Header', '姓名', '姓名0', '姓名1']

   |    | child_window(title="姓名", control_type="Header")

   |    |

   |    | Header - '工号'    (L944, T395, R1094, B432)

   |    | ['Header3', '工号', '工号Header', '工号0', '工号1']

   |    | child_window(title="工号", control_type="Header")

   |    |

   |    | Header - '部门'    (L1094, T395, R1244, B432)

   |    | ['Header4', '部门', '部门Header', '部门0', '部门1']

   |    | child_window(title="部门", control_type="Header")

   |    |

   |    | Header - '外网IP'    (L1244, T395, R1394, B432)

   |    | ['Header5', '外网IP', '外网IPHeader']

   |    | child_window(title="外网IP", control_type="Header")

   |    |

   |    | Header - '用户名'    (L1394, T395, R1544, B432)

   |    | ['Header6', '用户名', '用户名Header']

   |    | child_window(title="用户名", control_type="Header")

   |    |

   |    | Header - '密码'    (L1544, T395, R1694, B432)

   |    | ['Header7', '密码', '密码Header']

   |    | child_window(title="密码", control_type="Header")

   |

   | Static - '按类型查找'    (L831, T257, R922, B273)

   | ['Static7', '按类型查找', '按类型查找Static']

   | child_window(title="按类型查找", control_type="Text")

   |

   | ComboBox - ''    (L921, T254, R1032, B276)

   | ['ComboBox外网', '按类型查找ComboBox', 'ComboBox', 'ComboBox工号', 'ComboBox部门']

   |    |

   |    | ListBox - ''    (L0, T0, R0, B0)

   |    | ['ListBox']

   |    |    |

   |    |    | ListItem - '姓名'    (L0, T0, R640, B18)

   |    |    | ['ListItem', '姓名2', '姓名ListItem', 'ListItem0', 'ListItem1']

   |    |    | child_window(title="姓名", control_type="ListItem")

   |    |    |

   |    |    | ListItem - '工号'    (L0, T18, R640, B36)

   |    |    | ['ListItem2', '工号2', '工号ListItem']

   |    |    | child_window(title="工号", control_type="ListItem")

   |    |    |

   |    |    | ListItem - '部门'    (L0, T36, R640, B54)

   |    |    | ['ListItem3', '部门2', '部门ListItem']

   |    |    | child_window(title="部门", control_type="ListItem")

   |    |    |

   |    |    | ListItem - '外网'    (L0, T54, R640, B72)

   |    |    | ['ListItem4', '外网ListItem', '外网']

   |    |    | child_window(title="外网", control_type="ListItem")

   |

   | Edit - ''    (L831, T297, R941, B317)

   | ['按类型查找Edit', 'Edit7']

   |

   | Button - '查找'    (L956, T294, R1031, B317)

   | ['查找', 'Button5', '查找Button']

   | child_window(title="查找", control_type="Button")

   |

   | Button - '查找全部'    (L1116, T294, R1191, B317)

   | ['查找全部', '查找全部Button', 'Button6']

   | child_window(title="查找全部", control_type="Button")

​

  1. child_window(title="python", auto_id="xxx--测试平台", control_type="Window")
  2.    | Edit - ''    (L886, T174, R986, B194)

           | ['姓名:Edit', 'Edit', 'Edit0', 'Edit1']

     3、 | Button - '查找'    (L956, T294, R1031, B317)

           | ['查找', 'Button5', '查找Button']

           | child_window(title="查找", control_type="Button")

这分别是图中所标记的几个典型的控件信息,这个是pywinauto自带的print_control_ identifiers所打印出的控件信息

这个控件信息有许多种类,常用的有

这就是我们第二步骤常常要定位的控件。

第三步骤中对控件自带的的方法进行操作

# 左点击,可以点进源码,还有double_click_inputright_click_input

edit_btn.click_input()

# ctrl+a选中所有然后再type_keys替换,和我们选中然后修改一样的

edit_btn.type_keys('^a').type_keys('xxx ', with_spaces=True)

或者使用send_keys()模拟键盘的输入的一些操作

第四步就是对结果进行验证

比如:对数据进行写入后,检查数据是否正确写入等,使用assertTrue等断言模块进行检测。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值