51Testing软件测试论坛

标题: -----如何抓取指定页面上的特定文字------- [打印本页]

作者: zengli80    时间: 2012-7-31 11:44
标题: -----如何抓取指定页面上的特定文字-------
现在需要打开被测系统的每一个模块,然后判断该页面是否报错(就是搜索页面上是否有“错”字),若有报错则不关闭模块,没报错就关闭模块
[attach]80293[/attach]

1、用Src_text=TextUtil.GetText(0, 20, 20, 2000, 2000)  来截屏,可惜该方法与windons冲突,每次允许到该行代码就报错
2、用Set mydesc=description.Create()
        mydesc("html tag").value="B"
        mydesc("innertext").value=".*错.*"
        MyDesc("innertext").RegularExpression = true
        if Browser("CreationTime:=1").Page("index:=0").webelement(mydesc).Exist(0)  Then

因为每个模块都是以tab页的方式打开,若当前有个模块已打开,且搜索到指定文字,那么此后的模块即使没错也不会被关闭,因为总是会搜索到前面tab页面上有指定文字,如何才能只搜索当前tab页呢
作者: hsjzfling    时间: 2012-7-31 17:53
在Page和WebElement间再添加一层对象,用于标识tab页
作者: zengli80    时间: 2012-7-31 20:52
本来是要加在Page和WebElement间frame,但属性都一样,只能通过index来区分,问题是每个frame的index事先不知道,且无规律,不知还能有什么方法
作者: zengli80    时间: 2012-7-31 20:52
本帖最后由 zengli80 于 2012-7-31 20:57 编辑
在Page和WebElement间再添加一层对象,用于标识tab页
hsjzfling 发表于 2012-7-31 17:53


本来是要在Page和WebElement间加frame,但属性都一样,只能通过index来区分,问题是每个frame的index事先不知道,且无规律,不知还能有什么方法
作者: hsjzfling    时间: 2012-7-31 21:39
若很难找到一层可以区分的对象,可以用比较暴力点的方法


  1. Set mydesc=description.Create()
  2. mydesc("html tag").value="B"
  3. mydesc("innertext").value=".*错.*"
  4. MyDesc("innertext").RegularExpression = true
  5. If Browser("CreationTime:=1").Page("index:=0").webelement(mydesc).Exist(0)  Then
  6. On Error Resume Next
  7. Err.Clear
  8. Setting.WebPackage("ReplayType") = 2
  9. Browser("CreationTime:=1").Page("index:=0").webelement(mydesc).Click
  10. Setting.WebPackage("ReplayType") = 1
  11. If Err.Number = 0 Then
  12.   '"错"在当前可见页
  13. Else
  14.   '"错"不在当前可见页
  15. End If
  16. On Error GoTo 0
  17. '..............................
  18. Else
  19. '.............................
  20. End If
复制代码

该方法执行效率会偏低,可将全局同步等待时间改小些,并自行优化下逻辑提高效率
作者: zengli80    时间: 2012-8-1 00:00
若很难找到一层可以区分的对象,可以用比较暴力点的方法


该方法执行效率会偏低,可将全局同步等待时间 ...
hsjzfling 发表于 2012-7-31 21:39


按照你的方法,写了以下代码,总是在当前页可见,是怎么回事呢?

Browser("CreationTime:=0").Page("index:=0").link("text:=收件箱","index:=0").Click

Set mydesc=description.Create()
        mydesc("html tag").value="SPAN"
        mydesc("innertext").value="客服"
        MyDesc("innertext").RegularExpression = true
        If Browser("CreationTime:=0").Page("index:=0").webelement(mydesc).Exist(0)  Then
          On Error Resume Next
          Err.Clear
          Setting.WebPackage("ReplayType") = 2
          Browser("CreationTime:=0").Page("index:=0").webelement(mydesc).Click
          Setting.WebPackage("ReplayType") = 1

         If Err.Number = 0 Then

                msgbox "客服,在当前可见页"
          Else

                msgbox "客服,不在当前可见页"

          End If
