【问题标题】:How to deal with changing page names?如何处理更改页面名称?
【发布时间】:2014-12-30 19:08:28
【问题描述】:

我是 QTP 和一般编程的新手,但我目前的任务是使用 QTP 9.2 为多页 Web 应用程序创建自动化测试。 我的脚本在早期构建期间运行良好,但现在似乎程序员已重命名了一些页面名称,因此脚本在执行期间超时,因为它无法在对象存储库中找到对象。

有没有更高效的使用QTP的方法,所以如果程序员更改页面标题等我不必做那么多返工?

谢谢... 国标


这行代码不再起作用,因为浏览器/页面的标题已从“REVIEW DOCS”更改为“REMOVE ALL DOCUMENTS”:

DAF=Browser("REVIEW_DOCS").Page("REVIEW_DOCS").Frame("main").WebElement("DAF").GetROProperty("innertext")

我知道至少有一个其他页面已更改,并且随着脚本的继续进行,可能还会遇到更多页面。

感谢您的帮助...

【问题讨论】:

    标签: qtp


    【解决方案1】:

    这取决于您对页面这个词的含义。

    如果你的意思是:

    网页

    可能未被识别的对象是Frame 测试对象。您应该到达未识别对象的地方并更新对象存储库中的Frame 的描述(您可以使用更通用的正则表达式)。如果您使用的是更高版本的 QTP 维护运行模式,这会变得更容易(但据我所知,它是在 QTP 9.2 之后引入的)。

    如果你的意思是:

    Page 测试对象

    默认情况下,Page 测试对象没有任何标识属性,它用于以逻辑方式对其他测试对象进行分组。这意味着您可以将测试对象从一个 Page 移动到另一个,并且它们应该能够继续成功运行。

    【讨论】:

    • +1 因为像往常一样 Motti 提出了真实但不明显的事实,例如 QTP 默认情况下不区分页面的事实。 (我要补充一点,QTP 甚至隐藏了页面和浏览器窗口之间的区别,因此即使浏览器配置为从不显示页面选项卡,您也可以对页面进行寻址。)
    【解决方案2】:

    如果您能够在对象存储库中添加页面对象。那么最好在页面对象的属性值中使用“正则表达式”。

    希望此链接对您有所帮助:-http://www.learnqtp.com/regular-expressions-regularized/

    【讨论】:

      【解决方案3】:

      处理此类问题的一种方法是将静态描述性编程应用于您的 QTP 脚本,而不是仅仅依赖对象存储库。在您的情况下,您可以对 title 属性使用内联 .* 正则表达式,并使用通用 Browser miccclass 属性来处理标题经常更改的页面对象:

      Set DAF = Browser("micclass:=Browser").Page("title:=.*").Frame("main").WebElement("DAF").GetROProperty("innertext")
      

      QTP 应该会找到您将变量“DAF”设置为的 RO 属性,而不管页面标题如何。

      【讨论】:

        【解决方案4】:

        您需要进入 Object Repository 并展开 Browser REVIEW_DOCS 和 Page REVIEW_DOCS 以更新页面对象以引用新名称。

        【讨论】: