2016-04-13 13 views
5

Ho questa parte di codice che mi fa impazzire.
Sto iterando su elementi che sono stati presi da HTML.
structureElement sembra contenere un elemento fine, ma quando eseguo .FindElement() su di esso restituisce sempre valore dalla prima iterazione. PERCHÉ? grrrrrrrr
Ecco il mio codice:FindElement non itera quando itera elementi 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); 
} 

risposta

3

Questo perché si sta utilizzando // nel Xpath, che significa, "selezionare discendenti di radice di", quindi è di tornare il primo si trova nel documento

Se si vuole trovare un discendente di quel nodo, si consiglia di provare:

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

.// significa "selezionare discendenti del nodo di contesto"

È possibile controllare tutte le abbreviazioni per gli assi here

+0

Oh mio, grazie. Sono cieco oO –

Problemi correlati