Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • May 24 18:06
    codecov[bot] commented #1210
  • May 24 18:05
    codecov[bot] commented #1210
  • May 24 18:05
    eltimen synchronize #1210
  • May 24 13:33
    EOKruglov review_requested #1203
  • May 24 02:14
    codecov[bot] commented #1215
  • May 24 02:04
    codecov[bot] commented #1215
  • May 24 01:43
    codecov[bot] commented #1215
  • May 24 01:42
    codecov[bot] commented #1215
  • May 24 01:40
    codecov[bot] commented #1215
  • May 24 01:35
    codecov[bot] commented #1215
  • May 24 01:34
    codecov[bot] commented #1215
  • May 24 01:32
    codecov[bot] commented #1215
  • May 23 23:41
    RadaevValentin review_requested #1215
  • May 23 23:41
    RadaevValentin opened #1215
  • May 23 23:06
    codecov[bot] commented #1203
  • May 23 22:56
    codecov[bot] commented #1203
  • May 23 22:36
    codecov[bot] commented #1203
  • May 23 22:35
    codecov[bot] commented #1203
  • May 23 22:32
    codecov[bot] commented #1203
  • May 23 22:28
    codecov[bot] commented #1203
Sripad Sahu
@sripad96_gitlab
I am currently facing problem in getting the top active window. My problem statement is to deal with the following situation: if i click a button and nothing happens i.e no window or dialog box is generated, then who to continue the flow so that it doesnt breaks the entire script.
Vasily Ryabov
@vasily-v-ryabov
You can check that some window didn’t open by app.MainWindowTitle.SubwindowTitle.wait_not(“exists”, timeout=10) during 10 seconds. Or use method .exists(timeout=10) which returns True/False instead of raising exception.
.child_window() creates window specification (to find automatically or to apply .wait()/.wait_not()), it doesn’t list all children. Method .children() or .descendants() is what you need to list child controls.
You can find section “Waiting for long operations” in the docs after reading the Getting Started Guide.
amursa
@amursa

Здравствуйте, в UIA прошелся инспектором по меню. отрыть 2го уровня меню удалось, но никак не может нажать на кнопку. Использовал, click, invoke, select , - падает просто указывая на строку вызова. app.UntitledNotepad.menu_select("File -> Exit") - работает, в другом приложении не работает - main_window.MenuSelect('Setup->Securities & Parties->Securities').click() - не работает. Cмог открыть меню, не не позволяет нажать на поледий отрытый елемент:
main_window.window(control_type="MenuBar", title="CrdMenuStrip").child_window(control_type="MenuItem", title="Setup").select()
main_window.window(control_type="MenuBar", title="CrdMenuStrip").child_window(control_type="MenuItem", title="Setup").\
child_window(control_type="MenuItem", title="Securities & Parties").select()
main_window.window(control_type="MenuBar", title="CrdMenuStrip").child_window(control_type="MenuItem", title="Setup"). \
child_window(control_type="MenuItem", title="Securities & Parties").child_window(control_type="MenuItem", title="Securities").click()

вегда вылетает ошибка:
def init(self, errors='strict'):
IncrementalDecoder.init(self, errors)

    # undecoded input that is kept between calls to decode()
    self.buffer = b""
amursa
@amursa
All i did id is to change main_window.MenuSelect('Setup->Securities & Parties->Securities').click() to this main_window.menu_select('Setup->Securities & Parties->Securities') and it worked.
Roman Isakov
@Xcqcr_gitlab

Здравствуйте, Василий.

Кажется, что print_control_identifiers() обходит далеко не все объекты, если backend='uia'

Например, Inspect.exe в режиме UI Automation находит гораздо больше "детей", когда print_control_identifiers() от основного окна находит только "родителя".

python:
[IN]
import pywinauto

a = pywinauto.application.Application(backend='uia')
a.connect(process=3936)
p = a.window()
p.print_control_identifiers()

[OUT]
Control Identifiers:

Dialog - '1С:Предприятие - ERP' (L551, T144, R1460, B764)
['1С:Предприятие - ERPDialog', 'Dialog', '1С:Предприятие - ERP']
child_window(title="1С:Предприятие - ERP", control_type="Window")

Хотя Inspect.exe от MS SDK показывает, что элементов целая уйма. Кнопок, тулбаров и пр
Roman Isakov
@Xcqcr_gitlab

Да, могу сказать, что print_control_identifiers() возвращает аналогичное количество значений, что и Inspect, если backend=win32

Но использовать backend=win32 вообще не мой вариант, ибо там нужно вручную каждый элемент искать (имена кривые, никак не ассоциировать)

