51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 6028|回复: 21
打印 上一主题 下一主题

[原创] 一旦在运行的时候重新打开一个浏览器, 就不能识别对象

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-4-25 19:16:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一旦在运行的时候重新打开一个浏览器, 就不能识别对象
情况是这样的:
   在运行的时候, 如果重新打开一个浏览器, 那么对象就无法识别。
同样的, 在录制的时候, 如果重新打开浏览器, 会重新录制出对象。
Browser("Browser").FlexApplication("**").FlexTextArea("userIDTextInput")
Browser("Browser").FlexApplication("***").FlexTextArea("passwordTextInput").Input "123456"
Browser("Browser").FlexApplication("***").FlexButton("Login").Click
Browser("Browser").Close

Browser("Browser_2").FlexApplication("****").FlexTextArea("userIDTextInput")
Browser("Browser_2").FlexApplication("****").FlexTextArea("passwordTextInput").Input "123456"

这该如何处理呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    2#
    发表于 2008-4-25 23:12:11 | 只看该作者
    “重新打开一个浏览器, 那么对象就无法识别”是什么意思? QTP报告什么错误?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2008-4-26 03:01:26 | 只看该作者

    原因1:你录制时候,不是基于QTP自己去打开对象的情况,哪么你再次运行时候,可能对象就没办法识别。
    原因2:运行脚本时候,也不是基于QTP脚本打开,也就是初始化IE不是通过QTP。

    处理方法1,个人觉得,一般都是直接通过QTP去启动IE好点。
            2,添加多点对象识别的标示。
         ***3,自己分析下是那个对象识别不出来,可以通过简单的对象拆分,去分析。例如:
    Browser("Browser").FlexApplication("**").FlexTextArea("userIDTextInput")
    就可以拆出三个,
    Browser("Browser").动作
    Browser("Browser").FlexApplication("**").动作
    Browser("Browser").FlexApplication("**").FlexTextArea("userIDTextInput")

    三个,看看是那一步出现了错误来判断对象识别到那个程度,然后对症下药。添加对象标示都可以。

    可能有些地方说错了,大家指点下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
    发表于 2008-4-26 11:21:10 | 只看该作者
    我猜他的意思是,在运行脚本的时候,本来有一个浏览器,结果,点击那一个链接之后,是用一个新的浏览器打开的,也就是有两个浏览器对象,这样QTP可能就识别不出了,因为有两个浏览器,而且你如果在事先并没有把第二个浏览器打开的对象,捕捉成跟第一个不一样的(对象存储库中),识别就很困难了.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
     楼主| 发表于 2008-4-26 20:30:42 | 只看该作者
    谢谢各位楼上。是重新打开一个新的浏览器, 不是用qtp自己打开的,我尝试了一下。估计原因是对象没有加载好。所以无法识别;
    我作如下尝试:在打开一个网页后等待20秒, 就能够识别;
    还有就是如果用qtp打开就没有问题。但是还是不知道是什么原因。只知道是这样
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
     楼主| 发表于 2008-4-27 12:04:11 | 只看该作者
    谢谢楼上各位!
    回答 walker1020:我在打开浏览器等待其加在成功时, 用了Browser("Browser").waitproperty "visual", true, 100000
    结果报错:无法找到Browser("Browser")对象。

    我按照 假装不在 同志的方法, 的确, 如果通过QTP初始化I浏览器, 没有问题的,但是我只知道在录制或运行开始的时候才能用通过QTP初始化I浏览器, 如果我想在在运行中途打开,怎么设置qtp呢?

    还有两个方法也以解决这个问题:
    1. 在打开浏览器后, 等待20秒以上, 就不会出现这个问题。 但是就怕有的时候时间不够用牙。
    2. 本人在msdn上找到了一个文章, 《如何检测如果应用程序已停止响应》。各位帮我看看是不是能用到这个问题上。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
     楼主| 发表于 2008-4-27 12:54:46 | 只看该作者
    谢谢各位; 我初步推断出,这个问题的原因可能是由于我开了两个浏览器:IE 和FireFox,所以有两个浏览器对象。无法识别。我用描述性编程已经 弄好了。
    脚本如下,请大家指正:
    Function LoginInitial( )
       Dim objEx
       Reporter.Filter = rfDisableAll
       objEx = Browser("version:=internet explorer 6").Exist(1)
            If  objEx = false Then
                strComputer = "."
                    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
                    Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process where name='IEXPLORE.EXE' "  )
                    If colProcessList.count<>0 Then
                                    For Each objItem in  colProcessList
                                                    objItem.terminate()
                                    Next                  
                                    Call OpenIE()
                                    else
                                    Call OpenIE()
                    End If
            End If
    Reporter.Filter = rfEnableAll

    End Function

    Function OpenIE ()
       set IE = CreateObject("InternetExplorer.Application")
       IE.Visible = true
       StartURL = "http://192.168.2.119:8080/timetracker/public/TimeTracker.html"
       IE.Navigate StartURL
       msgbox Browser("version:=internet explorer 6").Exist(1)
       Browser("version:=internet explorer 6").WaitProperty "visual", true, 10000
       ''msgbox Browser("Browser").Exist(1)
       ''wait(25)
    End Function
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2008-4-27 22:34:53 | 只看该作者
    需要那么麻烦么。。。连wmi都搬出来了~~

    实际上那段用wmi的代码完全可以用Systemutil.CloseProcessByName "iexplore.exe" 来代替。。。后面直接跟上OpenIE()就完了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    9#
    发表于 2008-4-28 23:15:28 | 只看该作者
    不是很理解,你为什么要开两个浏览器:IE 和FireFox。 是测试要求吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    10#
    发表于 2008-4-28 23:16:28 | 只看该作者
    我也测试过多个系统的多个环境,但从来没有说是同时要测试两个浏览器:IE 和FireFox。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
     楼主| 发表于 2008-5-1 15:27:23 | 只看该作者
    哈哈, 情况是这样的, 在录制脚本的时候, 录制的是IE的浏览器。 但是打开firefox作其他的事情,比如搜索某个问题的解决办法。 所以才会出现这个问题。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2008-5-3 09:41:26 | 只看该作者
    录制QTP脚本时计算机环境要干净的~
    如果你要一边录制一边做其他事情,我的办法是开一个Vmware,QTP的事情都在VMware里解决,其他事情切出来做,这样就不会影响了。

    另外load page时候如果要让对象全部加载好,好像是用
    Browser().Page().Sync
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    13#
    发表于 2008-5-4 00:02:24 | 只看该作者
    原帖由 getfly 于 2008-5-1 15:27 发表
    哈哈, 情况是这样的, 在录制脚本的时候, 录制的是IE的浏览器。 但是打开firefox作其他的事情,比如搜索某个问题的解决办法。 所以才会出现这个问题。


    I couldn't agree with you any more.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    14#
    发表于 2008-5-4 00:04:23 | 只看该作者
    测试机的环境一定要干净。如果你那么去进行测试,如果发现某个功能在 Forefox无法正常使用,那么你能确定是 应用程序有问题,还是你的测试过程有问题?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    15#
    发表于 2008-5-4 00:08:03 | 只看该作者
    原帖由 getfly 于 2008-5-1 15:27 发表
    哈哈, 情况是这样的, 在录制脚本的时候, 录制的是IE的浏览器。 但是打开firefox作其他的事情,比如搜索某个问题的解决办法。 所以才会出现这个问题。


    如果照你这样进行测试,那么要么是你们的测试用例有问题(如果你是严格按照测试用例来执行的),要么是 你的测试不规范。如果要测试应用程序在IE 6.0环境下是否所有的功能都正常,那么所有的测试都会在 IE 6.0 环境下进行。这对于IE7.0 和 Firefox 同意适合。我还没有见到你这样进行测试的。话有点尖锐,但测试的原则就是如此
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    16#
    发表于 2008-5-4 00:09:59 | 只看该作者
    说深刻一点,你这是在违规操作! 如果发生了什么事故,一切后果由你负责了。如果你这样进行测试,那是无效测试,是在做无用功。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
     楼主| 发表于 2008-5-4 14:44:42 | 只看该作者
    哈哈,谢谢楼上。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2008-5-5 01:03:40 | 只看该作者
    1 在打开浏览器后, 等待20秒以上, 就不会出现这个问题。 但是就怕有的时候时间不够用牙?

    这个问题可以用

    err.clear
    on error resume next
    do
    Browser("Browser").FlexApplication("**").FlexTextArea("userIDTextInput")
    loop util err.number = 0

    类似这样循环执行
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2008-5-5 09:39:15 | 只看该作者
    原帖由 walker1020 于 2008-5-4 00:04 发表
    测试机的环境一定要干净。如果你那么去进行测试,如果发现某个功能在 Forefox无法正常使用,那么你能确定是 应用程序有问题,还是你的测试过程有问题?


    不懂是啥意思~我说的测试机环境干净的意思是让测试结果不会因为本机的其他原因而受到干扰,比如说LZ在用IE测试的时候开了Firefox,这就明显是干扰了,找不到对象那是当然的。
    至于如果某个功能在Firefox不能正常使用,首先我会去确认需求是否要求使用IE或者使用FF或者两者都需要,如果使用Firefox是需要的,那么如果某个功能测试下来在FF无法正常使用,那它就是BUG,这跟测试过程有什么关系?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
     楼主| 发表于 2008-5-5 13:48:58 | 只看该作者
    18楼厉害, 谢谢!没有想到vb的这个错误处理还能这么用,哈哈。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-9 00:30 , Processed in 0.091900 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表