2016-04-13 11 views
5

Iteriert werden Ich habe diesen Teil des Codes, der mich verrückt macht.
Ich übergebe Elemente, die aus HTML übernommen wurden.
structureElement scheint feines Element zu halten, aber wenn ich .FindElement() darauf leite, gibt es immer den Wert von der ersten Iteration zurück. WARUM? grrrrrrrr
Hier ist mein Code:FindElement wird nicht iteriert, wenn Elemente in IReadOnlyCollection

IReadOnlyCollection<IWebElement> structureElements = 
    driver.FindElements(By.XPath(".//div[contains(@id, 'PSBTree_x-auto-')]")); 
//.Where(sE => sE.FindElement(By.XPath("//img[@title]")).GetAttribute("title") != "Customer Item") 
IWebElement tmp; 
foreach (IWebElement structureElement in structureElements) 
{ 
    //if (structureElement.FindElement(By.XPath("//span//img[@title]")).GetAttribute("title").Contains("Customer Item")) 
    // continue; 
    tmp = structureElement.FindElement(By.XPath("//span[@class='cat-icons-tree']/img")); 
    ReportProgress(progress, ref r, ct, allsteps, message + tmp.GetCssValue("background")); 
    Thread.Sleep(100); 
    ReportProgress(progress, ref r, ct, allsteps, message + structureElement.Text); 
    Thread.Sleep(300); 
} 

Antwort

3

Das ist, weil Sie // im Xpath verwenden, was bedeutet, „wählen Nachkomme der Wurzel“, so ist es die Rückkehr des ersten findet es im Dokument

Wenn Sie ein Nachkomme dieses Knotens finden möchten, können Sie versuchen wollen:

.//span[@class='cat-icons-tree']/img 

.// bedeutet „wählen Nachkommen des Kontextknotens“

Sie alle Abkürzungen für die Achsen überprüfen here

+0

Oh mein Dank. Ich bin blind oO –