自动化Web邮箱: Gmail、Hotmail和Yahoo Mail

背景

趋势科技的数据安全方案leakproof可以很好的防止企业敏感数据外泄,其中一个功能就是阻止敏感数据通过下面的邮箱发送出去。产品测试中,为了保证功能可靠性,测试工程师需要测试多个版本的邮箱,涵盖的浏览器有IE6IE7Firefox等,工作量比较大。所以我们希望通过自动化来减轻工作。

可能的方案

有很多流行商业或开源的工具可以用来做Web自动化测试。

对于IE,有QuickTestWati r(Ruby)Watij(Java)WatiN (.Net) Pamie (Python) 等。这些工具多数是通过包装IE文档对象模型(DOM)COM接口来操作IE的。

对于 Firefox,有使用Ruby语言的FireWatir它主要通过使用JSSHFirefox通讯的。JSSH是一个Firefox插件,它允许其他程序(例如telnet)与正在运行中的Firefox通过TCP/IP建立一个JavaScriptShell连接

对于网页元素分析,我们知道QuickTest  Wati-系列已经提供了录制功能,可以录制手工操作页面生成相应的脚本,但实际上这不是万能的。

我们想选一个免费的轻量的方案,这样可以比较容易在各种场景下定制,并且可以和趋势内部的工具集成。

经过详细分析,我们最后选择了PamieIE的自动化操作;对于Firefox,我们用Python自己写了一个库和FirefoxJSSh通讯,这个库通过包装JavaScript被设计成提供和Pamie一样功能和接口。

在这个轻量级的方案中,我们使用IE上的Web DeveloperFirefox自带的DOM查看器来分析网页,也就是查找网页HTML中的元素。这两个工具很方便使用。

Leakproof实践

我们用GmailYahoo Mail做为例子,来说明如何使用Pamie和包装后的JSSH来解决一些典型的IE/Firefox自动化的问题,这两个邮箱有点复杂,使用了大量的DHTML技术。

基本的HTML元素操作  登录Gmail

Gmail的登录页面很简单,包含了标准的命名编辑框和按钮。我们用工具查看他们的名字或者ID,然后使用轻量级库提供的方法来操作:

 

在实际测试中,我们会检查浏览器标题来确认是否真正的登录成功了:

if not “Gmail – 收件箱” in browser.getTitle():

         print “登录失败

跳转到含随机数的URL  进入Yahoo收件箱页面

一些页面的URL常常会因为包含了一个随机数而变化,这个随机数通常是用来做Session控制的。例如:登录Yahoo邮箱后,“欢迎页面”的URL是:

http://us.mc457.mail.yahoo.com/mc/welcome?.rand=599116116&da=0

同时“收件箱页面”的URL也包含这个随机数:

http://us.mc457.mail.yahoo.com/mc/showFolder?fid=Inbox&.rand=599116116&da=0

所以我们解析“欢迎页面”的URL提取出随机数,然后组合成真正的收件箱页面的URL,再跳转:

登录Yahoo邮箱后,停留在“欢迎页面”

rndNumber = parseRandNumber(browser.locationURL())

跳转到“收件箱页面”

browser.navigate(“http://us.mc457.mail.yahoo.com/mc/showFolder?fid=Inbox&.rand=%d&da=0”% rndNumber)

嵌套的IFRAME操作 -设置Gmail邮件的内容

Gmail里面使用了很多嵌套的IFRAME,网页代码也会随浏览器而变化。我们用工具查看IFRAME的层关系,然后通过轻量级的库直接在浏览器中执行JavaScript,来设置邮件主体为敏感的数据以便测试。

对于IE,还有另外一个方法:直接使用PamieIFRAME相关的函数来操作。

跳出对话框操作  Gmail添加附件

Web自动化中,我们常常要处理很多种浏览器弹出的对话框,例如:访问Https时跳出的“证书”对话框、上传文件时的“选择文件”对话框,登录未授权网站时的“输入用户密码”对话框等。

我们使用了Pamie自带的CPopupModule来处理,主要的原理就是创建一个线程监控可能的弹出对话框,然后采取特定操作。例如:在“选择文件”对话框中自动输入文件路径,或者在“证书”对话框中选择按钮“是”。

这里是一个在Gmail中添加附件的例子:

创建一个CpopupModule实例,用来在对话框中输入路径,再点击“打开“按钮

clickOpen = handlePopup('选择文件', ‘c:/敏感文件.pdf’, '打开')

clickOpen.start()   会创建一个线程,监视可能的对话框

browser.buttonClick("uploadfile") 点击按钮添加附件,会弹出一个“选择文件“对话框

clickOpen.join()

点击带随机名的按钮  发送Gmail邮件

Gmail基于IE7的创建邮件页面中,所有的按钮都是随机命名的。使用原来的方法点击已知名字或ID的按钮就不行了。这种情况下,我们会根据按钮的固定文本(这里是“Send“)在页面中搜索出这个按钮,然后再点击它。

页面文本验证 -检查收件箱

Web自动化中我们常常要验证页面的文本,来确认某一个步骤是否成功。在实践中,我们需要确认是否成功的将某一封邮件发送给了收件人,于是我们进入收件人邮箱的收件箱,检查是否收到了一封这样内容的邮件:

在收件人邮箱的收件箱

content = browser.bodyGetValue("outerText")

if “<预期的标题>” in content:

         print ‘邮件成功收到了!

对于其他类型的页面验证,我们会检查页面的标题或者某一个特定元素是不是存在来实现。

总结

这个轻量级的自动化方案比较灵活稳定,现在已经部署,Web邮箱部分的自动化率可以达到80%,有效的减少了测试工程师这一块的工作量。

来源:http://q.sohu.com/forum/5/topic/3592943

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值