def getVisibleState(self): if None == self.node.mParentNode: return self.element_parser.getVisible() else: parent_element_parser = ParseElement(self.node.mParentNode.mElement) parent_element_parser.parseElmentData() return (self.element_parser.getVisible() and parent_element_parser.getVisible())
def getVisibleState_All(self): bResult = None temp_node = copy.deepcopy(self.node) while (None != temp_node.mParentNode): temp_element_parser = ParseElement(temp_node.mElement) temp_element_parser.parseElmentData() bResult = temp_element_parser.getVisible() and temp_element_parser.getVisible() temp_node = temp_node.mParentNode return bResult
def getVisibleState(self): if None == self.node.mParentNode: return self.element_parser.getVisible() else: parent_element_parser = ParseElement( self.node.mParentNode.mElement) parent_element_parser.parseElmentData() return (self.element_parser.getVisible() and parent_element_parser.getVisible())
def __init__(self, node): self.node = node self.element_data = node.mElement self.element_parser = ParseElement(self.element_data) self.element_parser.parseElmentData() self.ViewGroup_ClassName_list = [ "android.widget.ListView", "android.widget.GridView", "android.widget.RadioGroup", "android.widget.Spinner", "android.widget.Gallery" ]
def getClickableState(self): parent_node = self.node.mParentNode if None == parent_node: return self.element_parser.getClickable() parent_element_parser = ParseElement(parent_node.mElement) parent_element_parser.parseElmentData() parent_ClassName = parent_element_parser.getClassName() if parent_ClassName in self.ViewGroup_ClassName_list: return parent_element_parser.getClickable() else: return self.element_parser.getClickable()
def __init__(self, node): self.node = node self.element_data = node.mElement self.element_parser = ParseElement(self.element_data) self.element_parser.parseElmentData() self.ViewGroup_ClassName_list = ["android.widget.ListView", "android.widget.GridView", "android.widget.RadioGroup", "android.widget.Spinner", "android.widget.Gallery"]
def setNodeValue(self, node): element = node.mElement if None == element: msg = "Failed to set Node Value because Error in Node!" self.m_logger.error(msg) return False element_parser = ParseElement(node.mElement) element_parser.parseElmentData() node.mClassName = element_parser.getClassName() node.mHashCode = element_parser.getHashCode() node.mId = element_parser.getID() node.mText = element_parser.getText() active_state = ViewState(node) node.mVisible = element_parser.getVisible() node.mClickable = element_parser.getClickable() node.mActive = active_state.getActiveState() node.mRect = element_parser.getRectArea() node.mScrollX = element_parser.scrollX node.mScrollY = element_parser.scrollY node.mAbsoluteRect = self.getAbsoluteRect(node) node.mLocation = self.getViewCenterPoint(node)
def getVisibleState_All(self): bResult = None temp_node = copy.deepcopy(self.node) while (None != temp_node.mParentNode): temp_element_parser = ParseElement(temp_node.mElement) temp_element_parser.parseElmentData() bResult = temp_element_parser.getVisible( ) and temp_element_parser.getVisible() temp_node = temp_node.mParentNode return bResult
def __init__(self): self.element_parser = ParseElement()
class ParseView(): def __init__(self): self.element_parser = ParseElement() #406c1d58 com.android.internal.service.wallpaper.ImageWallpaper #4054bf40 com.android.launcher/com.android.launcher2.Launcher #4073dcd8 com.example.android.apis/com.example.android.apis.ApiDemos #406a7510 TrackingView #405ec120 StatusBarExpanded #40632908 StatusBar #4067b9e8 Keyguard #DONE def isSystemView(self, view_detail): if "com.android.internal.service.wallpaper.ImageWallpaper" == view_detail: return True elif "com.android.launcher/com.android.launcher2.Launcher" == view_detail: return True elif "TrackingView" == view_detail: return True elif "StatusBarExpanded" == view_detail: return True elif "StatusBar" == view_detail: return True elif "Keyguard" == view_detail: return True else: return False def getViewListData(self, view_list_data): viewListHashCode_List = [] viewListHashCode_Dict = {} lines_list = view_list_data.split("\n") if '' in lines_list: lines_list.remove('') if 'DONE' in lines_list: lines_list.remove('DONE') for line in lines_list: temp = line.split(" ") hashcode = temp[0] detail_info = temp[1] # clear the views of android system default services or applications # ImageWallpaper,Launcher,TrackingView,StatusBarExpanded,StatusBar,Keyguard if not self.isSystemView(detail_info): viewListHashCode_List.append(hashcode) viewListHashCode_Dict[hashcode] = detail_info return viewListHashCode_List, viewListHashCode_Dict # parse view data by dump, then get the view text list def getViewTextList(self, view_dump_data): view_text_list = [] element_list = self.element_parser.getStructure(view_dump_data)[0] for element in element_list: text = self.element_parser.getText(element) view_text_list.append(text) return view_text_list def isEqualTextList(self, view_dump_data1, view_dump_data2): text_list1 = self.getViewTextList(view_dump_data1) text_list2 = self.getViewTextList(view_dump_data2) return (text_list1 == text_list2)
class ViewState(): def __init__(self, node): self.node = node self.element_data = node.mElement self.element_parser = ParseElement(self.element_data) self.element_parser.parseElmentData() self.ViewGroup_ClassName_list = ["android.widget.ListView", "android.widget.GridView", "android.widget.RadioGroup", "android.widget.Spinner", "android.widget.Gallery"] ## The Visible state of parent node decide the Visible state of child node ## 应该是遍历所有的父节点的,但是下面的setNodeValue()函数是从root node开始,从上往下填值的,所以可以只判断自己和直接父节点的状态即可 def getVisibleState(self): if None == self.node.mParentNode: return self.element_parser.getVisible() else: parent_element_parser = ParseElement(self.node.mParentNode.mElement) parent_element_parser.parseElmentData() return (self.element_parser.getVisible() and parent_element_parser.getVisible()) # 遍历所有父节点的方法 # What does this method can do? def getVisibleState_All(self): bResult = None temp_node = copy.deepcopy(self.node) while (None != temp_node.mParentNode): temp_element_parser = ParseElement(temp_node.mElement) temp_element_parser.parseElmentData() bResult = temp_element_parser.getVisible() and temp_element_parser.getVisible() temp_node = temp_node.mParentNode return bResult ## Some Views 本身的 isClickable()=false, but its parent node 的 isClickable()=true ## so, these Views should be clickable ## for example, ListView, GridView, etc. container View ## 但是如果,RadioGroup下包含了TextView和一些RadioButton,这个TextView是不可点击的吗? def getClickableState(self): parent_node = self.node.mParentNode if None == parent_node: return self.element_parser.getClickable() parent_element_parser = ParseElement(parent_node.mElement) parent_element_parser.parseElmentData() parent_ClassName = parent_element_parser.getClassName() if parent_ClassName in self.ViewGroup_ClassName_list: return parent_element_parser.getClickable() else: return self.element_parser.getClickable() ## mActive = False means it can not handle events ## mActive = True means it can handle events def getActiveState(self): try: if self.element_parser.getWillNotDraw(): msg = "Will Not Draw!" return False if not self.getVisibleState(): msg = "Not Visible!" return False if not self.getClickableState(): msg = "Not Clickable!" return False if not self.element_parser.getDRAWN(): msg = "Not Drawn!" return False else: return True except Exception,e: msg = "Failed to get Active State of Element! %s" %str(e) print msg return False
class ViewState(): def __init__(self, node): self.node = node self.element_data = node.mElement self.element_parser = ParseElement(self.element_data) self.element_parser.parseElmentData() self.ViewGroup_ClassName_list = [ "android.widget.ListView", "android.widget.GridView", "android.widget.RadioGroup", "android.widget.Spinner", "android.widget.Gallery" ] ## The Visible state of parent node decide the Visible state of child node ## 应该是遍历所有的父节点的,但是下面的setNodeValue()函数是从root node开始,从上往下填值的,所以可以只判断自己和直接父节点的状态即可 def getVisibleState(self): if None == self.node.mParentNode: return self.element_parser.getVisible() else: parent_element_parser = ParseElement( self.node.mParentNode.mElement) parent_element_parser.parseElmentData() return (self.element_parser.getVisible() and parent_element_parser.getVisible()) # 遍历所有父节点的方法 # What does this method can do? def getVisibleState_All(self): bResult = None temp_node = copy.deepcopy(self.node) while (None != temp_node.mParentNode): temp_element_parser = ParseElement(temp_node.mElement) temp_element_parser.parseElmentData() bResult = temp_element_parser.getVisible( ) and temp_element_parser.getVisible() temp_node = temp_node.mParentNode return bResult ## Some Views 本身的 isClickable()=false, but its parent node 的 isClickable()=true ## so, these Views should be clickable ## for example, ListView, GridView, etc. container View ## 但是如果,RadioGroup下包含了TextView和一些RadioButton,这个TextView是不可点击的吗? def getClickableState(self): parent_node = self.node.mParentNode if None == parent_node: return self.element_parser.getClickable() parent_element_parser = ParseElement(parent_node.mElement) parent_element_parser.parseElmentData() parent_ClassName = parent_element_parser.getClassName() if parent_ClassName in self.ViewGroup_ClassName_list: return parent_element_parser.getClickable() else: return self.element_parser.getClickable() ## mActive = False means it can not handle events ## mActive = True means it can handle events def getActiveState(self): try: if self.element_parser.getWillNotDraw(): msg = "Will Not Draw!" return False if not self.getVisibleState(): msg = "Not Visible!" return False if not self.getClickableState(): msg = "Not Clickable!" return False if not self.element_parser.getDRAWN(): msg = "Not Drawn!" return False else: return True except Exception, e: msg = "Failed to get Active State of Element! %s" % str(e) print msg return False