问题一:ruby-oic8 gem包版本问题。
现象:使用ruby一键安装包,环境安装完毕,开始写ruby脚本,在脚本中调用操作数据库相关语句,使用ruby-oci8 gem包。语句:dbh = DBI.connect('DBI:OCI8:database','name', 'password')
调试运行后,报错:“Unable to load driver ‘oci8’(DBI:Interface Error)”
解决方法:
将ruby-oci8 gem包版本降低 由1.0.4降为1.0.3
1. 卸载gem包 gem unstill ruby-oci8
2. 安装1.0.3版本gem包 gem install ruby-oci8-1.0.3-XXXX
问题二:虚拟机无法登录CRM的问题
现象:登录CRM系统后,页面又自动跳转到淘宝的登录页面
原因:查看虚拟机上Internet选项—局域网设置—代理服务器。浏览器设置了使用代理服务器,导致无法访问内网。
解决方法:
方法1.将虚拟机设置为:不使用代理服务器
方法2.将后台CRM网址输入到不需要代理服务器列表(如图)
问题三:虚拟机中跑脚本时无法使用get_frame()函数的问题
现象:虚拟机中跑脚本遇到get_frame()语句,提示无法找到元素。
解决方法:
在internet选项—安全—受信任的站点设置中将测试页面网址加入到受信任站点。
问题四:iframe框跨域定位问题
现象:在网页中存在一个跨域的iframe元素,只能找到网址信息,无id、class等属性,且Frame框的子节点信息无法展开。参考地址:http://app.daily.taobao.net/subsc/pay_confirm.htm?subsc_id=9397&tadget_id=78132
分析:iframe框元素在本页中无法抓取,将frame框对应的网址取出,然后在新窗口中打开。
解决方法:
通过定位iframe框,并获取iframe框src属性,将网址信息提取。
element = @ie.locate_tagged_element("iframe","src",/pay.daily.taobao.net/)
url = element.getAttribute("src")
@ie.goto(url)
问题五:TD事务如何调用问题
现象:在脚本实现中部分脚本需要清楚缓存操作。若从页面上去实现调用TD事务的方法,会出现几个问题:1.成本高,需要多写页面的脚本。2.不稳定,若TD页面打开出现问题,将会使事务调用失败。
解决方法:
TD银行考虑周到,已经为ruby脚本预留了调用接口。脚本中可以直接调用接口函数。在common\interaction.rb中封装了一个函数,用来调用TD银行的接口。
invoke_tdbank(service,action,*params)。
举例:invoke_tdbank("TdUser","Cleancache","test101") #清楚用户缓存
具体方法参考:《最新ruby自动化脚本调用TD银行接口.docx》
问题六:数据库字段值与页面取值对比问题
现象:页面上取值和数据库字段取值后打印,显示相同的值,但是在脚本中比较两者的值时却显示为不相等。
分析:脚本中比较两者的值时,需要有相同的字符类型。char型和int型两者内容虽相同,但是类型不同,所以比较时,结果为不相等。
解决方法:将页面取值和数据库取值转化为相同类型。
例如:
#以下部分校验页面Appkey显示是否与数据库一致
dbh = DBI.connect('DBI:OCI8:Database','XXXX', 'XXXX')
rs = dbh.execute("select appkey from table where isv_id = '#{USER_ID1}' and title = '#{APPNAME}'")
appkey_db = rs.fetch[0]
appkey_db = appkey_db.to_i #获得数据库Appkey的值
dbh.commit
dbh.disconnect
@ie = @ie.div(:class,"box app-info-box")
@ie = @ie.li(:index,4)
appkey_page = @ie.span(:index,1).text.to_i #获得页面Appkey的值