CN108829471A - 控件路径生成方法、装置、计算机设备及存储介质 - Google Patents
控件路径生成方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN108829471A CN108829471A CN201810435861.0A CN201810435861A CN108829471A CN 108829471 A CN108829471 A CN 108829471A CN 201810435861 A CN201810435861 A CN 201810435861A CN 108829471 A CN108829471 A CN 108829471A
- Authority
- CN
- China
- Prior art keywords
- node
- information
- nodal
- nodal information
- control
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种控件路径生成方法、装置、计算机设备及存储介质,在获取当前界面的控件触发请求之后,采用辅助功能类获取当前界面的XML文件,并且基于触发控件节点的节点信息,在当前界面的XML文件中获取触发控件节点的祖先节点的节点信息,最后基于触发控件节点的节点信息和祖先节点的节点信息,获取到触发控件节点的xpath路径。通过辅助功能类重构当前界面的XML文件,并基于触发控件节点的节点信息获取对应的祖先节点的节点信息,再根据对应的节点信息来得到触发控件节点的xpath路径,保证了xpath路径获取的便捷,并且该方法采用了Android系统通用的辅助功能类来实现,可以兼容Android系统中的不同定制系统,从而保证该xpath路径可以兼容于Android系统中不同的定制系统。
Description
技术领域
本发明涉及信息处理领域,尤其涉及一种控件路径生成方法、装置、计算机设备及存储介质。
背景技术
Android是一种针对移动设备的开源软件平台,广泛地应用于各种智能手机、平板电脑、学习机或电子书等产品中。目前在应用了Android系统的移动设备中,常需要获取目标控件在当前界面的位置信息。对于获取该目标控件的位置信息有多种实现方式,其中较多地是通过PC端抓取dump之后再生成对应的xpath路径,但是这个抓取过程必须手动操作,而且整个方法需要借助PC端实现,操作过程也较为繁琐。此外,应用了Android系统的移动设备由于存在很多定制的系统。在传统的获取目标控件在当前界面的位置信息的方式中,常因为不同定制系统的差异而容易导致定位失败,无法保证该位置信息可以兼容于Android系统中不同的定制系统。
发明内容
本发明实施例提供一种控件路径生成方法、装置、计算机设备及存储介质,以解决控件路径获取效率不高,且容易失效的问题。
第一方面,本发明实施例提供一种控件路径生成方法,包括以下步骤:
获取当前界面的控件触发请求,所述控件触发请求包括触发控件节点的节点信息;
采用辅助功能类获取当前界面的XML文件;
基于所述触发控件节点的节点信息,在所述当前界面的XML文件中获取所述触发控件节点的祖先节点的节点信息;
基于所述触发控件节点的节点信息和所述祖先节点的节点信息,获取所述触发控件节点的xpath路径。
第二方面,本发明实施例提供一种控件路径生成装置,包括:
控件触发请求获取装置,用于获取当前界面的控件触发请求,所述控件触发请求包括触发控件节点的节点信息;
XML文件获取模块,用于采用辅助功能类获取当前界面的XML文件;
祖先节点获取模块,用于基于所述触发控件节点的节点信息,在所述当前界面的XML文件中获取所述触发控件节点的祖先节点的节点信息;
xpath路径获取模块,用于基于所述触发控件节点的节点信息和所述祖先节点的节点信息,获取所述触发控件节点的xpath路径。
本发明第三方面提供一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明第一方面所述控件路径生成方法的步骤。
本发明第四方面提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如本发明第一方面所述控件路径生成方法的步骤。
本发明实施例提供的控件路径生成方法、装置、计算机设备及存储介质中,在获取到控件触发请求之后,通过采用辅助功能类获取当前界面的XML文件,并且基于触发控件节点的节点信息,在当前界面的XML文件中获取触发控件节点的祖先节点的节点信息,最后基于触发控件节点的节点信息和祖先节点的节点信息,获取到触发控件节点的xpath路径。通过辅助功能类重构当前界面的XML文件,并基于触发控件节点的节点信息获取对应的祖先节点的节点信息,再根据对应的节点信息来得到触发控件节点的xpath路径,保证了xpath路径获取的便捷,并且该方法采用了Android系统通用的辅助功能类来实现,可以兼容Android系统中的不同定制系统,从而保证该xpath路径可以兼容于Android系统中不同的定制系统。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例1中的控件路径生成方法的一流程图;
图2是一个示例性的界面/窗口的所有节点的树状示意图;;
图3是图1中步骤S20的一具体实施方式的一流程图;
图4是图1中步骤S30的一具体实施方式的一流程图;
图5是图1中步骤S40的一具体实施方式的一流程图;
图6是图5中步骤S41的一具体实施方式的一流程图;
图7是一个目标节点的目标节点信息示例图;
图8是图5中步骤S41的另一具体实施方式的一流程图;
图9是另一个目标节点的目标节点信息示例图;
图10是本发明实施例2中的控件路径生成装置的一示意图;
图11是本发明实施例4中的计算机设备的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
图1示出本实施例中控件路径生成方法的一流程图。该控件路径生成方法应用在各种应用了Android系统的终端中,以解决控件路径获取效率不高,且容易失效的问题。如图1所示,该控件路径生成方法包括如下步骤:
S10:获取当前界面的控件触发请求,控件触发请求包括触发控件节点的节点信息。
其中,控件触发请求是指用户对终端的界面中的某一控件执行了相应操作而触发的对应请求。具体地,该操作可以是对当前界面的该控件的点击、触摸或者长按等。触发控件节点是指控件触发请求中对应的触发控件的节点。节点信息是对节点所包含的信息的属性描述。具体地,节点信息可以包括节点名称(nodeName)、节点值(nodeValue)以及节点类型(nodeType)等。
可选地,可以通过Java的getSource()方法来获取触发控件节点的节点信息。Java的getSource()方法属于ActionEvent,是继承自EventObject。getSource()方法会返回当前动作所指向的对象(对控件的点击、触摸或者长按操作等),包含对象的所有信息(节点信息)。因此,可以通过该getSource()方法来获取触发控件节点的节点信息。示例性地,具体获取方式可以表示为:
AccessibilityNodeInfo source=event.getSource();
S20:采用辅助功能类获取当前界面的XML文件。
其中,辅助功能类(AccessibilityService)是Android系统提供的一种继承Service类的服务。该服务提供了增强的用户界面,旨在帮助用户与设备进行充分地交互。辅助功能类主要提供了两种功能:查找界面元素和实现模拟点击。具体地,采用辅助功能类要求继承Service类并实现它的抽象方法。而XML(Extensible Markup Language,可扩展标记语言)文件是标准通用标记语言的子集,其为一种用于标记电子文件使其具有结构性的标记语言。节点在XML文件中是有效而完整的结构的最小单元,在XML文件的DOM(DocumentObject Model,文档对象模型)结构中,每个节点都是一个对象。
在该步骤中,可以通过辅助功能类获取到当前界面的所有节点的节点信息,再基于所有节点的节点信息生成与当前界面相对应的XML文件。
S30:基于触发控件节点的节点信息,在当前界面的XML文件中获取触发控件节点的祖先节点的节点信息。
其中,祖先节点是在数据结构中,用来描述“树”型结构的名词。对于触发控件节点而言,其上级节点称为该触发控件节点的父节点,而父节点也可能会存在上级节点,触发控件节点的所有上级节点的集合就称为触发控件节点的祖先节点。一个数据结构中最上级的节点称为根节点(root),它是当前界面中所有节点(除了本身)的祖先节点,而且根节点不存在父节点。如图2所示,图2所展示的是一个示例性的界面/窗口的所有节点的树状图,假设节点“td”为触发控件节点,则节点“title”为触发控件节点“td”的父节点,而触发控件节点“td”的祖先节点为:“title”、“head”和“html”。
在该步骤中,基于触发控件节点的节点信息,可以通过在当前界面的XML文件中进行重复迭代获取父节点,直至达到当前界面的XML文件中的根节点的方式,来实现获取触发控件节点的祖先节点的节点信息。
S40:基于触发控件节点的节点信息和祖先节点的节点信息,获取触发控件节点的xpath路径。
其中,xpath即为XML路径语言,它是一种用来确定XML文件中某部分位置的语言,用于在XML文件中通过元素和属性(即节点信息)进行导航。在获取触发控件节点的节点信息和祖先节点的节点信息之后,基于层级从上到下的顺序(根节点到触发控件节点)将每一节点的节点信息进行拼接,即得到该触发控件节点的xpath路径。
在这个实施方式中,在获取到当前界面的控件触发请求之后,通过采用辅助功能类获取当前界面的XML文件,并且基于触发控件节点的节点信息,在当前界面的XML文件中获取触发控件节点的祖先节点的节点信息,最后基于触发控件节点的节点信息和祖先节点的节点信息,获取到触发控件节点的xpath路径。通过辅助功能类重构当前界面的XML文件,并基于触发控件节点的节点信息获取对应的祖先节点的节点信息,再根据对应的节点信息来得到触发控件节点的xpath路径,保证了xpath路径获取的便捷,并且该方法采用了Android系统通用的辅助功能类来实现,可以兼容Android系统中的不同定制系统,从而保证该xpath路径可以兼容于Android系统中不同的定制系统。
在一个具体实施方式中,采用辅助功能类获取当前界面的XML文件,如图3所示,包括以下步骤:
S21:采用辅助功能类获取当前界面的根节点的节点信息。
在该步骤中,可以通过辅助功能类中特定的方法函数来获取当前界面的根节点的节点信息。具体地,可以通过辅助功能类中的getRootInActiveWindow()方法获取当前窗口(界面)内容,而且该方法会返回当前活动窗口(界面)的根节点的节点信息。示例性地,获取界面的根节点的节点信息的具体方式可以为:
AccessibilityNodeInfo rootNode=getRootInActiveWindow();
S22:基于根节点的节点信息,获取根节点对应的后代节点的节点信息。
其中,后代节点是和祖先节点相对应的概念。一个节点的下级节点称为该节点对应的子节点,而该子节点也可能会存在对应的下级节点,一个节点的所有下级节点的集合就称为该节点的后代节点。在该步骤中,基于根节点的节点信息来获取当前界面中该根节点对应的所有后代节点的节点信息,而根节点和其对应的后代节点就构成了当前界面的所有节点。
具体地,可以通过辅助功能类中获取根节点的子节点对应的方法来实现上述过程:rootNode.getChild()。在rootNode.getChild()方法中,如果一个当前节点(根节点)存在子节点,则会返回其所有子节点的节点信息,若不存在对应的子节点,则会返回NULL。因此,可以通过该rootNode.getChild()方法采用一个迭代的过程来获取根节点对应的后代节点的节点信息。优选地,实现方法如下:(1)将根节点作为当前节点,采用rootNode.getChild()获取当前节点的所有子节点的节点信息;(2)将当前节点获取的所有子节点作为新的当前节点,采用rootNode.getChild()获取当前节点的所有子节点的节点信息;(3)重复执行步骤(2),直至所有的rootNode.getChild()返回来的结果均为NULL。通过上述步骤(1)-(3)中获取到的所有的节点的节点信息则为该根节点对应的后代节点的节点信息。
S23:基于根节点的节点信息和后代节点的节点信息,生成当前界面的XML文件。
由于根节点和该根节点对应的后代节点就构成了当前界面的所有节点,故根据获取到的根节点的节点信息和对应的后代节点的节点信息,即可生成当前界面的XML文件。具体地,可以通过使用DOM方式来生成当前界面的XML文件,或者预先编写好相应的程序代码,再基于获取到的根节点的节点信息和对应的后代节点的节点信息得到当前界面的XML文件。
在这个实施方式中,借助辅助功能类来获取当前界面的所有节点(根节点和其对应的后代节点)的节点信息,再基于所有节点信息来生成当前界面的XML文件,提高了XML文件的获取效率的同时也提高了获取到的XML文件的准确性。
在一个具体实施方式中,基于触发控件节点的节点信息,在当前界面的XML文件中获取触发控件节点的祖先节点的节点信息,如图4所示,包括以下步骤:
S31:将触发控件节点作为当前节点,判断当前节点是否是根节点。
为了在当前界面的XML文件中获取触发控件节点的祖先节点的节点信息,可以将触发控件节点作为当前节点,并将“判断当前节点是否是根节点”作为递归条件。若当前节点为根节点,说明触发控件节点就是根节点,则递归结束。即该触发控件节点相当于图2中的节点“html”。
S32:若当前节点不是根节点,则基于当前节点的节点信息获取当前节点的父节点的节点信息,将该父节点作为当前节点,并触发判断当前节点是否是根节点的步骤。
在这个步骤中,若当前节点不是根节点,则会基于当前节点的节点信息来获取当前节点的父节点的节点信息,并将该父节点作为新的当前节点,之后会触发步骤S31中的“判断当前节点是否是根节点”的步骤。
例如(参见图2):若触发控件节点为“td”,则在这个实施方式中会将节点“td”作为当前节点,执行步骤S31和S32的步骤,最后分别得到节点“td”的祖先节点“title”、“head”和“html”的节点信息。
S33:若当前节点为根节点,则不获取当前节点的父节点的节点信息。
如果当前节点是根节点,则说明已经获取到了该触发控件节点的所有祖先节点的节点信息,则不再获取当前节点的父节点的节点信息,递归结束。
在这个实施方式中,将触发控件节点作为当前节点,并采用递归判断当前节点是否是根节点的方式来获取触发控件节点的祖先节点的节点信息,保证了触发控件节点的祖先节点的节点信息的获取效率。
在一个具体实施方式中,基于触发控件节点的节点信息和祖先节点的节点信息,获取触发控件节点的xpath路径,如图5所示,包括以下步骤:
S41:在当前界面的XML文件中获取唯一属性信息。
其中,唯一属性信息是指可以唯一标识出对应节点的信息。在触发控件节点的节点信息和祖先节点的节点信息中,是包含有多个属性信息的,例如图2中显示的“html”和“head”等对应的可能是节点名称。但是,节点名称不一定可以唯一标识出一个节点,例如在图2中,节点名称为“tr”的节点就有两个,故在这个界面中,节点名称是不可以作为一个唯一属性信息的。该步骤从当前界面的XML文件中,选择可以标识出每一不同节点的属性信息,作为唯一属性信息。
S42:基于触发控件节点的唯一属性信息和祖先节点的唯一属性信息,获取触发控件节点的xpath绝对路径。
其中,绝对路径是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。绝对路径可以直接从根节点开始导航,获取到该绝对路径对应的节点的效率较高。在获取到对应的唯一属性信息之后,根据触发控件节点的唯一属性信息和祖先节点的唯一属性信息,并按照从上至下的层级(根节点到触发控件节点)来获取触发控件节点的xpath绝对路径。
例如,在图2中,若节点名称是唯一属性信息,则触发控件节点“td”的xpath绝对路径为“/html/head/title/td”。
在这个实施方式中,通过唯一属性信息来生成xpath路径,保证了xpath路径的有效性和准确性,并且采用绝对路径来生成xpath路径,提高了xpath路径的获取效率。
在一个具体实施方式中,在当前界面的XML文件中获取唯一属性信息,如图6所示,包括以下步骤:
S411:获取XML文件中的所有节点,作为目标节点,其中,每一目标节点包括至少一个目标节点信息,目标节点信息包括节点属性名和节点属性值。
在该步骤中,将XML文件中的所有节点作为目标节点,其中,每一目标节点都包括至少一个目标节点信息,而每一目标节点信息包括节点属性名和节点属性值。例如(如图7所示):假设当前界面的XML文件中总有四个节点W、X、Y、Z(在节点信息中并不存在W、X、Y、Z,这里只是为了方便说明而额外对这四个节点所做的标识),则将这四个节点作为目标节点。在图7中,每一目标节点都包括5个目标节点信息。
S412:基于所有目标节点的目标节点信息中的每一个相同的节点属性名,获取对应的节点属性值的类别数量。
在这个步骤中,根据所有目标节点的目标节点信息中的每一个相同的节点属性名,获取对应的节点属性值的类别数量。即获取节点属性名相同的节点信息中,对应的节点属性值的类别的数量。其中,节点属性值不相同则属于不同的类别。
例如,在图7中,分别获取所有目标节点中同一节点属性名A、B、C、D和E对应的节点属性值的类别数量。其中,节点属性名A对应的节点属性值分别为:01、11、21和31,则节点属性名A对应的节点属性值的类别数量为4。同理,在图X中节点属性名B、C和D对应的节点属性值的类别数量分别为:1、2、2和1。
S413:判断是否存在节点属性值的类别数量等于目标节点的节点数量的节点属性名。
该步骤中,在获取每一个相同节点属性名对应的节点属性值的类别数量之后,进而判断是否存在节点属性值的类别数量等于目标节点的节点数量的节点属性名。即判断图7中节点属性名A、B、C、D和E对应的节点属性值的类别数量是否存在等于目标节点的节点数量(4个)的。
S414:若存在节点属性值的类别数量等于目标节点的节点数量的节点属性名,则将对应的节点属性名存入待选属性信息中。
其中,待选属性信息是指可以用于生成唯一属性信息的待选信息。在该步骤中,若存在节点属性值的类别数量等于目标节点的节点数量的节点属性名,则说明在目标节点中该节点属性名对应的节点属性值都是不相同的,因此,通过该节点属性名对应的节点属性值可以从目标节点中唯一标识出不同的节点,故将该节点属性名存入待选属性信息中。
S415:基于待选属性信息获取唯一属性信息。
从存入待选属性信息的节点属性名中,获取对应的唯一属性信息。例如,在图7中,通过步骤S414将节点属性名A存入了待选属性信息中,故该步骤通过待选属性信息中的节点属性名A来获取对应的唯一属性信息,即每一节点中节点属性A对应的节点属性值。
进一步地,若在同一次判断过程中存入待选属性信息中的节点属性名为多个,则在基于待选属性信息获取唯一属性信息时从多个节点属性名中任选一个节点属性名,并基于该选取的节点属性名来获取唯一属性信息。即在多个节点属性名可以唯一标识出目标节点中的不同节点时,从中任选一个节点属性名即可,如此可以保证生成的xpath路径的简洁直观。
在这个实施方式中,通过判断目标节点中每一个相同的节点属性名对应的节点属性值的类别数量来获取的待选属性信息,并基于待选属性信息来获取对应的唯一属性信息,保证了后续生成的xpath路径的准确性。
在一个具体实施方式中,在判断是否存在节点属性值的类别数量等于目标节点的节点数量的节点属性名的步骤之后,如图8所示,该控件路径生成方法还包括以下步骤:
S414’:若不存在节点属性值的类别数量等于目标节点的节点数量的节点属性名,则获取节点属性值的类别数量最大的节点属性名,作为目标属性信息,并将该目标属性信息存入待选属性信息中。
在判断是否存在节点属性值的类别数量等于目标节点的节点数量的节点属性名之时,若目标节点中所有的节点属性名对应的节点属性值的类别数量均不等于目标节点的节点数量,即是不存在节点属性值的类别数量等于目标节点的节点数量的节点属性名。此时,获取节点属性值的类别数量最大的节点属性名,作为目标属性信息,并将该目标属性信息存入待选属性信息中。
例如,如图9所示,节点属性名A、B、C、D和E对应的节点属性值的类别数量分别为3、1、2、2和2。此时,由于目标节点的节点数量为4,则所有的节点属性名对应的节点属性值的类别数量均不等于目标节点的节点数量。故将对应的节点属性值的类别数量最大的节点属性名A,作为目标属性信息,并将该目标属性信息存入待选属性信息中。
S415’:获取目标属性信息中存在重复节点属性值的节点,作为目标节点。
根据目标属性信息,获取目标目标属性信息中存在重复节点属性值的节点作为目标节点,对之前的目标节点进行更新。
例如:在图9中,步骤S414’已经将节点属性名A作为目标属性信息,则目标属性信息中存在重复节点属性值的节点为节点Y和节点Z。故将这两个节点作为目标节点。
S416’:基于所有目标节点的目标节点信息中的每一个相同的节点属性名,获取对应的节点属性值的类别数量。
在该步骤中,除了目标节点已经更新之外,其余部分和步骤S412基本一致,在此不再赘述。
而在图9的节点Y和Z中,此时节点属性名A、B、C、D和E对应的节点属性值的类别数量分别为1、1、1、1和2。
S417’:判断是否存在节点属性值的类别数量等于目标节点的节点数量的节点属性名。
该步骤基本和步骤S413一致,在此不再赘述。
在步骤S417’之后,会根据判断的结果自行执行对应的步骤:若存在节点属性值的类别数量等于目标节点的节点数量的节点属性名,则执行步骤S414-S415,若不存在节点属性值的类别数量等于目标节点的节点数量的节点属性名,则执行步骤S414’-S417’,并进行重复迭代,直至最后判断出“存在”的结果(即步骤S414-S415)。
示例性地,在图9中,节点属性名A、B、C、D和E对应的节点属性值的类别数量分别为1、1、1、1和2,而此时目标节点的节点数量为2,即存在节点属性值的类别数量等于目标节点的节点数量的节点属性名(E)。此时执行步骤S414,将节点属性名E存入待选属性信息中(此时待选属性信息中保存了节点属性名A和E)。继而执行步骤S415,基于待选属性信息(节点属性名A和E),获取唯一属性信息。即将节点属性名A和E对应的节点属性值共同作为唯一属性信息。
在这个实施方式中,在判断不存在节点属性值的类别数量等于目标节点的节点数量的节点属性名之时,通过继续的更新目标节点,并进行重复迭代,继而从节点信息中获取到可以区分不同节点的唯一属性信息,保证了唯一属性信息的准确性。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
实施例2
图10示出与实施例1中控件路径生成方法一一对应的控件路径生成装置的原理框图。如图10所示,该控件路径生成装置包括控件触发请求获取模块10、XML文件获取模块20、祖先节点获取模块30和xpath路径获取模块40。其中,控件触发请求获取模块10、XML文件获取模块20、祖先节点获取模块30和xpath路径获取模块40的实现功能与实施例1中控件路径生成方法对应的步骤一一对应,为避免赘述,本实施例不一一详述。
控件触发请求获取模块10,用于获取当前界面的控件触发请求,控件触发请求包括触发控件节点的节点信息。
XML文件获取模块20,用于采用辅助功能类获取当前界面的XML文件。
祖先节点获取模块30,用于基于触发控件节点的节点信息,在当前界面的XML文件中获取触发控件节点的祖先节点的节点信息。
xpath路径获取模块40,用于基于触发控件节点的节点信息和祖先节点的节点信息,获取触发控件节点的xpath路径。
优选地,XML文件获取模块20包括根节点获取单元21、后代节点获取单元22和XML文件生成单元23。
根节点获取单元21,用于采用辅助功能类获取当前界面的根节点的节点信息。
后代节点获取单元22,用于基于根节点的节点信息,获取根节点对应的后代节点的节点信息。
XML文件生成单元23,用于基于根节点的节点信息和后代节点的节点信息,生成当前界面的XML文件。
优选地,祖先节点获取模块30包括根节点判断单元31、父节点获取和循环判断单元32和父节点获取结束单元33。
根节点判断单元31,用于将触发控件节点作为当前节点,判断当前节点是否是根节点。
父节点获取和循环判断单元32,用于若当前节点不是根节点,则基于当前节点的节点信息获取当前节点的父节点的节点信息,将父节点作为当前节点,并触发判断当前节点是否是根节点的步骤。
父节点获取结束单元33,用于若当前节点为根节点,则不获取当前节点的父节点的节点信息。
优选地,xpath路径获取模块40包括唯一属性信息获取单元41和xpath绝对路径获取单元42。
唯一属性信息获取单元41,用于在当前界面的XML文件中获取唯一属性信息。
xpath绝对路径获取单元42,用于基于触发控件节点的唯一属性信息和祖先节点的唯一属性信息,获取触发控件节点的xpath绝对路径。
优选地,唯一属性信息获取单元41包括目标节点获取子单元411、类别数量获取子单元412、类别数量判断子单元413、待选属性信息获取子单元414和唯一属性信息获取子单元415。
目标节点获取子单元411,用于获取XML文件中的所有节点,作为目标节点,其中,每一目标节点包括至少一个目标节点信息,目标节点信息包括节点属性名和节点属性值。
类别数量获取子单元412,用于基于所有目标节点的目标节点信息中的每一个相同的节点属性名,获取对应的节点属性值的类别数量。
类别数量判断子单元413,用于判断是否存在节点属性值的类别数量等于目标节点的节点数量的节点属性名。
待选属性信息获取子单元414,用于若存在节点属性值的类别数量等于目标节点的节点数量的节点属性名,则将对应的节点属性名存入待选属性信息中。
唯一属性信息获取子单元415,用于基于待选属性信息获取唯一属性信息。
优选地,唯一属性信息获取单元41还包括目标属性信息获取子单元414’、目标节点更新子单元415’、类别数量获取子单元416’和类别数量判断子单元417’。
目标属性信息获取子单元414’,用于若不存在节点属性值的类别数量等于目标节点的节点数量的节点属性名,则获取节点属性值的类别数量最大的节点属性名,作为目标属性信息,并将该目标属性信息存入待选属性信息中。
目标节点更新子单元415’,用于获取目标属性信息中存在重复节点属性值的节点,作为目标节点。
类别数量获取子单元416’,用于基于所有目标节点的目标节点信息中的每一个相同的节点属性名,获取对应的节点属性值的类别数量。
类别数量判断子单元417’,用于判断是否存在节点属性值的类别数量等于目标节点的节点数量的节点属性名。
实施例3
本实施例提供一计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现实施例1中控件路径生成方法,为避免重复,这里不再赘述。或者,该计算机程序被处理器执行时实现实施例2中控件路径生成模块中各模块/单元的功能,为避免重复,这里不再赘述。
可以理解地,所述计算机可读存储介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号和电信信号等。
实施例4
图11是本发明一实施例提供的计算机设备的示意图。如图11所示,该实施例的计算机设备60包括:处理器61、存储器62以及存储在存储器62中并可在处理器61上运行的计算机程序63。处理器61执行计算机程序63时实现上述实施例1中控件路径生成方法的步骤,例如图1所示的步骤S10至S40。或者,处理器61执行计算机程序63时实现上述各装置实施例中各模块/单元的功能,例如图10所示的控件触发请求获取模块10、XML文件获取模块20、祖先节点获取模块30和xpath路径获取模块40。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (10)
1.一种控件路径生成方法,其特征在于,包括以下步骤:
获取当前界面的控件触发请求,所述控件触发请求包括触发控件节点的节点信息;
采用辅助功能类获取当前界面的XML文件;
基于所述触发控件节点的节点信息,在所述当前界面的XML文件中获取所述触发控件节点的祖先节点的节点信息;
基于所述触发控件节点的节点信息和所述祖先节点的节点信息,获取所述触发控件节点的xpath路径。
2.如权利要求1所述的控件路径生成方法,其特征在于,所述采用辅助功能类获取当前界面的XML文件,包括以下步骤:
采用所述辅助功能类获取当前界面的根节点的节点信息;
基于所述根节点的节点信息,获取所述根节点对应的后代节点的节点信息;
基于所述根节点的节点信息和所述后代节点的节点信息,生成所述当前界面的XML文件。
3.如权利要求1所述的控件路径生成方法,其特征在于,所述基于所述触发控件节点的节点信息,在当前界面的XML文件中获取所述触发控件节点的祖先节点的节点信息,包括以下步骤:
将所述触发控件节点作为当前节点,判断所述当前节点是否是根节点;
若所述当前节点不是根节点,则基于所述当前节点的节点信息获取当前节点的父节点的节点信息,将所述父节点作为当前节点,并触发所述判断所述当前节点是否是根节点的步骤;
若所述当前节点为根节点,则不获取当前节点的父节点的节点信息。
4.如权利要求1所述的控件路径生成方法,其特征在于,所述基于所述触发控件节点的节点信息和所述祖先节点的节点信息,获取所述触发控件节点的xpath路径,包括以下步骤:
在所述当前界面的XML文件中获取唯一属性信息;
基于所述触发控件节点的唯一属性信息和所述祖先节点的唯一属性信息,获取所述触发控件节点的xpath绝对路径。
5.如权利要求4所述的控件路径生成方法,其特征在于,所述在当前界面的XML文件中获取唯一属性信息,包括以下步骤:
获取所述XML文件中的所有节点,作为目标节点,其中,每一目标节点包括至少一个目标节点信息,所述目标节点信息包括节点属性名和节点属性值;
基于所有目标节点的目标节点信息中的每一个相同的所述节点属性名,获取对应的所述节点属性值的类别数量;
判断是否存在所述节点属性值的类别数量等于所述目标节点的节点数量的所述节点属性名;
若存在所述节点属性值的类别数量等于所述目标节点的节点数量的所述节点属性名,则将对应的所述节点属性名存入待选属性信息中;
基于待选属性信息获取所述唯一属性信息。
6.如权利要求5所述的控件路径生成方法,其特征在于,在所述判断是否存在节点属性值的类别数量等于所述目标节点的节点数量的节点属性名的步骤之后,所述控件路径生成方法还包括以下步骤:
若不存在所述节点属性值的类别数量等于所述目标节点的节点数量的所述节点属性名,则获取所述节点属性值的类别数量最大的所述节点属性名,作为目标属性信息,并将所述目标属性信息存入待选属性信息中;
获取所述目标属性信息中存在重复节点属性值的节点,作为目标节点;
基于所有所述目标节点信息中的每一个相同的所述节点属性名,获取对应的所述节点属性值的类别数量;
判断是否存在所述节点属性值的类别数量等于所述目标节点的节点数量的所述节点属性名。
7.一种控件路径生成装置,其特征在于,包括:
控件触发请求获取模块,用于获取当前界面的控件触发请求,所述控件触发请求包括触发控件节点的节点信息;
XML文件获取模块,用于采用辅助功能类获取当前界面的XML文件;
祖先节点获取模块,用于基于所述触发控件节点的节点信息,在所述当前界面的XML文件中获取所述触发控件节点的祖先节点的节点信息;
xpath路径获取模块,用于基于所述触发控件节点的节点信息和所述祖先节点的节点信息,获取所述触发控件节点的xpath路径。
8.如权利要求7所述的控件路径生成装置,其特征在于,所述XML文件获取模块,包括:
根节点获取单元,用于采用辅助功能类获取当前界面的根节点的节点信息;
后代节点获取单元,用于基于所述根节点的节点信息,获取所述根节点对应的后代节点的节点信息;
XML文件生成单元,用于基于所述根节点的节点信息和所述后代节点的节点信息,生成所述当前界面的XML文件。
9.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至6任一项所述控件路径生成方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述控件路径生成方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810435861.0A CN108829471A (zh) | 2018-05-09 | 2018-05-09 | 控件路径生成方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810435861.0A CN108829471A (zh) | 2018-05-09 | 2018-05-09 | 控件路径生成方法、装置、计算机设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108829471A true CN108829471A (zh) | 2018-11-16 |
Family
ID=64148686
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810435861.0A Withdrawn CN108829471A (zh) | 2018-05-09 | 2018-05-09 | 控件路径生成方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108829471A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111001157A (zh) * | 2019-11-29 | 2020-04-14 | 腾讯科技(深圳)有限公司 | 引用信息的生成方法和装置、存储介质及电子装置 |
CN111443912A (zh) * | 2020-03-25 | 2020-07-24 | 平安医疗健康管理股份有限公司 | 基于组件的页面渲染方法、装置、计算机设备和存储介质 |
CN112559112A (zh) * | 2021-02-25 | 2021-03-26 | 智道网联科技(北京)有限公司 | 界面节点定位方法及装置 |
-
2018
- 2018-05-09 CN CN201810435861.0A patent/CN108829471A/zh not_active Withdrawn
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111001157A (zh) * | 2019-11-29 | 2020-04-14 | 腾讯科技(深圳)有限公司 | 引用信息的生成方法和装置、存储介质及电子装置 |
CN111001157B (zh) * | 2019-11-29 | 2021-09-28 | 腾讯科技(深圳)有限公司 | 引用信息的生成方法和装置、存储介质及电子装置 |
CN111443912A (zh) * | 2020-03-25 | 2020-07-24 | 平安医疗健康管理股份有限公司 | 基于组件的页面渲染方法、装置、计算机设备和存储介质 |
CN112559112A (zh) * | 2021-02-25 | 2021-03-26 | 智道网联科技(北京)有限公司 | 界面节点定位方法及装置 |
CN112559112B (zh) * | 2021-02-25 | 2021-05-14 | 智道网联科技(北京)有限公司 | 界面节点定位方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10901709B2 (en) | Partitioning based migration of systems to container and microservice based platforms | |
US8370808B2 (en) | Apparatus and a method for generating a test case | |
US7703027B2 (en) | Merging graphical programs | |
JP4100630B2 (ja) | Uml設計方法 | |
US8219969B2 (en) | Data structure used for directory structure navigation in a skeleton code creation tool | |
CN108829471A (zh) | 控件路径生成方法、装置、计算机设备及存储介质 | |
US20120166171A1 (en) | Modelling and simulation method | |
CN106294134A (zh) | 代码的崩溃定位方法及装置 | |
CN109189374A (zh) | 基于对象引用链的对象构造代码生成方法及系统 | |
CN113050953A (zh) | 基于注释生成代码的方法、装置及存储介质 | |
CN101901262A (zh) | 基于面向对象模型的企业建库和业务数据显示的方法 | |
US6453450B1 (en) | Timing diagram compiler and runtime environment for interactive generation of executable test programs for logic verification | |
CN108399086A (zh) | 一种微件管理方法、服务器和计算机可读存储介质 | |
US4829450A (en) | Reasoning machine | |
US9880925B1 (en) | Collecting structured program code output | |
CN103455417B (zh) | 一种基于马尔可夫模型的软件错误定位系统及错误定位方法 | |
CN112698819A (zh) | 面向树化对象编程程序设计方法、装置及存储介质 | |
CN108829391A (zh) | 一种Fragment中控件识别方法及系统 | |
JP5422589B2 (ja) | モジュール解析システム、モジュール解析方法及びモジュール解析プログラム | |
CN108334935B (zh) | 精简输入的深度学习神经网络方法、装置和机器人系统 | |
KR20050061358A (ko) | 네트워크 진단 방법, 네트워크 진단을 수행하는 코드를포함하는 컴퓨터 판독 가능 매체 및 시스템 | |
Singh et al. | Design and implementation of testing tool for code smell rectification using c-mean algorithm | |
CN110262963A (zh) | 基于句柄的功能测试方法、装置及终端设备 | |
US6377954B1 (en) | Object-oriented processing system and object-oriented case apparatus | |
CN117610505B (zh) | 一种基于标准模型的数据处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20181116 |
|
WW01 | Invention patent application withdrawn after publication |