一、介紹
sahi 運行爲一個代理服務器,並通過注入 JavaScript 來訪問 Web 頁面中的元素。
http://www.ibm.com/developerworks/cn/web/1403_yangxb_sahi/index.html
官網:http://sahipro.com/docs/using-sahi/quick-tutorial.html
二、環境搭建
1. 安裝jdk http://jingyan.baidu.com/album/6dad5075d1dc40a123e36ea3.html?picindex=1
http://javax2000.blog.sohu.com/82015086.html
jvm 安裝配置以及工作原理 這個上面關於jdk,jvm的解釋說明挺好的,mark
JDK需要安裝5或6,
之前裝的不是這個版本,裝netbeans6.9 無法打開,會停在“正在裝入緩存”, 然後就消失什麼都沒有了,安裝netbeans6.5時提示的“在此計算機中找不到
Java SE Development Kit (JDK),需要 JDK 6 或 JDK 5 才能安裝 NetBeans IDE。請確保正確安裝了 JDK,然後重新運行安裝程序。“
2. 安裝sahi
服務端
: http://sourceforge.net/projects/sahi/?source=directory 下載安裝就好
客戶端:
gem install sahi文件
gem install win32-process文件
3. 搭建ruby環境
http://wenku.baidu.com/link?url=nC563YUrqI39vBVqQeC33Jt6WuK7TS0sPWkxxpaZQHNdgOJY1-95fqVLv5xe5oM0ofEBbXdid6EnCvwgd7bH3sbBMoYqEOGrLBcf_PY6JUa
4. 編譯器 netbeans
注netbeans 7 以上不支持ruby
我安裝的是netbeans6.9.1
三、示例
<span style="font-size:18px;">require 'rubygems'
require 'test/unit'
require "sahi"
class SahiDriverTest < Test::Unit::TestCase # Test::Unit::TestCase ruby 單元測試框架
def setup
@browser = init_browser()
@browser.open
end
def teardown
if @browser
@browser.close
end
end
def init_browser()
@@browser_path = "C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe"
@@browser_option = "-noframemerging"
return Sahi::Browser.new(@@browser_path,@@browser_option)
end
def test_baidu()
@browser.navigate_to("http://www.baidu.com")
@browser.textbox("kw").value = "haha"
@browser.submit("su").click
end
end</span>
四、運行上述示例,guid報錯, 解決方法如下
http://blog.csdn.net/elvis_gao/article/details/8588209
五、修改sahi方法
要求clib.js 與 elementStub.rb中名稱一致
## clib.js與elementStub.rb中_clickpath名稱相對應,修改clib.js代碼後需要重啓sahi才起作用
## clib.js
Sahi.prototype._checkpath = function(el,Litem) {
try {
last_el = _sahi._expand(el,Litem);
return true;
}
catch(e) {
return false;
}
};
## elementStub.rb 注:treeview爲自己封裝的控件
treeview.rb
def checkpath(path)
return @browser.fetch("_sahi._checkpath(#{@treeview.to_s()}, #{Utils.quoted(path)})")
end
## 調用
p @browser.treeview("MainDeptTree").checkpath("單位名稱/工作總結05/北京分公司")