1
Roman Isakov
@Xcqcr_gitlab
А, да, еще есть маленькое добавление - py_inspect, который Вы написали, отлично строит дерево. У меня есть подозрение, что print_control_identifiers(), которая относится к Application не эквивалентна перебору def __get_next(self, element_info, parent) в py_inspect.
Vasily Ryabov
@vasily-v-ryabov
Добрый день. Возможно, это известная проблема с неправильным пробросов флага visible_only=True, который глотает hidden элемент вместе с поддеревом, хотя в поддереве есть visible контролы. Вот ссылка на issue: pywinauto/pywinauto#596
К сожалению, в dump_tree / print_control_identifiers это не обойдёшь без фикса. А вот в .child_window() можно явно прописать visible_only=False. Несколько неудобно, но пока так.
Vasily Ryabov
@vasily-v-ryabov
Попробуем посмотреть и впихнуть в надвигающийся апдейт релиз 0.6.6.
_fantasticDev_
@SnakeGeneral
hello everyone~
app = Application(backend='uia')
app.start(r'../hello.net.exe')
in this case, i want to get the coordinate of the window.
please help me~~~
Vasily Ryabov
@vasily-v-ryabov
app.window(title=“Window Title”).rectangle() ?
_fantasticDev_
@SnakeGeneral
thank you sir
but i can't know the title
do you know Battle.net.exe?
@vasily-v-ryabov
shall i send you the source URL?
_fantasticDev_
@SnakeGeneral
@vasily-v-ryabov
hello sir

app = Application(backend='uia')
app.start(r'../Battle.net.exe')

time.sleep(1)
rect = app.window(title='Blizzard Battle.net Login').rectangle()

i receive a error message like this:::

C:\Users\Administrator\AppData\Local\Programs\Python\Python37\python.exe "C:/Program Files (x86)/Battle.net/Bot/AutoController.py"
Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\pywinauto\application.py", line 256, in __resolve_control
criteria)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\pywinauto\timings.py", line 458, in wait_until_passes
raise err
pywinauto.timings.TimeoutError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:/Program Files (x86)/Battle.net/Bot/AutoController.py", line 20, in <module>
a = app.window(title='Blizzard Battle.net Login').rectangle()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\pywinauto\application.py", line 378, in getattribute
ctrls = self.resolve_control(self.criteria)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\pywinauto\application.py", line 259, in
resolve_control
raise e.original_exception
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\pywinauto\timings.py", line 436, in wait_until_passes
func_val = func(args, *kwargs)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\pywinauto\application.py", line 201, in __get_ctrl
dialog = self.backend.generic_wrapper_class(findwindows.find_element(
criteria[0]))
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\pywinauto\findwindows.py", line 87, in find_element
raise ElementNotFoundError(kwargs)
pywinauto.findwindows.ElementNotFoundError: {'title': 'Blizzard Battle.net Login', 'backend': 'uia', 'process': 29520}

Process finished with exit code 1

Vasily Ryabov
@vasily-v-ryabov
@SnakeGeneral let’s start from app.windows() then. Try method .window_text() for every wrapper object returned in a list of app.windows().
_fantasticDev_
@SnakeGeneral
yes
thank you sir
Vasily Ryabov
@vasily-v-ryabov
Login window might be a child of another top level window. It’s typical situation for “uia” backend.
_fantasticDev_
@SnakeGeneral
yes
much thanks.
prolorenzo
@suicide1111

Hello, I have error, can U help me?

def tab1_check(self):
app3 = Application()
app3.start(tab1_path_to_sitelink)
global tab1_connect
tab1_connect = app3.process
print(tab1_connect)
self.tab1_sod()

def tab1_sod(self):
try:
app2 = Application(backend="uia").connect(process=f'{tab1_connect}', visible_only=False)

    s_o_d = app2.window(process=f'{tab1_connect}')

raise ProcessNotFoundError('Process with PID={} not found!'.format(self.process))

pywinauto.application.ProcessNotFoundError: Process with PID=16508 not found!

