【问题标题】:Pywinauto - taking 10 seconds to perform an operationPywinauto - 执行操作需要 10 秒
【发布时间】:2018-03-08 03:56:19
【问题描述】:

我正在使用 pywinauto 尝试自动化 Windows 应用程序,我注意到每个操作大约需要 10 秒才能执行。它可以工作,但速度很慢,鉴于这是我第一次使用 pywinauto,我可能做错了什么。

任何帮助将不胜感激 版本 0.6.4

self.main_wnd_spec.wait(wait_for='ready', timeout=50)
create = self.main_wnd_spec.child_window(title='Create', control_type="Window")

import time
start_time = time.time()
    type_= ComboBoxWrapper(create.child_window(
        title="Type:", auto_id="27651", control_type="ComboBox")
    )
    type_.select(1)
    print("--- %s seconds ---" % (time.time() - start_time))

start_time = time.time()
    severity= EditWrapper(create.child_window(title="Severity:", auto_id="27653", control_type="Edit"))
    severity.SetEditText('1')
    print("--- %s seconds ---" % (time.time() - start_time))

输出

--- 10.8264000415802 seconds ---
--- 10.514400005340576 seconds ---

控制标识符

 Dialog - 'Create'    (L604, T269, R1317, B772)
 ['Dialog', 'Create', 'Create Dialog']
 child_window(title="Create", control_type="Window")
  | 
  | ComboBox - 'Type:'    (L740, T334, R1165, B355)
  | ['Type:2', 'ComboBox', 'Batch class:ComboBox', 'ComboBox0', 'ComboBox1']
  | child_window(title="Type:", auto_id="27651", control_type="ComboBox")
  |    | 
  |    | Static - 'Type:'    (L3, T3, R405, B18)
  |    | ['Type:3', 'Static2', 'Batch class:Static2']
  |    | child_window(title="Type:", control_type="Text")
  |    | 
  |    | Button - 'Open'    (L1149, T335, R1164, B354)
  |    | ['Button', 'Open', 'OpenButton', 'Button0', 'Button1', 'Open0', 
         'Open1', 'OpenButton0', 'OpenButton1']
  |    | child_window(title="Open", auto_id="DropDown", control_type="Button")
  | 
  | Edit - 'Severity:'    (L1247, T334, R1278, B354)
  | ['Edit', '', 'Severity:Edit', 'Edit0', 'Edit1', '0', '1']
  | child_window(title="Severity:", auto_id="27653", control_type="Edit")

【问题讨论】:

  • 我建议在第二行分配“create”变量时添加 control_type。
  • 第一行的超时使用不正确,但它对这 10 秒没有贡献。只需检查 Slow() 返回什么(我相信没有)。
  • Timings.Slow() 只是改变全局时间,但它不应该返回任何东西。
  • create 可以指定为depth=2(仅限直系子代)或更深,但不包括整个后代列表到搜索中(默认为None)。
  • 有趣,我的应用程序中有 8718 个后代的原因是因为列表控件类型有很多记录,当我将控件限制为只显示很少的记录时,操作时间下降到只是1秒。谢谢你,瓦西里。您能帮我理解在查找窗口或控件类型时如何指定深度吗

标签: pywinauto


【解决方案1】:

我已经弄清楚搜索时间超过 10 秒的原因。我正在为那些不想通过 cmets 寻找答案的人回答我自己的问题。

根据 Vasily Ryabov 的评论,当你创建一个包装对象时,搜索从根开始,在我的例子中,根有超过 8500 个后代,当我设法通过应用程序减少后代的数量时,搜索时间下降到

--- 1.2239999771118164 seconds ---
--- 0.9530003070831299 seconds ---

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 2011-03-29
    相关资源
    最近更新 更多