internal IPage GetPageContaining(GeckoNode clickNode) { bool gotPageElt = false; for (var elt = clickNode as GeckoElement ?? clickNode.ParentElement; elt != null; elt = elt.ParentElement) { var classAttr = elt.Attributes["class"]; if (classAttr != null) { var className = " " + classAttr.NodeValue + " "; if (className.Contains(" " + PageContainerClass + " ")) { // Click is inside a page element: can succeed. But it's not this one. gotPageElt = true; continue; } if (className.Contains(" " + ClassForGridItem + " ")) { if (!gotPageElt) return null; // clicked somewhere in a grid, but not actually on the page: intended page may be ambiguous. var id = elt.Attributes["id"].NodeValue; IPage page; _pageMap.TryGetValue(id, out page); return page; } } } return null; }