uft 12.5能否支持测试开放两个浏览器?我想用多个会话运行测试
答案 0 :(得分:2)
好的,所以你想要在两个独立的浏览器窗口/页面/标签中打开完全相同的页面...
通常情况下,我非常支持使用Object Repository而不是描述性编程,但这是一种情况,其中描述性编程确实是处理它的最佳方式。
首先,我想解释一下定义Web对象的方法。
1)Browser对象不描述浏览器(IE,firefox,chrome)......而是Browser对象描述了Web站点。例如,我可能在OR中定义了一个浏览器对象,用于" Stackoverflow.Com"以及为" Amazon.Com"定义的单独浏览器对象。我通常将URL作为标识属性之一包含在内,但是我使用正则表达式来允许URL在页面之间进行更改,并且仍然允许相同的浏览器对象将该站点中的任何页面标识为站点本身。
2)页面对象描述了网站在任何给定时刻显示的任何特定页面。 (我知道很多人只是通配了页面,因为浏览器对象一次只能有一个页面子对象,但在我的OR结构中没有意义......)在大多数情况下,任何网站都可以可以说是由各种页面组成,每个页面都可以通过某种方式进行唯一标识(通常是通过URL的后半部分)。我使用正则表达式来挑选网站的页面部分 - 无论哪个部分从未对该页面进行更改 - 这样每个页面对象都将在加载该页面时唯一标识。
3)生活在特定页面上的所有控件都存储在它们所属的页面下。
我更喜欢始终使用Object Repository来存储我的对象描述。我唯一一次使用描述性编程就是我无法硬编码我在一行代码中引用的预定义对象。所以,调整这个策略来满足您的需求,我们将使用Descriptive Programming查看Browser对象。 (理论上,我们仍然可以使用对象存储库来执行此操作,但我觉得它以一种不能代表实际情况的方式扭曲OR)
所以...使用普通代码,您可以使用SystemUtil.Run URL
(其中URL是包含您网页的网址的var)启动您的网页两次。
然后,您可以检查第一页是否以与此类似的方式存在:
if Browser("openurl:=.*stackoverflow\.com.*","index:=0").Page("title:=Stack Overflow").Exist then...
然后检查第二页是否与此类似:
if Browser("openurl:=.*stackoverflow\.com.*","index:=1").Page("title:=Stack Overflow").Exist then...
请注意,唯一的区别是索引号是0或1.这应该能够单独唯一地标识每个窗口,只要您在浏览器中包含索引,就可以对任何窗口执行任何操作&# 39;描述 - 即使页面完全相同。
另请注意......如果浏览器是同一浏览器窗口中的两个选项卡,或者它们是两个单独的窗口,每个窗口都包含一个选项卡,则无关紧要。就QTP / UFT而言,如果打开多个浏览器选项卡,每个选项卡与描述Browser("openurl:=.*stackoverflow\.com.*")
匹配,则它使用索引(或创建时间)属性来区分它们。实际上,您可以在一个窗口中使用两个选项卡运行测试,然后手动将一个选项卡拖到其自己的窗口中并再次运行它仍然可以工作。哎呀,如果你打开了其他标签,那就不重要了(也就是说你可以打开一个Amazon.Com页面,它仍然可以找到你的页面并忽略亚马逊页面。
如果您需要更多信息,请与我们联系。