Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UIAutomation AutomationElement强制刷新。当前和所有子体_C#_.net_Ui Automation_Ui Spy_Automationelement - Fatal编程技术网

C# UIAutomation AutomationElement强制刷新。当前和所有子体

C# UIAutomation AutomationElement强制刷新。当前和所有子体,c#,.net,ui-automation,ui-spy,automationelement,C#,.net,Ui Automation,Ui Spy,Automationelement,我想刷新顶级automationelement对象(桌面元素)及其所有子体的树结构 我遇到的问题是我正在测试的一个特定程序以一种奇怪的方式丢弃并重建了它的GDI对象,我知道我的自动化的某些部分会导致它重建它的树结构。我没有显式地使用.cache,而是使用.current来访问自动化元素的值。 我可以在uispy中模拟GDI结构的变化,即使我在uispy中点击“刷新”,也不足以获取新对象,但关闭并再次启动uispy可以解决这一问题。我想在我的程序中模拟关闭并重新打开uispy的行为,以强制重建需要

我想刷新顶级automationelement对象(桌面元素)及其所有子体的树结构

我遇到的问题是我正在测试的一个特定程序以一种奇怪的方式丢弃并重建了它的GDI对象,我知道我的自动化的某些部分会导致它重建它的树结构。我没有显式地使用.cache,而是使用.current来访问自动化元素的值。 我可以在uispy中模拟GDI结构的变化,即使我在uispy中点击“刷新”,也不足以获取新对象,但关闭并再次启动uispy可以解决这一问题。我想在我的程序中模拟关闭并重新打开uispy的行为,以强制重建需要重建的任何数据结构

目前,我使用的自动元素不再引用它们的“新”子元素,或者使用0,0,0,0作为它们的边框


另外,是否有人能准确地告诉我uispy“refresh”命令以编程方式执行的操作?

作为后续操作,inspect.exe具有类似的行为,但不需要关闭/重新打开以获取UI更改。“刷新”(ctrl+shift+5或操作->刷新)不会修复具有无效边界矩形的子项。但是,折叠父节点并再次展开它将列出具有有效边界矩形的“正确”子节点,还可以使用导航->第一个子节点|下一个同级节点从上一个节点遍历树。如何以编程方式获取更高级别的automationelement并获取其findall()函数以返回“有效”子级?UIAutomation的。当前属性不会缓存,它总是在您请求的时间点获取,因此刷新它的概念没有意义:它总是“新鲜的”。但是,您可能在UISpy中遇到了一个bug,它正在自己进行缓存。您是在代码中看到了相同的问题,还是仅在UISpy中看到了相同的问题?如果所发生的是应用程序正在丢弃它的旧子元素并创建新的子元素,那么在代码中,您需要从头开始重新获取这些元素;对旧元素的引用将无效。UISpy的“刷新”命令在UIAutomation API级别不执行任何操作;尝试缓存该树,以便它可以最小化它获取的内容。”“刷新”会导致它丢弃自己的缓存数据。我想发生的是,我对“旧”对象的引用不再是父窗口(及其树结构)的后代。我希望能够转到窗口(或桌面)AutoElement并获取作为子体的“新”/“有效”对象,但我似乎无法获取它们。同一个查询最初可以工作,但是当整个窗口的结构发生变化时,新的查询失败了,剩下一些旧的AutoElements和无用的.current值。我用uispy解决这个问题的一种方法是关闭并再次打开它,inspect.exe刷新不起作用,但折叠和扩展窗口的树会起作用。如果您只引用了旧元素(对应于不再存在的UI),则需要将它们丢弃,然后从桌面向下重新开始。(您可能可以在其他父窗口而不是桌面上重新启动,前提是该窗口尚未重新创建。)元素的UI消失后,您将无法从该元素向任何方向导航,甚至无法导航到父窗口。看起来inspect正在这样做,但这只是它如何构建和显示其树的一个副作用,它实际上是在缓存父节点,而不是向上导航到它们。作为后续操作,inspect.exe具有类似的行为,但不需要关闭/重新打开以获取UI更改。“刷新”(ctrl+shift+5或操作->刷新)不会修复具有无效边界矩形的子项。但是,折叠父节点并再次展开它将列出具有有效边界矩形的“正确”子节点,还可以使用导航->第一个子节点|下一个同级节点从上一个节点遍历树。如何以编程方式获取更高级别的automationelement并获取其findall()函数以返回“有效”子级?UIAutomation的。当前属性不会缓存,它总是在您请求的时间点获取,因此刷新它的概念没有意义:它总是“新鲜的”。但是,您可能在UISpy中遇到了一个bug,它正在自己进行缓存。您是在代码中看到了相同的问题,还是仅在UISpy中看到了相同的问题?如果所发生的是应用程序正在丢弃它的旧子元素并创建新的子元素,那么在代码中,您需要从头开始重新获取这些元素;对旧元素的引用将无效。UISpy的“刷新”命令在UIAutomation API级别不执行任何操作;尝试缓存该树,以便它可以最小化它获取的内容。”“刷新”会导致它丢弃自己的缓存数据。我想发生的是,我对“旧”对象的引用不再是父窗口(及其树结构)的后代。我希望能够转到窗口(或桌面)AutoElement并获取作为子体的“新”/“有效”对象,但我似乎无法获取它们。同一个查询最初可以工作,但是当整个窗口的结构发生变化时,新的查询失败了,剩下一些旧的AutoElements和无用的.current值。我用uispy解决这个问题的一种方法是关闭并再次打开它,inspect.exe刷新不起作用,但折叠和扩展窗口的树会起作用。如果您只引用了旧元素(对应于不再存在的UI),则需要将它们丢弃,然后从桌面向下重新开始。(您可能可以在其他父窗口而不是桌面上重新启动,前提是该窗口尚未重新创建。)元素的UI消失后,您将无法从该元素向任何方向导航,甚至无法导航到父窗口。看起来inspect正在这样做,但这只是它如何构建和显示其树的副作用,它实际上是ca