2015-08-07 5 views
0

Я создаю Microsoft SQL Server Management StudioИнструмент автоматизации с использованием python. Проблема в том, что я не могу выбрать базу данных Child_tree (Northwind). Выбирает Parent_tree (Базы данных). Мне нужно сделать гораздо больше, щелкнув правой кнопкой мыши параметр child_tree (Northwind) (Ex. Tasks-> backup). Помогите мне сделать лучший код автоматизации. Спасибо заранее. Автоматизация Microsoft SQL Server 2008 R2 с использованием Python (pywinauto)

 

import pywinauto 
import socket 
import binascii 
host = socket.gethostname() #Getting system host name 
n2 = int('0b111000001100001011100110111001101110111011011110111001001100100', 2) #password 
n1 = int('0b111010101110011011001010111001001101110011000010110110101100101', 2) # username 
n = int('0b1110011011001010111001001110110011001010111001001101110011000010110110101100101', 2) #servername av 
if (host == "systemhostXXX" or host == "systemhostyyy"): # checking the host name 
    try: 
     pwa_app = pywinauto.application.Application() 
     path = pwa_app.start_(r"C:/Program Files (x86)/Microsoft SQL Server/100/Tools/Binn/VSShell/Common7/IDE/Ssms.exe") #Opening the .exe file
print("Status: Application Launched successfully!!") except: print("Error: Applicatin Launching Error!!") try:

pwa_app.ConnecttoServer.ComboBox1.Select("Database Engine") #Selecting the combobox value pwa_app.ConnecttoServer.edit1.SetText(binascii.unhexlify('%x' % n)) pwa_app.ConnecttoServer.ComboBox3.Select("SQL Server Authentication") pwa_app.ConnecttoServer.edit2.SetText(binascii.unhexlify('%x' % n1)) # convert binary into string pwa_app.ConnecttoServer.edit3.SetText(binascii.unhexlify('%x' % n2)) print("Status: Log-in Process!!") pwa_app.ConnecttoServer.Connect.Click() except: print("Error: Log-In Failed!!Please Relaunch!") try: pwa_app.ConnecttoServer.Ok.Click() #Button click (OK) pwa_app.ConnecttoServer.Cancel.Click() print("Error: Restoration going-on!!") except: print("Status: Log-in Success!!") try: w_handle = pywinauto.findwindows.find_windows(title=u'Microsoft SQL Server Management Studio', class_name='wndclass_desked_gsk')[0] window = pwa_app.window_(handle=w_handle) ctrl = window['TreeView'] ctrl.GetItem([u'SQL Server 8.0.2039']).Click() ctrl.GetItem([u'SQL Server 8.0.2039', u'Databases', u'Northwind']).Click() #Selecting the database except: print("Database selection failed !!")

еще: печати «Уважаемый» ведущий «Вы не авторизованы для запуска этой программы \ п»

+0

Неясно, где ваш скрипт терпит неудачу. Пожалуйста, отметьте конкретную строку, которая не работает или какая функциональность вам нужна после некоторой строки. –

+0

Спасибо за ваш комментарий Василий Рябов "ctrl.GetItem ([u'SQL Server 8.0.2039 ', u'Databases', u'Northwind ']). Нажмите() #Выберите базу данных" - В этой строке Northwind не вместо этого выбирается только код базы данных. Также мне нужен (код) для дальнейшей работы по восстановлению (автоматический щелчок). –

+0

Хорошо, можете ли вы удалить обработчик try-except и предоставить выход Exception? Пожалуйста, отредактируйте свой вопрос. –

ответ

0

Как я мог понять, в комментариях, вы должны ждать, пока главное окно не открыт после входа в систему.

window = pwa_app.Window_(title=u'Microsoft SQL Server Management Studio', class_name='wndclass_desked_gsk') 
window.Wait('ready', timeout=20) # default timeout is 5 sec. if any 
ctrl = window['TreeView'] 
ctrl.GetItem([u'SQL Server 8.0.2039']).Click() 
ctrl.GetItem([u'SQL Server 8.0.2039', u'Databases', u'Northwind']).Click() #Selecting the database 

Пожалуйста, проверьте, как это работает.

EDIT:

кажется вы сгенерировали код для 'Microsoft SQL Server Management Studio' окна с помощью SWAPY. Это означает, что окно уже открыто.

Но в автоматическом рабочем процессе Log-in довольно длительная операция (может случиться, до 10 секунд, я считаю). Поэтому, когда вы нажали кнопку «Подключиться», 'Microsoft SQL Server Management Studio' еще не открыт. Вы можете увидеть окно прогресса или даже ничего в течение нескольких секунд.

Функция find_windows не ждет, пока на экране появится окно. В тот момент он просто находит окно. Поэтому при выполнении строки

window = pwa_app.Window_(title=u'Microsoft SQL Server Management Studio', class_name='wndclass_desked_gsk') 

WindowSpecification создаются объекта (window переменных). ctrl = window['TreeView'] - также объект WindowSpecification. Это просто описания и не связаны с реальным окном/управлением. Но следующее утверждение

ctrl.GetItem([u'SQL Server 8.0.2039']).Click() 

эквивалентно

ctrl.WrapperObject().GetItem([u'SQL Server 8.0.2039']).Click() 

или

ctrl.Wait('visible').GetItem([u'SQL Server 8.0.2039']).Click() 

pywinauto скрывающих WrapperObject() вызова, используя силу Python. Так что это называется автоматически. В этом случае время ожидания по умолчанию составляет 5 секунд. Это может быть недостаточно для длительных операций, таких как вход в систему. Поэтому я предлагаю явно позвонить Wait('ready', timeout=20). 'ready' означает 'exists visible enabled' с использованием логического AND.

Смежные вопросы