Python 實現pywinauto自動化測試操作軟體(C/S結構)
歡迎加入學習交流QQ群:657341423
pywinauto基於Windows api的操作。以下一些限制條件:
Windows上支援的輔助功能技術列表:
Win32 API(backend=“win32”) - 一個預設後端現在
MFC,VB6,VCL,簡單的WinForms控制元件和大多數舊的舊應用程式
MS UI自動化(backend=“uia”)
WinForms,WPF,Store應用程式,Qt,瀏覽器
注意:Chrome --force-renderer-accessibility在啟動之前需要cmd標誌。不支援自定義屬性和控制元件,因為Python庫限制。
不支援:Java AWT / Swing,GTK +,Tkinter。
詳細可以看官網
https://pywinauto.readthedocs.io/en/latest/index.html
示例:
這是一個用wx開發的一個軟體介面。
程式執行前
灰色輸入框為不可輸入的
程式碼:
from pywinauto import application
app = application.Application()#例項化
app=app.connect(title_re="Cy", class_name="wxWindowNR")#指定程式,connect連結現執行的程式,star是啟動程式
app['Cy']['Edit2'].TypeKeys('aaa')#輸入值,不會清空原來的資料
app['Cy']['Edit3'].SetEditText('bbbb')
#app['Cy']['Edit3'].SetText('bbbb')
app['Cy']['Edit4'].set_edit_text('你好')
#3種輸入值,與.TypeKeys區別在於,這個如果文字框禁止輸入也可強制輸入
a=app['Cy']['Edit1'].WindowText()#獲取值
b=app['Cy']['Edit3'].texts()#獲取值,返回一個陣列
c=app['Cy']['Edit4'].text_block()#獲取值
print (a)
print (b)
print (c)
#app['Cy'][u'啟動'].click()#點選控制元件
#app['Cy'].close_alt_f4()#關閉視窗
程式碼中['Cy']['Edit1']
可以通過Spy++ Lite(UISpy.exe)等工具查詢出控制元件的名稱屬性等。
軟體程式碼:
import wx
class MyFrame ( wx.Frame ):
def __init__( self ):
wx.Frame.__init__ ( self, None, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size(100,50), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
gSizer2 = wx.GridSizer( 0, 2, 0, 0 )
self.SetTitle(u'Cy')
self.m_staticText1 = wx.StaticText( self, wx.ID_ANY, u"方法", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText1.Wrap( -1 )
gSizer2.Add( self.m_staticText1, 0, wx.ALL, 5 )
m_comboBox3Choices = ["Seturl"]
self.m_comboBox3 = wx.ComboBox( self, wx.ID_ANY, m_comboBox3Choices[0], wx.DefaultPosition, wx.DefaultSize, m_comboBox3Choices, 0 )
gSizer2.Add( self.m_comboBox3, 0, wx.ALL, 5 )
self.m_staticText2 = wx.StaticText( self, wx.ID_ANY, u"引數", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText2.Wrap( -1 )
gSizer2.Add( self.m_staticText2, 0, wx.ALL, 5 )
self.m_textCtrl13 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
gSizer2.Add( self.m_textCtrl13, 0, wx.ALL, 5 )
self.m_staticText3 = wx.StaticText( self, wx.ID_ANY, u"引數", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText3.Wrap( -1 )
gSizer2.Add( self.m_staticText3, 0, wx.ALL, 5 )
self.m_textCtrl14 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
gSizer2.Add( self.m_textCtrl14, 0, wx.ALL, 5 )
self.m_staticText4 = wx.StaticText( self, wx.ID_ANY, u"引數", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText4.Wrap( -1 )
gSizer2.Add( self.m_staticText4, 0, wx.ALL, 5 )
self.m_textCtrl15 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
gSizer2.Add( self.m_textCtrl15, 0, wx.ALL, 5 )
self.m_staticText5 = wx.StaticText( self, wx.ID_ANY, u"引數", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText5.Wrap( -1 )
gSizer2.Add( self.m_staticText5, 0, wx.ALL, 5 )
self.m_textCtrl16 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
gSizer2.Add( self.m_textCtrl16, 0, wx.ALL, 5 )
self.m_staticText6 = wx.StaticText( self, wx.ID_ANY, u"返回值", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText6.Wrap( -1 )
gSizer2.Add( self.m_staticText6, 0, wx.ALL, 5 )
self.m_textCtrl17 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
gSizer2.Add( self.m_textCtrl17, 0, wx.ALL, 5 )
self.m_button1 = wx.Button( self, wx.ID_ANY, u"啟動", wx.DefaultPosition, wx.DefaultSize, 0 )
gSizer2.Add( self.m_button1, 0, wx.ALL, 5 )
self.m_button4 = wx.Button( self, wx.ID_ANY, u"執行", wx.DefaultPosition, wx.DefaultSize, 0 )
gSizer2.Add( self.m_button4, 0, wx.ALL, 5 )
self.m_button2 = wx.Button( self, wx.ID_ANY, u"建立", wx.DefaultPosition, wx.DefaultSize, 0 )
gSizer2.Add( self.m_button2, 0, wx.ALL, 5 )
self.m_button3 = wx.Button( self, wx.ID_ANY, u"定製", wx.DefaultPosition, wx.DefaultSize, 0 )
gSizer2.Add( self.m_button3, 0, wx.ALL, 5 )
self.m_textCtrl14.SetEditable(False)
self.m_textCtrl15.SetEditable(False)
self.m_textCtrl16.SetEditable(False)
self.SetSizer( gSizer2 )
self.Layout()
self.Centre( wx.BOTH )
def __del__( self ):
pass
app=wx.App()
frame=MyFrame()
frame.Show()
app.MainLoop()
執行結果:
相關文章
- 搬運:python基於pywinauto實現PC端自動化 python操作微信自動化Python
- 軟體測試:自動化測試
- 軟體測試自動化
- 能否使用B/S結構實現所有C/S結構軟體的功能
- 軟體測試自動化框架框架
- 軟體測試框架——自動化測試框架框架
- 我的自動化軟體測試小結(2)
- 軟體測試理論(2)自動化測試
- 通用自動化測試軟體 — TAE
- 軟體自動化測試與AI結合 - modernanalystAINaN
- 用python實現selenium 自動化測試Python
- Python實現自動化測試入門指南Python
- 軟體自動測試架構設計架構
- 《軟體自動化測試成功之道》節選8 - 與每日構建結合
- Eggplant—HMI 自動化測試軟體
- 用C# 實現C/S模式下軟體自動線上升級C#模式
- 自動化測試實踐總結
- 軟體自動化測試有什麼優勢?自動化測試框架有哪些?框架
- Python自動化測試怎麼學?軟體測試進階Python自動化,收藏這篇文章就夠了Python
- Airtest結合tidevice實現IOS自動化測試AIIDEdeviOS
- 如何實現高度自動化測試?
- Postman實現UI自動化測試PostmanUI
- 自動化測試是什麼?什麼軟體專案適合自動化測試?
- API自動化測試平臺,高效實現對API的自動化測試API
- 軟體測試自動化的最新趨勢
- 《軟體自動化測試成功之道》目錄
- 軟體開發中的自動化測試
- 軟體測試為什麼需要自動化測試框架?權威軟體測試公司分享框架
- python自動化測試Python
- Python實現效能自動化測試竟然如此簡單Python
- 談軟體自動化測試工具的評測方法
- 自動化測試與軟體測試有什麼區別?Python入門教程Python
- 《軟體自動化測試成功之道》節選1 - 選擇合適的專案實施自動化測試
- 《軟體自動化測試成功之道》節選12 - 自動化測試指令碼的維護指令碼
- 軟體測試案例實踐:銀行如何做大規模自動化測試?
- 使用 Postman 實現 API 自動化測試PostmanAPI
- postman實現介面的自動化測試Postman
- 試著使用 jmeter 實現介面自動化測試JMeter