微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PowerShell UI 自动化库 - 如何设置超时

如何解决PowerShell UI 自动化库 - 如何设置超时

我正在 PowerShell 中进行前端自动化。 首先,我使用了 UI 自动化 PowerShell 扩展 (this one)

它看起来很旧而且有点慢,所以相反,我开始研究 Microsoft 的 UI 自动化库(它是 system.windows.automation 库)。

这个看起来要快得多,所以我想我会用我需要的函数构建自己的库,但老实说,这方面的文档很少,特别是如果你想使用 PowerShell 来处理它。

>

我可以搜索一个元素,我可以点击、编辑等等......但是有一个我似乎无法越过的障碍,那就是如何设置超时值。

考虑这段代码,我试图在其中找到计算器窗口:

add-type -AssemblyName UIAutomationClient 
add-type -AssemblyName UIAutomationTypes 
add-type -AssemblyName UIAutomationProvider 
add-type -AssemblyName UIAutomationClientsideProviders 

start-process calc
Start-Sleep -Seconds 2
$controltype = [System.Windows.Automation.ControlType]::Window
$controltypeProperty = [System.Windows.Automation.AutomationElement]::ControlTypeProperty
$name = "Calculator"
$nameProperty = [System.Windows.Automation.AutomationElement]::NameProperty

$controltypeCondition = new-object System.Windows.Automation.PropertyCondition $controltypeProperty,$controltype 
$nameCondition = new-object System.Windows.Automation.PropertyCondition  $nameProperty,$name

$mergeConditions  = new-object System.Windows.Automation.AndCondition $controltypeCondition,$nameCondition
$descendants = [System.Windows.Automation.TreeScope]::Descendants
$result= [System.Windows.Automation.AutomationElement]::RootElement.FindFirst($descendants,$andCondition)

$result.current.Name

这段代码效果很好,它可以快速找到计算器窗口。但是,如果计算器窗口不存在,最后一部分 (RootElement.FindFirst) 会运行一分钟然后超时。

我已经搜索了整个内容,但找不到可以为搜索设置超时期限的参数或设置。

在 Internet 上,我发现 System.Windows.Automation.Automation一个参数 TransactionTimeout,但我尝试查看,但它不存在。

我什至想将它作为一项工作运行并尽快终止它,但如果我想设置超过 60 秒的超时时间,这将无法解决问题。此外,它有点笨重。

我知道还有其他更好的 UI 自动化工具,但这基本上可以在 PowerShell 中本地运行,而无需安装任何我喜欢的模块。

谁能指出我正确的方向?我的想法很新鲜。

谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。