def _get_firstChild(self): # accNavigate incorrectly returns nothing for NAVDIR_FIRSTCHILD and requesting one child with AccessibleChildren causes a crash. # Therefore, we must use accChild(1). child = IAccessibleHandler.accChild(self.IAccessibleObject, 1) if not child: return None return IAccessible(IAccessibleObject=child[0], IAccessibleChildID=child[1])
def locateHTMLElementByID(document,ID): try: element=document.getElementsByName(ID).item(0) except COMError as e: log.debugWarning("document.getElementsByName failed with COMError %s"%e) element=None if element: return element try: nodeName=document.body.nodeName except COMError as e: log.debugWarning("document.body.nodeName failed with COMError %s"%e) return None if nodeName=="FRAMESET": tag="frame" else: tag="iframe" try: frames=document.getElementsByTagName(tag) except COMError as e: log.debugWarning("document.getElementsByTagName failed with COMError %s"%e) return None for frame in frames: pacc=IAccessibleFromHTMLNode(frame) res=IAccessibleHandler.accChild(pacc,1) if not res: continue childElement=HTMLNodeFromIAccessible(res[0]) if not childElement: continue childElement=locateHTMLElementByID(childElement.document,ID) if not childElement: continue return childElement
def getChildHTMLNodeFromFrame(frame): try: pacc = IAccessibleFromHTMLNode(frame) except NotImplementedError: # #1569: It's not possible to get an IAccessible from frames marked with an ARIA role of presentation. # In this case, just skip this frame. return res = IAccessibleHandler.accChild(pacc, 1) if not res: return return HTMLNodeFromIAccessible(res[0])
def getChildHTMLNodeFromFrame(frame): try: pacc=IAccessibleFromHTMLNode(frame) except NotImplementedError: # #1569: It's not possible to get an IAccessible from frames marked with an ARIA role of presentation. # In this case, just skip this frame. return res=IAccessibleHandler.accChild(pacc,1) if not res: return return HTMLNodeFromIAccessible(res[0])
def locateHTMLElementByID(document, ID): try: elements = document.getElementsByName(ID) if elements is not None: element = elements.item(0) else: # probably IE 10 in standards mode (#3151) try: element = document.all.item(ID) except: element = None except COMError as e: log.debugWarning("document.getElementsByName failed with COMError %s" % e) element = None if element: return element try: nodeName = document.body.nodeName except COMError as e: log.debugWarning("document.body.nodeName failed with COMError %s" % e) return None if nodeName: nodeName = nodeName.upper() if nodeName == "FRAMESET": tag = "frame" else: tag = "iframe" try: frames = document.getElementsByTagName(tag) except COMError as e: log.debugWarning("document.getElementsByTagName failed with COMError %s" % e) return None if not frames: # frames can be None in IE 10 return None for frame in frames: try: pacc = IAccessibleFromHTMLNode(frame) except NotImplementedError: # #1569: It's not possible to get an IAccessible from frames marked with an ARIA role of presentation. # In this case, just skip this frame. continue res = IAccessibleHandler.accChild(pacc, 1) if not res: continue childElement = HTMLNodeFromIAccessible(res[0]) if not childElement: continue childElement = locateHTMLElementByID(childElement.document, ID) if not childElement: continue return childElement