Selenium IDE的 N個替代方案
這篇文章主要解決一個問題 — Selenium IDE 是否有地替代方案?
Selenium 3 與 FireFox 的版本更新之後造成 Selenium IDE無法繼續使用
長久停留在舊版本的 Firefox 也不是辦法
因此是否有類似 Selenium IDE 可以達到
- 不用寫程式就可以完成自動化測試
- 可以將操作的步驟轉成Python 或 Java 的程式碼
- 必要時還可以修改相關的操作步驟
- 可以執行 Firefox 與 Chrome
筆者推薦n個方案
- 一個是開源 Robort Framework 可以彈性擴充做 Web UI 測試也可以結合Appium進行手機自動化測試, 還可以進行接口測試
- 另外一個是傻瓜版 Silk WebDriver 同樣是免費, 缺點是使用時候需要連上網路才可以使用
- SideeX http://sideex.org/
- Katalon Recorder (Selenium IDE for Chrome)
- Selenium IDE for Chrome
這篇文章主要介紹的是第二種傻瓜版的方案 Silk WebDriver操作與下載方式
工具下載 https://build.microfocuscloud.com/download?product=silkwebdriver,
使用前需要有一個登入帳號(可以免費創見) https://build.microfocuscloud.com/registration?product=webdriver
安裝完之後啟動並且登入
1. 錄製一個新的操作
選擇要啟動的瀏覽器 > 目標網址 www.baidu.com > OK
2. 操作功能介面說明
啟動瀏覽器到了指定網頁之後
可以看到右邊的工作區 Silk WebDriver
針對網頁上的搜尋點選右鍵(下圖1) 可以進一步選擇我們需要的操作
下圖2: 可以選擇操作
下圖3: 選擇要驗證的動作
3. 驗證網頁元件
如何驗證網頁元件呢?
只需要在 “百度一下”的按鈕按下右鍵
點選右下角的圖片符號 (下圖中2)
驗證屬性
出現驗證屬性視窗之後, 進一步選擇要驗證的方式
例如:我們想要驗證該按鈕文字是否為 “百度一下”
輸入 Test
接著我們到搜尋文字框按右鍵, 輸入 test
驗證搜尋結果
同樣方式, 在搜尋結果的文字連結上按下右鍵 > 圖片驗證 > 選擇 ‘test_百度翻譯’
完成錄製
產生Python程式碼
透過上方的語言選擇 > 右上角的儲存
儲存錄製腳本
錄製的腳本儲存可以透過工作區最下面的停止儲存
儲存的附檔名為SWD
該文件可以用一般的編輯器進行修改
備註:儲存檔案按鈕按下時, 視窗反映出現的時間會有一點久, 耐心等待下
產生的腳本, 附檔名為SWD
[pastacode lang=”python” manual=”%7B%0A%20%20%22version%22%20%3A%201%2C%0A%20%20%22language%22%20%3A%20%22Python%22%2C%0A%20%20%22framework%22%20%3A%20%22unittest%22%2C%0A%20%20%22browser%22%20%3A%20%22Chrome%22%2C%0A%20%20%22connectionString%22%20%3A%20%22%22%2C%0A%20%20%22actions%22%20%3A%20%5B%20%7B%0A%20%20%20%20%22commonClass%22%20%3A%20%22WebDriver%22%2C%0A%20%20%20%20%22actionName%22%20%3A%20%22Get%22%2C%0A%20%20%20%20%22parameters%22%20%3A%20%7B%0A%20%20%20%20%20%20%22url%22%20%3A%20%22http%3A%2F%2Fwww.baidu.com%22%0A%20%20%20%20%7D%2C%0A%20%20%20%20%22locatorInfos%22%20%3A%20%5B%20%5D%0A%20%20%7D%2C%20%7B%0A%20%20%20%20%22commonClass%22%20%3A%20%22WebElement%22%2C%0A%20%20%20%20%22actionName%22%20%3A%20%22Verification%22%2C%0A%20%20%20%20%22parameters%22%20%3A%20%5B%20%7B%0A%20%20%20%20%20%20%22name%22%20%3A%20%22defaultValue%22%2C%0A%20%20%20%20%20%20%22commonDataType%22%20%3A%20%22string%22%2C%0A%20%20%20%20%20%20%22isOptional%22%20%3A%20true%2C%0A%20%20%20%20%20%20%22defaultValue%22%20%3A%20%22%5C%22%5C%22%22%2C%0A%20%20%20%20%20%20%22value%22%20%3A%20%22%5C%22%E7%99%BE%E5%BA%A6%E4%B8%80%E4%B8%8B%5C%22%22%0A%20%20%20%20%7D%20%5D%2C%0A%20%20%20%20%22locatorInfos%22%20%3A%20%5B%20%7B%0A%20%20%20%20%20%20%22className%22%20%3A%20%22WebElement%22%2C%0A%20%20%20%20%20%20%22isDirectChild%22%20%3A%20false%2C%0A%20%20%20%20%20%20%22attributes%22%20%3A%20%7B%0A%20%20%20%20%20%20%20%20%22id%22%20%3A%20%22su%22%2C%0A%20%20%20%20%20%20%20%20%22className%22%20%3A%20%22s_btn%22%2C%0A%20%20%20%20%20%20%20%20%22xpath%22%20%3A%20%22%2F%2Finput%5B%40id%3D%5C%22su%5C%22%5D%22%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%20%5D%0A%20%20%7D%2C%20%7B%0A%20%20%20%20%22commonClass%22%20%3A%20%22WebElement%22%2C%0A%20%20%20%20%22actionName%22%20%3A%20%22SendKeys%22%2C%0A%20%20%20%20%22parameters%22%20%3A%20%7B%0A%20%20%20%20%20%20%22keys%22%20%3A%20%22test%22%0A%20%20%20%20%7D%2C%0A%20%20%20%20%22locatorInfos%22%20%3A%20%5B%20%7B%0A%20%20%20%20%20%20%22className%22%20%3A%20%22WebElement%22%2C%0A%20%20%20%20%20%20%22isDirectChild%22%20%3A%20false%2C%0A%20%20%20%20%20%20%22attributes%22%20%3A%20%7B%0A%20%20%20%20%20%20%20%20%22id%22%20%3A%20%22kw%22%2C%0A%20%20%20%20%20%20%20%20%22name%22%20%3A%20%22wd%22%2C%0A%20%20%20%20%20%20%20%20%22className%22%20%3A%20%22s_ipt%22%2C%0A%20%20%20%20%20%20%20%20%22xpath%22%20%3A%20%22%2F%2Finput%5B%40id%3D%5C%22kw%5C%22%5D%22%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%20%5D%0A%20%20%7D%2C%20%7B%0A%20%20%20%20%22commonClass%22%20%3A%20%22WebElement%22%2C%0A%20%20%20%20%22actionName%22%20%3A%20%22Verification%22%2C%0A%20%20%20%20%22parameters%22%20%3A%20%5B%20%7B%0A%20%20%20%20%20%20%22name%22%20%3A%20%22Text%22%2C%0A%20%20%20%20%20%20%22commonDataType%22%20%3A%20%22string%22%2C%0A%20%20%20%20%20%20%22isOptional%22%20%3A%20true%2C%0A%20%20%20%20%20%20%22defaultValue%22%20%3A%20%22%5C%22%5C%22%22%2C%0A%20%20%20%20%20%20%22value%22%20%3A%20%22%5C%22test_%E7%99%BE%E5%BA%A6%E7%BF%BB%E8%AF%91%5C%22%22%0A%20%20%20%20%7D%20%5D%2C%0A%20%20%20%20%22locatorInfos%22%20%3A%20%5B%20%7B%0A%20%20%20%20%20%20%22className%22%20%3A%20%22WebElement%22%2C%0A%20%20%20%20%20%20%22isDirectChild%22%20%3A%20false%2C%0A%20%20%20%20%20%20%22attributes%22%20%3A%20%7B%0A%20%20%20%20%20%20%20%20%22linkText%22%20%3A%20%22test_%E7%99%BE%E5%BA%A6%E7%BF%BB%E8%AF%91%22%2C%0A%20%20%20%20%20%20%20%20%22xpath%22%20%3A%20%22%2F%2Fa%5Btext()%3D%5C%22_%E7%99%BE%E5%BA%A6%E7%BF%BB%E8%AF%91%5C%22%5D%22%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%20%5D%0A%20%20%7D%20%5D%0A%7D” message=”” highlight=”” provider=”manual”/]
自動產生的Python
[pastacode lang=”python” manual=”%23%20coding%3Dutf-8%0Aimport%20unittest%0Afrom%20unittest%20import%20TestCase%0Afrom%20selenium%20import%20webdriver%0A%0A%0Aclass%20Baidu%20Search(TestCase)%3A%0A%0A%20%20%20%20driver%20%3D%20None%0A%0A%20%20%20%20def%20setUp(self)%3A%0A%20%20%20%20%20%20%20%20driver_path%20%3D%20%22chromedriver.exe%22%0A%20%20%20%20%20%20%20%20%23%20Add%20the%20driver%20directory%20%22D%3A%5CChrome%5C2.34%22%20to%20the%20PATH%20environment%20variable%20on%20your%20machine%0A%20%20%20%20%20%20%20%20%23%20OR%20uncomment%20the%20following%20line%3A%0A%20%20%20%20%20%20%20%20%23%20driver_path%20%3D%20%22D%3A%5C%5CSilk%20WebDriver%5C%5Cng%5C%5CWebDriversSWD%5C%5CWindows%5C%5CChrome%5C%5C2.34%5C%5Cchromedriver.exe%22%0A%20%20%20%20%20%20%20%20self.driver%20%3D%20webdriver.Chrome(executable_path%3Ddriver_path)%0A%20%20%20%20%20%20%20%20self.driver.implicitly_wait(5)%0A%0A%20%20%20%20def%20test_my_test_case_name(self)%3A%0A%20%20%20%20%20%20%20%20self.driver.get(%22http%3A%2F%2Fwww.baidu.com%22)%0A%20%20%20%20%20%20%20%20su%20%3D%20self.driver.find_element_by_id(%22su%22)%0A%20%20%20%20%20%20%20%20self.assertEqual(su.get_attribute(%22defaultValue%22)%2C%20%22%E7%99%BE%E5%BA%A6%E4%B8%80%E4%B8%8B%22)%0A%20%20%20%20%20%20%20%20self.driver.find_element_by_id(%22kw%22).send_keys(%22test%22)%0A%20%20%20%20%20%20%20%20test%20%3D%20self.driver.find_element_by_link_text(%22test_%E7%99%BE%E5%BA%A6%E7%BF%BB%E8%AF%91%22)%0A%20%20%20%20%20%20%20%20self.assertEqual(test.text%2C%20%22test_%E7%99%BE%E5%BA%A6%E7%BF%BB%E8%AF%91%22)%0A%0A%20%20%20%20def%20tearDown(self)%3A%0A%20%20%20%20%20%20%20%20if%20self.driver%20is%20not%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20self.driver.quit()%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20unittest.main()%0A” message=”” highlight=”” provider=”manual”/]