Sahi 使用技巧4-iframe、下载文件、模态框、访问不了网页的处理

来源:互联网 发布:萤石云ddns设备域名 编辑:程序博客网 时间:2024/05/18 00:42

这里总结了几个Sahi使用中可能经常遇到的问题

frame、iframe的处理

在selenium里面,跨frame或者iframe是需要用switchto这样的方法进入frame或者iframe,才能获取到在frame或者iframe里面的元素,如果要回来则还要跳回来。。。而在Sahi完全不用考虑跨frame和iframe的问题。


session隔离的妙用

我们知道,一个浏览器的多个页面是共享session,一旦登录一个账号,之前登录的账号就会被替代。而通过Sahi的dashboard打开的浏览器,session是隔离的。也就是说可以通过Sahi用不同的账号登录同一个被测网站,这对我们测试不同角色账户的权限操作、交易统计等会大有益处,再也不用频繁的登录注销了。


如何进行浏览器类型配置

Sahi可以通过配置来支持对不同的浏览器代理。
增加或修改浏览器类型设置
在浏览器类型里给出了一些浏览器的默认配置,可根据实际浏览器安装路径配置路径,配置的路径(path)一定要正确,否则在dashboard里不会显示对应浏览器的图标。配置文件里的 options的值最好不要修改,否则可能会出一些问题。


页面下载的文件被拦截

在使用Sahi的时候,会发现当页面有下载文件的链接,想要下载什么文件的时候,页面闪了一下就没有了,仿佛什么都没有发生,根本无法选择下载的路径。其实这是被Sahi拦截了,Sahi为了回放的方便自动下载文件到了sahi/userdata/temp/download路径下了。这个时候如果你想操作下载的文件,可以通过三个API去处理。
_lastDownloadFileName() 可以返回最后一个下载的文件名。
_saveDownloadAs($path) 可以允许你将下载的文件另存为指定的路径
_clearLastDownloadedFileName() 清除最后下载的文件名
如果页面的本意不是下载而是获取文档并显示在页面,却又被Sahi给拦截了。那么可以在 sahi/userdata/config/download_urls.txt 的配置文件里增加下载的链接来屏蔽Sahi的拦截。比如下载链接是http://www.sahitest.com/demo/testsaveas.pdf ,则可以在配置文件里添加该路径。路径的编写也支持正则表达式。
下载文件路径规避
如果不想拦截所有某一种文件格式的文件,可以在 download_contenttypes.txt 配置文件里删除对应的文件格式。比如不想拦截PDF格式的文件,可以删除 application/pdf 这个来达到效果。
下载文件类型规避
详细说明,可查看官网:

JavaScript模态框的处理

录制脚本的时候可能会遇到页面弹出模态框。比如说是confirm弹框,发现录制后的脚本会出现_expectConfirm()这样的函数出现。
模态框_expectConfirm()
而回放的时候看不到模态框弹出就执行下一步了。这是因为Sahi认为这些弹框会影响自动化的执行,所以屏蔽了。但是Sahi又提供了相关的API来控制这些弹框的执行走向。比如说confirm框,Sahi默认选择OK(确定),想要弹框时选择Cancel(取消)的话,可以用_expectConfirm()方法来控制。
confirm框
下面的语句就是弹框时选择Cancel。

_expectConfirm("/question/", false);

更多相关API请戳这里。

全局运行速度设置

Sahi里面是可以修改回放时的速度。有时候回放时为了查清脚本执行失败的原因,太快会看不清楚,可以减慢回放的速度,如果觉得回放执行时间太长,则可以加快速度。默认配置是每一步间隔100ms。可以在安装路径下的config文件下的sahi.properties里修改配置,修改后重启Sahi生效。

#Time (in milliseconds) delay between stepsscript.time_between_steps=100

录制脚本模式java和sahi

由于Sahi支持java和JavaScript,脚本录制也提供了两种方式,可以修改成java的controller。默认是使用Sahi的controller。这个也可以在安装路径下的config文件下的sahi.properties里修改配置,修改后重启Sahi生效。

# Specifies the controller to be used# Takes java, ruby and sahi as valid values; default is sahi# Set this to java for recorder in java mode.controller.mode=sahi

sahiController
java的Controller


异常关闭Sahi后导致浏览器访问不了网页

使用Sahi有时候会遇到,Sahi关闭后,无法通过浏览器访问网络了。试了不同的浏览器也访问不了网络。原因是因为Sahi异常关闭,Sahi代理设置没有回滚导致的。我们知道,Sahi需要修改系统或者浏览器的代理设置才能注入Sahi的脚本到浏览器,以便Sahi进行录制和回放的功能。这也是Sahi为什么不用像Selenium那样下载那么多浏览器对应的webdriver的原因:通过对不同浏览器进行代理,注入JavaScript的脚本来操作浏览器行为。 这是Sahi的优势,同样也造就了Sahi会出现没有成功回滚代理设置而导致无法上网的问题。
如果通过Sahi的dashboard打开的是Firefox或者Chrome浏览器,不会产生上述的问题,因为这时候打开的这两种浏览器是使用隔离的配置文件。也就是说,这时候在Sahi外打开Firefox、Chrome、IE这些浏览器,不会通过Sahi的代理。
然而通过Sahi的dashboard打开的IE浏览器,是修改了系统的代理服务器,所有依赖系统代理的浏览器,访问网络的时候都会经过Sahi的代理。
如果这时候关闭了sahi启动时打开的命令窗口,而不是先关闭所有的IE浏览器,再关闭Sahi的dashboard,则会导致上述问题的发生。这两个操作正是回滚系统代理设置的环节。
错误的关闭方法
解决的办法也很简单,就是打开Sahi后,通过Sahi dashboard打开IE浏览器,然后关闭IE浏览器,再关闭Sahi dashboard。
正常操作和回滚操作
关于访问不了网页官方网站还有详细说明,可自行查看。地址

0 0