如何在使用任务计划程序和用户注销时找到AutomationElement?

时间:2015-03-10 22:47:17

标签: c# selenium automation ui-automation automationelement

我有一个应用程序设置为在用户注销时的特定时间运行。它在C#中使用Selenium和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);

最初,我试图找到"桌面"

的根元素
 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);

再一次,没有。

我一直试图找到某种自动元素来加入"所以我可以开始搜索保存对话框。很想知道你们所想的是什么,任何建议,提示,或者" HEY BUDDY - 你做错了!"提前谢谢!

1 个答案:

答案 0 :(得分:1)

所以不是一个完整的答案,而是一个解决我的具体情况的答案,而不是我上面提到的一般答案。

Access to file download dialog in Firefox