Vasily Ryabov
@vasily-v-ryabov
process param is an integer PID (process id). Why using f-string? :) Also it’s possible that you face the launcher process that spawns a child one. Use connect by title with optional timeout to connect to proper process. We have feature request to implement auto detection of child processes, but it’s not expected soon.
Mohamed Hamdy
@draconlord
hello all can anyone advice the best setup approach for the pywinauto over win10 64 bit ?
tried python 3.8.1, 3.6 and no luck i always get AttributeError: module 'pywinauto' has no attribute 'application'
using pycharm and the python console works ok when i state from pywinauto import Application
Vasily Ryabov
@vasily-v-ryabov
Hi @draconlord do you mean Python 3.7.6? Both these Python versions have wrong fix for “passing union by value”. The wrong fix is already reverted in Python. Wait for Python 3.8.2 or use 3.8.0 or 3.7.5.
Mohamed Hamdy
@draconlord
@vasily-v-ryabov thank buddy i got it working now
i have a question the app im trying to automate uses check box list not detected by any GUI inspection tool, i know this is app related but i thought you guys could help its a C++ app and i even cant get this dialog using resource hacker either its identified as "pane" class = GLISTCLASS
Vasily Ryabov
@vasily-v-ryabov
@draconlord is it GTK+ app? Everything is bad with GTK on Windows. Really the worst case.
Linux is much much better working with GTK from accessibility point of view.
Vasily Ryabov
@vasily-v-ryabov
@aswathy53408765_twitter let's continue in this room in English.
Mohamed Hamdy
@draconlord
@vasily-v-ryabov it's windows based and all I can get from sniffers scans that it's a VC++ mfc app and not readable by any automation app i.e: ranorex just an element and a scroll bar
Vasily Ryabov
@vasily-v-ryabov
@draconlord I’m in doubt if this is really MFC app. All MFC apps are perfect for automation. Maybe only top level window is an MFC container that contains GTK+ components as children. Can you provide a few screenshots from Inspect.exe in UI Automation mode? For the list and for the main window?
I’ve googled what is GLISTCLASS and it’s GTK. Maybe main window is an MFC container that owns child GTK controls. A few screenshots from Inspect.exe would be helpful.
Mohamed Hamdy
@draconlord
@vasily-v-ryabov here's what inspect shows:
How found: Mouse move (1033,446)
hwnd=0x000709D6 32bit class="GLISTCLASS" style=0x50A00000 ex=0x200
RuntimeId: "[42.461270]"
BoundingRectangle: {l:866 t:369 r:1130 b:549}
ProcessId: 13220
ControlType: UIA_PaneControlTypeId (0xC371)
LocalizedControlType: "pane"
Name: ""
AccessKey: ""
HasKeyboardFocus: false
IsKeyboardFocusable: true
IsEnabled: true
AutomationId: "1"
ClassName: "GLISTCLASS"
HelpText: ""
IsPassword: false
NativeWindowHandle: 0x709D6
IsOffscreen: false
FrameworkId: "Win32"
ProviderDescription: "[pid:7084,providerId:0x709D6 Main:Nested [pid:13220,providerId:0x709D6 Annotation(parent link):Microsoft: Annotation Proxy (unmanaged:uiautomationcore.dll); Main:Microsoft: MSAA Proxy (unmanaged:uiautomationcore.dll)]; Nonclient:Microsoft: Non-Client Proxy (unmanaged:uiautomationcore.dll); Hwnd(parent link):Microsoft: HWND Proxy (unmanaged:uiautomationcore.dll)]"
Scroll.HorizontalScrollPercent: 0.000000
Scroll.HorizontalViewSize: 100.000000
Scroll.VerticalScrollPercent: 0.000000
Scroll.VerticalViewSize: 1.898734
Scroll.HorizontallyScrollable: false
Scroll.VerticallyScrollable: true
IsDockPatternAvailable: false
IsExpandCollapsePatternAvailable: false
IsGridItemPatternAvailable: false
IsGridPatternAvailable: false
IsInvokePatternAvailable: false
IsMultipleViewPatternAvailable: false
IsRangeValuePatternAvailable: false
IsScrollPatternAvailable: true
IsScrollItemPatternAvailable: false
IsSelectionItemPatternAvailable: false
IsSelectionPatternAvailable: false
IsTablePatternAvailable: false
IsTableItemPatternAvailable: false
IsTextPatternAvailable: false
IsTogglePatternAvailable: false
IsTransformPatternAvailable: false
IsValuePatternAvailable: false
IsWindowPatternAvailable: false
IsItemContainerPatternAvailable: false
IsVirtualizedItemPatternAvailable: false
FirstChild: "Vertical" scroll bar
LastChild: "Vertical" scroll bar
Next: (null) title bar
Previous: "" dialogue
Other Props: Object has no additional properties
Children: "Vertical" scroll bar
Ancestors: "Derivatives" window
"View Selection for [Desktop\test.lay]" dialogue
"LayMan - [Desktop\test.lay] " window
"Desktop 1" pane
[ No Parent ]