2

我有一个应用程序设置为在用户注销时在一天中的特定时间运行。它在 C# 中结合使用 Selenium 和 UI 自动化来每天下载一个文件。登录后运行,一切正常。但是,当我通过任务计划程序运行应用程序时,它会在尝试查找 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 的 TreeScope.Children 写入日志文件的 RootElement

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);

再一次,什么都没有。

我一直试图找到某种“挂钩”的 AutomationElement,这样我就可以开始搜索那个保存对话框了。很想知道你们的想法、任何建议、提示或“嘿,伙计——你做错了!” 提前谢谢大家!

4

1 回答 1

1

所以不是一个完整的答案,而是一个针对我的具体情况的答案,而不是我上面问的一般答案。

访问 Firefox 中的文件下载对话框

于 2015-03-11T16:24:31.507 回答