2016-04-13 30 views
5

Mam tę część kodu, która doprowadza mnie do szaleństwa.
Jestem Iterowanie nad elementami, które zostały zaczerpnięte z HTML.
StructureElement wydaje się zawierać drobny element, ale po uruchomieniu .FindElement() na nim zwraca zawsze wartość z pierwszej iteracji. CZEMU? grrrrrrrr
Oto mój kod:FindElement nie wykonuje iteracji podczas iterowania elementów w 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); 
} 

Odpowiedz

3

To dlatego, że używasz // w Xpath, co oznacza „wybierz potomstwu korzenia”, więc jest to powrót pierwszy stwierdzi w dokumencie

Jeśli chcesz odnaleźć potomka tego węzła, można też spróbować:

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

.// oznacza „wybierz potomków węzła kontekstowego”

można sprawdzić wszystkie skróty do osi here

+0

Oh my, dzięki. Jestem ślepy oO –