Arbeiten mit .Filter()
es scheint nicht zu versuchen, auf Elemente ohne einen bestimmten Wert zu filtern ..... so .... Ich kam mit der unten Monstrosität; es ist nicht gerade elegant, aber es funktioniert auf meiner Testseite und sollte fast die ganze Zeit mit einer kleinen Anzahl von Links und einem ordentlichen Prozentsatz dieser Links funktionieren, die keine Klasse haben.
Da es möglich ist, dass es keine Verbindung ohne eine Klasse/leere Klasse finden wird, wenn ja, wird es explizit eine Ausnahme auslösen. Das Implementieren eines Speichers, von dem Verbindungen ausprobiert wurden, wäre nicht zu schwierig und würde nur dann eine Ausnahme auslösen, wenn keine Verbindungen ohne definierte Klasse vorhanden wären. Das Folgende war schneller zu implementieren und könnte "gut genug" sein.
var browser = ie.Page<MyPageClass>(); //obviously anonymized here.
int numberOfLinks = browser.Document.Links.Count;
Random random = new Random();
int randomNum = random.Next(0, numberOfLinks);
int counter = 0;
int maxTimesToTry = 1000;
for (int i = 0; i < maxTimesToTry; i++)
{
if (string.IsNullOrEmpty(browser.Document.Links[randomNum].ClassName))
{
Console.WriteLine("url: " + browser.Document.Links[randomNum].Url);
break;
}
else
{
randomNum = random.Next(0, numberOfLinks);
}
counter++;
}
if (counter == maxTimesToTry)
{
throw new Exception(string.Format("Unable to find a link without a class in {0} tries", maxTimesToTry));
}
Getestet auf WatiN 2.1, IE9, Win7, 2,5 NUnit
Dank. Mit ein wenig Feinabstimmung hat es sich gelohnt! –