zengli80 发表于 2012-7-31 11:44:20

-----如何抓取指定页面上的特定文字-------

现在需要打开被测系统的每一个模块,然后判断该页面是否报错(就是搜索页面上是否有“错”字),若有报错则不关闭模块,没报错就关闭模块


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:22

在Page和WebElement间再添加一层对象,用于标识tab页

zengli80 发表于 2012-7-31 20:52:01

本来是要加在Page和WebElement间frame,但属性都一样,只能通过index来区分,问题是每个frame的index事先不知道,且无规律,不知还能有什么方法

zengli80 发表于 2012-7-31 20:52:25

本帖最后由 zengli80 于 2012-7-31 20:57 编辑

在Page和WebElement间再添加一层对象,用于标识tab页
hsjzfling 发表于 2012-7-31 17:53 http://bbs.51testing.com/images/common/back.gif

本来是要在Page和WebElement间加frame,但属性都一样,只能通过index来区分,问题是每个frame的index事先不知道,且无规律,不知还能有什么方法

hsjzfling 发表于 2012-7-31 21:39:49

若很难找到一层可以区分的对象,可以用比较暴力点的方法


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
On Error Resume Next
Err.Clear
Setting.WebPackage("ReplayType") = 2
Browser("CreationTime:=1").Page("index:=0").webelement(mydesc).Click
Setting.WebPackage("ReplayType") = 1
If Err.Number = 0 Then
'"错"在当前可见页
Else
'"错"不在当前可见页
End If
On Error GoTo 0
'..............................
Else
'.............................
End If

该方法执行效率会偏低,可将全局同步等待时间改小些,并自行优化下逻辑提高效率

zengli80 发表于 2012-8-1 00:00:40

若很难找到一层可以区分的对象,可以用比较暴力点的方法


该方法执行效率会偏低,可将全局同步等待时间 ...
hsjzfling 发表于 2012-7-31 21:39 http://bbs.51testing.com/images/common/back.gif

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

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:56

总觉得有点像拿自动化工具做性能测试的事情。试试楼上的方法吧,不过我还想知道你所谓的出错到底是个什么样子呢,否则怎么写对象描述

hsjzfling 发表于 2012-8-1 10:12:07

加一个visible属性
mydesc("visible").value=True
如果在当前页,那就highlight看下在哪里
Browser("CreationTime:=0").Page("index:=0").webelement(mydesc).HightLight

zengli80 发表于 2012-8-1 14:38:22

加一个visible属性
mydesc("visible").value=True
如果在当前页,那就highlight看下在哪里
Browser("Cre ...
hsjzfling 发表于 2012-8-1 10:12 http://bbs.51testing.com/images/common/back.gif

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

mydesc("visible").value=True
要加在什么位置啊?

zengli80 发表于 2012-8-1 14:43:09

总觉得有点像拿自动化工具做性能测试的事情。试试楼上的方法吧,不过我还想知道你所谓的出错到底是个什么样 ...
云层 发表于 2012-8-1 08:33 http://bbs.51testing.com/images/common/back.gif

因为被测系统有几百个模块,每次回归测试,想用自动化来测试有没有模块会报错,报错信息是固定的,会显示“操作出错!”这几个字,不知这个代码怎么写比较好呢?
楼上的方法试过了,但似乎没作用

joykao 发表于 2012-8-1 14:49:29

{:3_74:}你的page一直是index:=0不是代表一直是当前页吗?

hsjzfling 发表于 2012-8-1 14:49:56

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:38

Highlight可以帮助你确认实际找到的和你预期的是否一致,不在当前页Highlight会定位在比较奇怪的位置上(高亮处不可见指定文本)

zengli80 发表于 2012-8-1 15:19:33

mydesc("html tag").value="B"
mydesc("innertext").value=".*错.*"
改成
mydesc("html tag").value="B" ...
hsjzfling 发表于 2012-8-1 14:49 http://bbs.51testing.com/images/common/back.gif

还是不行啊!是不是我代码问题
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:53

你的page一直是index:=0不是代表一直是当前页吗?
joykao 发表于 2012-8-1 14:49 http://bbs.51testing.com/images/common/back.gif

用SPY查看不同tab页的对象,都是属于一个page

joykao 发表于 2012-8-2 09:02:56

本帖最后由 joykao 于 2012-8-2 09:06 编辑

回复 15# zengli80
就是说你的页面下用ajax做了几个tab 页是吧, 那就不应该是page对象了,应该是下一层的对象哇。。。能把整个页面截图上一张吗?包括你说的不同的TAB 页

shingo0109 发表于 2012-8-2 09:54:37

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:53

楼上的貌似可行
页: [1]
查看完整版本: -----如何抓取指定页面上的特定文字-------