QTP如何往富文本编辑框中赋值(163邮箱录制)

上一篇 / 下一篇  2009-09-23 22:36:19 / 个人分类:QTP

http://bbs.51testing.com/thread-159131-1-36.html

从上面这个帖子看到了以下这篇文章,觉得很有收获,于是申请了163邮箱进行了实验,于是在此做个记录。
【转】http://www.51testing.com/html/74/n-108374.html
该文作者: 假装不在 来源: 51Testing博客

QTP识别不了对象时候,就不负责任的丢了一个"WebElement"给大家。比如163邮箱当要在邮件正文输入文本:
Browser("网易电子邮箱 - 极速3.0正式版").Page("网易电子邮箱 - 极速3.0正式版").Frame("HtmlEditor").WebElement("WebElement").set "山寨"——但实际上你却什么也做不了,因为并不存在这个set的方法。

WebElement的主要方法包括了 Check,Click,FireEvent,GetROProperty,GetTOProperties,GetTOProperty,Output,SetTOProperty,Submit,WaitProperty 等等。很明显就是因为WebElement在对其它对象方法的支持先天不足才会让用户对它会如此的恐惧与厌恶。

如何把它“山寨”

  这个问题在先前的51testing上,大家的解决方法是通过Sendkeys方法去解决这个问题,虽然问题是解决了,但是会让人觉得这不是我们真的想要的,毕竟这是“低级录制”才走的路线。

  1)WebElement的“后面”是什么?

    你会发现在对象库里面有2个WebElement类型的对象,但他们却是有区别的。他们的节点分别是Body(指定文档主体的开始和结束)与 Div(指定渲染 HTML 的容器)。而我们分别查看这2个对象的innerhtml,分别是 “<DIV><BR><BR></DIV>”,“<BR><BR>”(回车)。而我们可以猜测出第2个WebElement是第1个元素节点里面,也就是在Body节点里面。

    2)我们不能如此“野蛮”

  先让大家看看下面的“山寨”代码,这是对第一个WebElement也就是Body节点的元素做操作。

  browser("网易电子邮箱 - 极速3.0正式版").Page("网易电子邮箱 - 极速3.0正式版").Frame("HtmlEditor").WebElement("WebElement").Object.document.write "野蛮的山寨"

  但是,脚本运行完后,我们却没办法对这个文本框再进一步做手工上输入操作。而对Div节点的元素做的操作也是无效的。这样就让我们没能做到可持续的,或者已经是修改了后台节点的关系,有可能会导致信件或者是控件的无法提交(在某些项目中会出现这样的问题,需要慎用!)

   今天在另一篇帖子得到如下启发,可以用Object.innerText, 这样的话,之后还是可以修改的。
   http://bbs.51testing.com/thread-45142-1-6.html 7#
   http://bbs.51testing.com/thread-42574-1-1.html

   Browser("网易电子邮箱 - 极速3.0正式版").Page("网易电子邮箱 - 极速3.0正式版").Frame("HtmlEditor").WebElement("WebElement").Object.innerText = "abc"

  3)“文明”的写入

  在写这个方法之前,大家可以先查查,究竟Div节点上,它有自己的什么功能或者方法可以提供给我们用。

  大家看看下面的代码,这个是对第2个WebElement,Div做的操作。

  browser("网易电子邮箱 - 极速3.0正式版").Page("网易电子邮箱 - 极速3.0正式版").Frame("HtmlEditor").WebElement("WebElement_2").Object.insertAdjacentText"beforeBegin"," 山寨在beforeBegin"  运行完这个语句后,我们发现,原来的文本域,我们还是可以继续手动输入其它信息。

    这里我有个问题,一会儿去bbs上问问,到底insertAdjacentText算什么方法?vbs的?怎么判断什么时候该用这些方法?

    4)在这里,我查了下insertAdjacentText的用法,这里有个蛮好的例子,可以试验一下,会比较直观:
   http://www.mts.net/~tfriesen/dhtml/examples/insertAdjacentText.html

这里标签就是font,font.insertAdjacentText "beforeBegin"就是在font标签的前面加上一段文字,这时候假如原本的font标签里的文字是加粗的格式,新加的就不会加粗,除非用了afterBegin,表示把新加的文字加到font的开始标签之后。
<font id=font1 style="background-color:pink;font-weight:600;">Insert Text Using The Form. Below</font>

font.insertAdjacentText(pop[pop.selectedIndex].text,text.value);

    5)总结:总之,做完这个方法后,你可以发现,其实它可以把很多其它Web元素所具备的功能,也拖进WebElement里面,但需要读者去细心发现与研究。在这里我们只是实现了一个类似ebedit.set的功能,我们也可以定义出一个WebElement.set 的方法。

  


TAG: QTP qtp WebElement

kerryliyan的个人空间 引用 删除 kerryliyan   /   2014-05-21 17:37:17
如果没有frame的情况下呢?
喵喵_测丫测的个人空间 引用 删除 shilinjie_8952   /   2011-07-08 13:46:21
有收获,谢谢分享
 

评分:0

我来说两句

我的栏目

日历

« 2024-04-27  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 27003
  • 日志数: 30
  • 建立时间: 2009-09-19
  • 更新时间: 2012-09-02

RSS订阅

Open Toolbar