一:問題描述
問題一:通過查找pywinauto在線文檔,其中沒有講解到gridwindow控件的方法,我不知道這個控件是不是標准控件,還是pywinauto根本就沒適配這個控件。從網上查詢了好多資料,這類資料是相當的少啊。有一個項目要對這個控件進行操作,要統計這個控件的個數,還要進行控件的右鍵保存功能。
問題二:這類控件由於沒有相關的API方法,無法獲取這個gridwindow控件的行信息,列信息及表頭信息。
二:解決方案
問題一:通過不斷的嘗試新方法,雖然這個控件沒有API方法,但是這個控件可以通過print_control_identifers()方法打印出來這個控件的屏幕坐標信息,通過從控制台獲取打印的信息,並進行處理得到該控件的坐標信息,通過坐標值可以用相對坐標來操作此類控件,具體實現可以看下面的代碼:
#獲取控制台打印的東西
class TextArea(object):
def __init__(self):
self.buffer = []
def write(self, *args, **kwargs):
self.buffer.append(args)
#連接工具
app = application.Application()
app.connect_(path = '工具路徑')
time.sleep(2)
app = app.top_window_()
time.sleep(2)
stdout = sys.stdout
sys.stdout = TextArea() #申請的空間
app.print_control_identifiers() #打印控件信息
text_area, sys.stdout = sys.stdout, stdout #獲取控件信息
print text_area.buffer
gridlist = []
for tup in text_area.buffer:
i = tup[0].find('要查找的控件')
if i > -1:
locate = [] #用於存控件的坐標
grid = tup[0][tup[0].find('(')+1:tup[0].find(')')].split(',')
for gridi in grid:
gridj = gridi.strip()
gridk = int(gridj[1:])
locate.append(gridk)
gridlist.append(locate)
問題二:這個問題困擾了好久,從網上查了好多資料,還是沒能解決這個問題。
