这里总结了几个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()这样的函数出现。

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

下面的语句就是弹框时选择Cancel。

_expectConfirm("/question/", false);

更多相关API请戳这里。

全局运行速度设置

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

#Time (in milliseconds) delay between steps
script.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



异常关闭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。

关于访问不了网页官方网站还有详细说明,可自行查看。地址

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

  1. 利用iframe下载文件

    a链接下载文件有一个弊端就是假如用户账号被顶替,后台会返回token失效,由于a链接是个页面跳转链接,点击下载的时候后台的错误信息会直接展示在页面上,没办法拿到处理,这是一个巨大的bug,用ifram ...

  2. 前端超链接下载文件和iframe下载文件

    超链接下载文件就是用a标签下载文件 非常简单 下面是封装的一个下载的组件的代码,仅供参考 <template><aref="link":href="ur ...

  3. python 下载文件 登录信息-Python爬虫 登录网页后下载图片,怎么保持登录状态?...

    在python2中使用Cookielib库进行处理,而在python3中用Cookiejar进行处理 我用的是python3 在代码头部引入模块 import http.cookiejar #创建Co ...

  4. php 下载文件提示框,解决nginx打开php文件总是显示下载框的问题 | 学步园

    进入目录/etc/nginx/sites-available sudo vim default 把以下代码端前的#去掉 location ~ \.php$ { #       fastcgi_spli ...

  5. 前端下载文件的几种方式

    前端下载文件的几种方式 前言 1. window.open 2. window.location.href 3. a标签 4. iframe 5. blob 前言 总结下载文件的几种方式,文件都是通过 ...

  6. Windows 8中IE10无法下载文件的解决方法

    从Windows 7以升级的方式安装Windows 8后,发现使用IE10出现无法下载文件的问题.点击网页的中下载链接IE10没有任何反应. 然后单击界面右上角的"工具"--&qu ...

  7. Servlet下载文件迅雷不支持问题真相之一

    问题描述 最近在做一个下载文件的Servlet,直接使用浏览器的下载功能,完美支持,结果测试人员使用迅雷下载,就不行了,下载也能成功完成,只是迅雷下载的文件大小是悲催的0KB 真相搜罗 网上有很多帖子 ...

  8. Extjs利用iframe无弹窗导出下载文件

    看过很多导出下载的方式,大都是弹出新窗口下载,我倒是一直用iframe来模拟加载新窗口,从而达到下载文件的目的. 下面是最近用extjs时,也是用到的iframe来模拟无弹窗下载 if(exportF ...

  9. TP超链接无法下载问题解决 hrome浏览器默认禁止iframe嵌套页面下载文件

    var urlshow="{:U('Grant/download')}&grt_id="+row['grt_id']; let link = document.create ...

最新文章

  1. linux 文件查找命令集:find,locate,wheres,which,type
  2. Java编程的逻辑 (39) - 剖析LinkedList
  3. Leetcode 143. 重排链表
  4. python读取 pcd 数据 三种方法
  5. Lfie has sweet
  6. java中想要保留2位小数_java使double保留两位小数的多方法 java保留两位小数
  7. 轮播图高度自适应_干货!弘成教你写轮播图全自动适应封装代码
  8. 13.3.4 蓝牙程序案例: 蓝牙串口调试助手
  9. 实验室设备管理系统的设计与实现程序设计与实现
  10. 泰尔指数r语言_EG指数:从繁琐到简单
  11. 华硕固件默认ip,不能进入路由的管理后台了?千万别慌张
  12. 股票期货盈亏比的计算,胜率与盈亏比的关系
  13. 室内定位技术研发简介
  14. 如何将平时的生活收支记录打印出来
  15. 计算机组装大赛主题,DIY装机大赛策划书
  16. 转正答辩未通过是否可以辞退试用期员工
  17. allure报告中去掉allure.title中自动拼接的参数
  18. 研大考研不是骗子:考研政治时事之破除国企岗位
  19. CSS——引入阿里字体图标步骤
  20. 梦想实现_实现梦想的软件工程工作需要什么

热门文章

  1. 2023年信息与通信工程国际会议(JCICE 2023)
  2. A股复利,ASKING封神心路
  3. 你迷茫的原因在于读书太少而想的太多!!!
  4. 电脑突然连不上网(DNS无法解析)、360wifi可以连接但有访问权限无法上网的解决办法
  5. 一个高铁线杆杆号自动识别分类系统
  6. 什么是GNSS模拟器及其应用?
  7. 计算机开启telnet服务,Win7系统telnet服务怎么开启?Win7电脑开启telnet服务的方法...
  8. Spring Cloud、Spring Cloud Alibaba、Spring Boot版本对应关系
  9. python sleep和wait,sleep和wait的区别
  10. html dtd定义,DTD 简介