使用任务计划程序并且用户已注销时如何找到 AutomationElement?
How do I find an AutomationElement when using task scheduler and user is logged off?
我有一个应用程序设置为 运行 在用户注销的一天中的特定时间。它结合了 Selenium 和 C# 中的 UI Automation 每天下载一个文件。当 运行 登录时,一切正常。但是,当我 运行 应用程序通过任务调度程序尝试查找 AutomationElement 时失败。
我从以下 PropertyConditions 开始:
PropertyCondition browserProp=new PropertyCondition(AutomationElement.NameProperty,"Website 1- Mozilla Firefox",PropertyConditionFlags.IgnoreCase);
PropertyCondition saveDiagProp= new PropertyCondition(AutomationElement.NameProperty,"Opening File.xls",PropertyConditionFlags.IgnoreCase);
PropertyCondition saveRadioBut = new PropertyCondition(AutomationElement.NameProperty, "Save File", PropertyConditionFlags.IgnoreCase);
PropertyCondition okBut= new PropertyCondition(AutomationElement.NameProperty, "OK", PropertyConditionFlags.IgnoreCase);
最初,我试图通过
找到 "Desktop" 根元素
AutomationElement aeDesktop =AutomationElement.RootElement;
但是,我的研究让我相信,当应用程序以这种方式 运行 时,实际上并没有创建桌面。我还仔细检查了注册表中的 NoInteractiveServices 是否设置为 false,然后通过 Selenium 截取屏幕截图以确保 Web 自动化正常工作 - 它是。
我仔细检查了 RootElement,通过以下代码将所有 RootElement TreeScope.Children 写入日志文件
AutomationElementCollection desktopChildren = aeDesktop.FindAll( TreeScope.Children, Condition.TrueCondition);
foreach(AutomationElement ae in desktopChildren)
{
System.IO.File.AppendAllText(downloadLocation + "errorlog.txt", "RootChild [" +x+"] "+ ae.Current.Name + Environment.NewLine);
x++;
}
什么也没有出现。
然后我尝试从进程句柄中查找 AutomationElement。
var process = Process.GetProcessesByName("firefox").First();
AutomationElement aeDesktop = AutomationElement.FromHandle(process.Handle);
再一次,什么都没有。
我一直在尝试为 "hook on to" 寻找某种 AutomationElement,这样我就可以开始搜索该保存对话框了。很想知道大家的想法、任何建议、提示或 "HEY BUDDY - YOU ARE DOING IT WRONG!" 提前致谢!
所以这不是一个完整的答案,而是针对我的具体情况的答案,而不是我在上面提出的一般性问题。
Access to file download dialog in Firefox
我有一个应用程序设置为 运行 在用户注销的一天中的特定时间。它结合了 Selenium 和 C# 中的 UI Automation 每天下载一个文件。当 运行 登录时,一切正常。但是,当我 运行 应用程序通过任务调度程序尝试查找 AutomationElement 时失败。
我从以下 PropertyConditions 开始:
PropertyCondition browserProp=new PropertyCondition(AutomationElement.NameProperty,"Website 1- Mozilla Firefox",PropertyConditionFlags.IgnoreCase);
PropertyCondition saveDiagProp= new PropertyCondition(AutomationElement.NameProperty,"Opening File.xls",PropertyConditionFlags.IgnoreCase);
PropertyCondition saveRadioBut = new PropertyCondition(AutomationElement.NameProperty, "Save File", PropertyConditionFlags.IgnoreCase);
PropertyCondition okBut= new PropertyCondition(AutomationElement.NameProperty, "OK", PropertyConditionFlags.IgnoreCase);
最初,我试图通过
找到 "Desktop" 根元素 AutomationElement aeDesktop =AutomationElement.RootElement;
但是,我的研究让我相信,当应用程序以这种方式 运行 时,实际上并没有创建桌面。我还仔细检查了注册表中的 NoInteractiveServices 是否设置为 false,然后通过 Selenium 截取屏幕截图以确保 Web 自动化正常工作 - 它是。
我仔细检查了 RootElement,通过以下代码将所有 RootElement TreeScope.Children 写入日志文件
AutomationElementCollection desktopChildren = aeDesktop.FindAll( TreeScope.Children, Condition.TrueCondition);
foreach(AutomationElement ae in desktopChildren)
{
System.IO.File.AppendAllText(downloadLocation + "errorlog.txt", "RootChild [" +x+"] "+ ae.Current.Name + Environment.NewLine);
x++;
}
什么也没有出现。
然后我尝试从进程句柄中查找 AutomationElement。
var process = Process.GetProcessesByName("firefox").First();
AutomationElement aeDesktop = AutomationElement.FromHandle(process.Handle);
再一次,什么都没有。
我一直在尝试为 "hook on to" 寻找某种 AutomationElement,这样我就可以开始搜索该保存对话框了。很想知道大家的想法、任何建议、提示或 "HEY BUDDY - YOU ARE DOING IT WRONG!" 提前致谢!
所以这不是一个完整的答案,而是针对我的具体情况的答案,而不是我在上面提出的一般性问题。
Access to file download dialog in Firefox