J'essaie d'utiliser WPF UI Automation sans utiliser de fausses instructions thread.sleep. Ce que je voudrais faire est d'avoir une fonction GetElementById qui interroge continuellement jusqu'à ce que le contrôle soit disponible (ou qu'un timeout se produise). Le problème est qu'il semble mettre en cache les contrôles enfants de mon élément parent. Est-il possible de rafraîchir aux enfants? Ou est-ce que quelqu'un a une approche alternative?Comment éviter Thread.Sleep lors de l'utilisation de WPF Automation Framework?
public AutomationElement GetElementById(string id, int timeout)
{
if (timeout <= 1000) throw new ArgumentException("Timeout must be greater than 1000", "timeout");
AutomationElement element = null;
int timer = 0;
const int delay = 100;
do
{
element = MainWindow.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.AutomationIdProperty, id));
Thread.Sleep(delay);
timer += delay;
} while (element == null && timer < timeout);
if (element == null) throw new InvalidOperationException("Unable to find element with id: " + id);
return element;
}
Plus d'informations. J'essaie d'obtenir un élément qui existe sur un onglet particulier. Si je fais un fil de sommeil après .select de l'onglet alors ça marche. Cependant, si je mets un fil de sommeil dans le cadre de ma méthode, cela ne fonctionne pas. –