ユーザーがログオフしている特定の時刻に実行するように設定されたアプリケーションがあります。Selenium と C# の 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 のすべての 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);
繰り返しますが、何もありません。
「フックする」AutomationElementを見つけようとして立ち往生しているので、その保存ダイアログボックスの検索を開始できます。皆さんの考え、提案、ヒント、または「相棒 - あなたは間違ったことをしている!」などを知りたいです。よろしくお願いします!