End If
作者: 云层    时间: 2012-8-1 08:33
总觉得有点像拿自动化工具做性能测试的事情。试试楼上的方法吧,不过我还想知道你所谓的出错到底是个什么样子呢,否则怎么写对象描述
作者: hsjzfling    时间: 2012-8-1 10:12
加一个visible属性
mydesc("visible").value=True
如果在当前页,那就highlight看下在哪里
Browser("CreationTime:=0").Page("index:=0").webelement(mydesc).HightLight
作者: zengli80    时间: 2012-8-1 14:38
加一个visible属性
mydesc("visible").value=True
如果在当前页,那就highlight看下在哪里
Browser("Cre ...
hsjzfling 发表于 2012-8-1 10:12


我要找的文字不在当前页啊,但Err.Number 总是等于0

mydesc("visible").value=True
要加在什么位置啊?
作者: zengli80    时间: 2012-8-1 14:43
总觉得有点像拿自动化工具做性能测试的事情。试试楼上的方法吧,不过我还想知道你所谓的出错到底是个什么样 ...
云层 发表于 2012-8-1 08:33


因为被测系统有几百个模块,每次回归测试,想用自动化来测试有没有模块会报错,报错信息是固定的,会显示“操作出错!”这几个字,不知这个代码怎么写比较好呢?
楼上的方法试过了,但似乎没作用
作者: joykao    时间: 2012-8-1 14:49
你的page一直是index:=0不是代表一直是当前页吗?
作者: hsjzfling    时间: 2012-8-1 14:49
mydesc("html tag").value="B"
mydesc("innertext").value=".*错.*"
改成
mydesc("html tag").value="B"
mydesc("visible").value = True
mydesc("innertext").value=".*操作出错!.*"
作者: hsjzfling    时间: 2012-8-1 14:52
Highlight可以帮助你确认实际找到的和你预期的是否一致,不在当前页Highlight会定位在比较奇怪的位置上(高亮处不可见指定文本)
作者: zengli80    时间: 2012-8-1 15:19
mydesc("html tag").value="B"
mydesc("innertext").value=".*错.*"
改成
mydesc("html tag").value="B" ...
hsjzfling 发表于 2012-8-1 14:49


还是不行啊!是不是我代码问题
if Browser("CreationTime:=1").Page("index:=0").webelement(mydesc).Exist(0)  Then
         On Error Resume Next
          Err.Clear
          Setting.WebPackage("ReplayType") = 2
          Browser("CreationTime:=0").Page("index:=0").webelement(mydesc).Click
          Setting.WebPackage("ReplayType") = 1

         If Err.Number = 0 Then
                Browser("CreationTime:=0").Page("index:=0").webelement(mydesc).HightLight  '这句没高亮
                j=j+1
         end if
      else
            Browser("CreationTime:=0").Page("index:=0").image("index:="&j+1).Click  '关闭不报错的模块
end if
作者: zengli80    时间: 2012-8-1 15:23
你的page一直是index:=0不是代表一直是当前页吗?
joykao 发表于 2012-8-1 14:49


用SPY查看不同tab页的对象,都是属于一个page
作者: joykao    时间: 2012-8-2 09:02
本帖最后由 joykao 于 2012-8-2 09:06 编辑

回复 15# zengli80
就是说你的页面下用ajax做了几个tab 页是吧, 那就不应该是page对象了,应该是下一层的对象哇。。。能把整个页面截图上一张吗?包括你说的不同的TAB 页
作者: shingo0109    时间: 2012-8-2 09:54
LZ不是说Page和WebElement有Frame么, 那就循环找到某个tab进行判断, 有错误就关闭(如果LZ不care是哪个名字的tab的话), 不知能否达到LZ的要求
For i = 0 to 2    '(共3个tab)
   Browser().Page().Frame("xxx", "index:=" & i).Click
   If Browser().Page().Frame("xxx", "index:=" & i).WebElement(mydesc).Exist(0) Then
    '......
   End If
Next
作者: AntonioNikki    时间: 2012-8-2 14:27
楼上的貌似可行




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2