51Testing软件测试论坛

标题: &字符号在描述性变成中怎样替换? [打印本页]

作者: jackymail    时间: 2007-12-10 12:32
标题: &字符号在描述性变成中怎样替换?
如果遇到&符号怎么处理呢?不能把&替换成&"&"&,因为在replace函数里面无法表达,最起码我不知道。
谁有成熟的办法说出来,谢谢,会的提供建议,不会的看就好了,不必写一些空洞的指导性意见。
NodeName=SuperString(32,ForbiString)
NodeName= processRegEx(NodeName)
Browser("b").Page("p").Frame("f").WebElement("innertext:="&NodeName,"innerhtml:="&NodeName).click
Public Function processRegEx(regString)
   speChar=Array("\","$","(",")","*","+","-","[","]","?",".","^","{","}","|")
   For each sChar in speChar
       regString=Replace(regString,sChar,"\"&sChar)
   Next
   processRegEx=regString
End Function
Public Function SuperString(strLen,ForbiString)
   For i=1 to strLen
                Randomize
        tmpString=Chr(int(Rnd*(127-32))+32)
                For each Forbi in ForbiString
                        If Forbi =tmpString Then
                                tmpString="n"
                        End If
                Next
        SuperString=SuperString&tmpString
        Next
End Function
作者: yzem99    时间: 2007-12-10 12:43
如果遇到&符号怎么处理呢?不能把&替换成&"&"&,因为在replace函数里面无法表达,最起码我不知道。
看不懂你提的问题??

&这个是连接符,“&”这是字符。你的问题在哪呢?
连接符&可以用+来替代。

[ 本帖最后由 yzem99 于 2007-12-10 12:45 编辑 ]
作者: jackymail    时间: 2007-12-10 13:11
原帖由 yzem99 于 2007-12-10 12:43 发表
如果遇到&符号怎么处理呢?不能把&替换成&"&"&,因为在replace函数里面无法表达,最起码我不知道。
看不懂你提的问题??

&这个是连接符,“&”这是字符。你的问题在哪呢?
连接符&可以用+来替代。


在superstring会生成32个字符长度的字符串,在这个字符串中如果包含"&"字符,在描述性编程那句话里面就不能够正确引用,因为&字符号把描述属性截断成了2截。
比如*(&^%$#这样的字符串就会被理解成在&之前的部分与&之后的部分是连接的关系,而不能正确识别&成为一个字符。说清楚了吗?

我现在用Replace(Str,"&",".")把&替换成了.
作者: yzem99    时间: 2007-12-10 13:28
我刚试了。
1.先创建一个名为4&&.txt的文件
MsgBox Window("Text:=4&&.txt - Notepad").Exist(0)
这个结果是true
说明字符“&”还是被识别成字符而不是连接符。

同样如下也是通过的
str = "&&"
MsgBox Window("Text:=4"&str&".txt - Notepad").Exist(0)
所以对于字符“&”在描述性语言里并不需要特殊的处理。
作者: jackymail    时间: 2007-12-10 13:40
原帖由 yzem99 于 2007-12-10 13:28 发表
我刚试了。
1.先创建一个名为4&&.txt的文件
MsgBox Window("Text:=4&&.txt - Notepad").Exist(0)
这个结果是true
说明字符“&”还是被识别成字符而不是连接符。

同样如下也是通过的
str = "&&"
MsgBox ...



哦,谢谢提供信息,那或许就是其他字符出了问题。我继续排查以后再来更新。

目前是这样,仍然有问题

Public Function processRegEx(regString)
   speChar=Array("\","$","(","*","+","[","?",".","^","{","|","}",")","]",":","&")
   processRegEx=Replace(processRegEx,chr(34),".",1,-1)
   For each sChar in speChar
       regString=Replace(regString,sChar,".",1,-1)
   Next
        processRegEx=regString
End Function
作者: yzem99    时间: 2007-12-10 13:56
你能告诉我你写这些函数的目的是什么吗?
把随机产生的字符串里的特殊字符转变成"."吗?

[ 本帖最后由 yzem99 于 2007-12-10 14:36 编辑 ]
作者: gy21st    时间: 2007-12-10 14:26
不太明白什么意思,但在字符串里 把&替换成&"&"&是没有问题的。
作者: jackymail    时间: 2007-12-10 14:36
逻辑是这样地,声称一组任意字符组成的字符串,然后把这些字符串作为一个软件中"新建组"的名称。通过递归和平行的方式,分别测试最大深度和最多数量的组是否能正确的创建。

在做递归创建的时候,每次新创建一个组就要用原来的组作为根,就是基于上一次新创建的组创建一个子 组。这样就需要点击一下父类的组。父类的组名称每次都要变化,所以采用描述性编程,描述性编程支持正则表达式,所以要把特殊字符替换掉,否则就无法识别对象了,替换成".","."这个字符表示任意字符,或许还有: &这类符号也需要替换。保证每一次能找到根“组“的名字。 现在按照我的做法仍然有某些字符会出错,我相信一班人看了我的那段代码应该明白我的意图,如果我写了上面的文字还不明白的话就算了吧。谢谢了。
作者: jackymail    时间: 2007-12-10 14:38
原帖由 gy21st 于 2007-12-10 14:26 发表
不太明白什么意思,但在字符串里 把&替换成&"&"&是没有问题的。


直接写是没有问题,可是作为函数的参数呢?
Replace ( strString,"&",????)怎么写?
我后来查到可以用chr(34)来表示。

可是现在的问题是有一些特殊字符我还没有找到。&的处理已经不重要了。谢谢。
作者: yzem99    时间: 2007-12-10 14:42
标题:   
   

[ 本帖最后由 yzem99 于 2007-12-10 14:46 编辑 ]
作者: jackymail    时间: 2007-12-10 14:48
原帖由 yzem99 于 2007-12-10 14:42 发表
费解啊,既然你最终用的组名并没有那些特殊字符,又何必费那周张去装变呢。
直接产生一个随机的不代特殊字符的字符串不就可以了嘛。


最终得组名当然用到了那些字符串阿,替换只是在click根组之前才发生的,下一次创建组的之前又重新升成了新的32位字符串。
我也知道声称 aa1 aa2这样的字符串好操作。可是我要尽量全面地使用32位随机字符

现在就是遇到了这个问题,不过意义也不太大,没有经历过就不要讨论了,浪费时间。。。意义不太大。谢谢关注。
作者: yzem99    时间: 2007-12-10 15:02
提供个方法给你,不需要列出所有的特殊字符。
通过对没个字符的ACII码大小比较,我觉得这些特殊字符应该在一定的范围内。然后用?去替代。正则表达式的?可以表示任意的字符,这样就可以匹配你那个随机产生的字符串了。
最后提个建议: 问问题要虚心点!!

[ 本帖最后由 yzem99 于 2007-12-10 15:10 编辑 ]
作者: jackymail    时间: 2007-12-10 15:11
原帖由 yzem99 于 2007-12-10 15:02 发表
提供个方法给你,不需要列出所有的特殊字符。
通过对没个字符的ACII码大小比较,我觉得这些特殊字符应该在一定的范围内。然后用?去替代。正则表达式的?可以表示任意的字符,这样就可以匹配你那个随机产生的字 ...


没有不虚心阿,你是不是教育我呢?为什么要教育我呢?不明白的人当然不要来指导了,现在论坛里面铺天盖地都是空洞得如何如何,有多少是自己都不会去瞎指挥的呢。。一直不想说罢了,只是不想那样的话出现在我的帖子上,所以才提醒一下。

你帮我了就帮了,也说谢谢了,你就不要再来教育我一下好不好?

为了配合你提供思路,我用了多少文字?你自己看看我写的函数也能看出来个大概,我那么配合你你怎么还能教育我呢?对不对?、

你说的最后的话题就是要有一个类似ischaracter的函数。 QTP本身是一个非常简单的东西,你考虑到的我也都考虑到了。所以不必要教育,谁都有一时难住的时候,正确的理解问题才最重要。到此打住把,有话给我发纸条,最好不要回了。
作者: gy21st    时间: 2007-12-10 15:52
明白你的意思了。这个是QTP帮助里抄下来的。应该可以对你有帮助。processRegEx函数可以不要了。

RegularExpression Property
Description
Indicates whether the value of a Property object in the Properties collection is a regular expression.

Note: By default, the value of all Property objects added to a Properties collection are treated as regular expressions. Use the RegularExpression property to change this setting for a specific Property object in the collection.

Syntax
PropertiesColl(Property).RegularExpression = BooleanSetting
作者: jackymail    时间: 2007-12-11 10:06
desc("innertext").value=NodeName
desc("innerhtml").value=NodeName
desc("innertext").RegularExpression=False
desc("innerhtml").RegularExpression=False
Browser("b").Page("p").Frame("f").WebElement(desc).click

这样处理以后仍然有一些字符造成无法识别对象,比如@[#&7I@u3Uzn4!ZklirWJW/GFcjo`.J=这个字符串。目前还没查出原因,算了,不做了。我已经绕道了,对于递归的我自用a-z的字符集就没有问题了。

谢谢楼上所有人。

[ 本帖最后由 jackymail 于 2007-12-11 10:07 编辑 ]




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