图 3. 在 RFT 中的存储形式:图上部的树型结构,图下部的属性列表。
Object map 中被映射的对象使用被存储的、静态的、识别属性和对象层次来识别,因此利用 Object Map 中存储的对象将能很好的判断对象所在页面是否完整。
利用 RFT 录制功能,将响应页面的一个对象添加到 Object Map,RFT 会自动为该对象生成查找方法。例如,我们可以针对具体页面上(能明显区别开响应页面与其他页面的)的特定页面元素进行识别。在实际测试运行当中,如果该对象能被找到,即证明该页面已经加载完毕。例如,针对页面中的一个按钮 button_XXXbutton(),其返回值为 GuiTestObject 对象,利用 GuiTestObject 的 waitForExistence() 方法会阻塞当前脚本的执行,直到该对象被找到。
RFT 针对该方法提供了两种接口:
button_XXXbutton().waitForExistence(); 和 button_XXXbutton().waitForExistence(double max_time, double wait_time);
这两个接口的区别在于 .waitForExistence() 利用在 RFT 中设置的时间来执行,而 waitForExistence(double max_time, double wait_time); 利用在运行时指定的时间来执行。
1, button_XXXbutton().waitForExistence();
该方法的具体阻塞时间可以通过在 RFT 中设定的一个全局变量来控制。步骤为:选择菜单 WindowPreferencesFunctional TestPlay back 中设置 Maximum time to attempt to find Test Object 的值,其单位为秒,如图所示。脚本中所有 waitForExistence()方法将默认阻塞所设时间。
图 4. 默认阻塞所设时间
2,button_XXXbutton().waitForExistence(180, 1);
通过该方法可以在运行时动态设置阻塞时间,并将覆盖默认值。
采用 Object Map 是 RFT 最基本,最全面支持的方法,它和 RFT 强大的录制回放功能进行了无缝的集成,下面给出了他的一些优缺点。
优点:利用 Object Map 来查找对象,RFT 将完全匹配对象的属性和树状结构,所以该方法能很准确的匹配到相应页面元素,同时也能很准确的判断整个页面是否下载完毕。
缺点:该方法由于依赖于 Object Map, 向 Object Map 中录入对象需要手工来实现,而且针对不同的页面都需要重新录制一个对象,所以不可避免的存在静态识别的重用性问题。对于每个不同的页面,我们都要抓取一个对象到 Object Map 中,这样在不同页面中很难做到重用,而且如果页面结构发生变化还会带来维护成本高的问题。
文章来源于领测软件测试网 https://www.ltesting.net/