2012-03-28 21 views
1

Ich habe eine Seite, die bis zu 20-30 Links haben könnte. Einige dieser Links können eine Klasse haben, die von anderen Faktoren abhängt.Finden Sie alle Links * ohne * eine Klasse

Ich möchte nach dem Zufallsprinzip einen Link aus denen, die nicht die Klasse haben wählen.

Gibt es eine Möglichkeit, dies mit watin zu tun?

Antwort

1

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

+0

Dank. Mit ein wenig Feinabstimmung hat es sich gelohnt! –

Verwandte Themen