Selenium 1.x時代已經遠去,它理應躺在歷史的角落里,靠着壁爐烤着火,抽着旱煙,在裊裊的升起的青煙中回憶那曾經屬於自己的美好時代。
不過事實卻並非如此,現今原本早應退役的selenium 1.x卻還是多數人堅定的選擇,究其原因不過是1.x時代遺留下了大量的文檔,代碼,教程讓人們誤以為1.x還是這個年代的主流,還應該光鮮亮麗在前台演出屬於它的美好。長江后浪推前浪,最為前浪的selenium 1.x的宿命應該是死在沙灘上。
好了,直入主題,由於開源社區不再維護selenium 1.x再加之更為先進的selenium 2.0確實有不少優勢之初可以完全取代1.x,在這里筆者會花一些筆墨,若干篇幅,爭取深入淺出的講解selenium 2.0的一些基本知識,常用方法和高級擴展,但由於筆者水平和時間精力等確實有限,文中應該避免不了謬誤和臆斷之處,還望眾位讀者多多海涵。
本文中所以代碼和示例均由Ruby/Python/Java編寫,本文介紹的webdriver api也主要是ruby/python/java binding。所以首先請確保ruby/python/java語言在開發環境上正確安裝。
教程的第一節從selenium 2.0和webdriver關系說起。
Selenium 2.0 和webdriver之間有什么關系,有什么不可告人的秘密?說來話長,但也簡單。Selenium 2.0其實就是webdriver。就像張飛就是張翼德,關羽就是關雲長一樣,叫法不同但內容卻是一樣的。
安裝ruby/python/java
- ruby的話安裝ruby1.8.7以上的版本。注意selenium-webdriver只支持1.8.7以上的ruby版本;
- python的話請安裝python2.x,本文寫作時webdriver尚不支持python3;
- java的話請安裝jdk5以上的版本;
安裝selenium-webdriver
ruby 安裝selenium-webdriver
打開命令行,輸入下列代碼完成安裝。注意,如果你的開發環境需要http proxy的話,請注意在gem命令中加入–http_proxy參數;
gem install selenium-webdriver [--http_proxy]
在命令行中輸入gem list
,如果selenium-webdriver正確安裝,則其應該出現在結果列表里。在本文寫作時,selenium webdriver的最新版本應該是2.32.1;
gem list selenium-webdriver
更具體的細節請參考這里
python 安裝selenium-webdriver
參見這里
java 安裝selenium-webdriver
略
安裝chrome
本文使用chrome作為測試瀏覽器進行講解,所以請確保開發環境上正確安裝了chrome。由於chrome版本更新較快,我們只需要選擇1個穩定版本安裝既可,本文中筆者使用的版本是chrome 23.0.1271.95, chrome driver的版本是26.0.1383.0;由於driver的版本高於chrome的版本,所以筆者在交互式環境中啟動chrome出有報錯信息,但只要chrome能啟動就好,報錯信息可以忽略。
安裝chrome driver和ie driver
參見這里
簡單的baidu test
下面我們寫幾行代碼在初次感受一下webdriver的魅力,好吧,說老實話原生的selenium webdriver並沒有什么獨特的魅力,相反到是watir-webdriver更加的平易近人老少咸宜。這個不是文本討論的范疇,暫且打住。
# ruby 代碼 require 'rubygems' # for ruby187 only require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome driver.get "http://www.baidu.com" sleep 3 driver.find_element(:id, 'kw').send_keys "Hello WebDriver!" driver.find_element(:id, 'su').click puts driver.title driver.quit
# python 代碼 from time import sleep from selenium import webdriver driver = webdriver.Chrome() driver.get('http://www.baidu.com') sleep(3) driver.find_element_by_id('kw').send_keys('Hello WebDriver!') driver.find_element_by_id('su').click() print driver.title driver.quit()
// java代碼 // 文件BaiduTest.java import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class BaiduTest { public static void main(String[] args) { // TODO Auto-generated method stub WebDriver driver = new ChromeDriver(); driver.get("http://www.baidu.com"); driver.findElement(By.id("kw")).sendKeys("Hello Webdriver!"); driver.findElement(By.id("su")).click(); System.out.println(driver.getTitle()); driver.quit(); } }
如果一切順利的話,這幾行代碼將會打開chrome瀏覽器,然后轉跳到baidu首頁。等待3秒后在搜索框中輸入Hello WebDriver並提交搜索結果至后台。然后在命令行打印出當前頁面的title,並關閉chrome瀏覽器。
如果你的代碼不能順利運行,請從如下幾個方面進行檢查。
ruby 版本
- ruby的版本是否是1.8.7以上並正確安裝;
- 是否正確安裝了Selenium WebDriver;
- 代碼輸入是否有誤;
- chrome driver是否正確安裝;
- chrome版本與chrome driver版本是否適配,從理論上說,兩者版本號 基本 相同就可以了;
python 版本
- python的版本是否是2.x並正確安裝;
- 是否正確安裝了Selenium WebDriver;
- 代碼輸入是否有誤;
- chrome driver是否正確安裝;
- chrome版本與chrome driver版本是否適配,從理論上說,兩者版本號 基本 相同就可以了;
java 版本
- 是否安裝了jdk,注意不是jre;
- 是否正確引入了jar包,一般來說你需要引入selenium-java-VERSION.jar以及selenium-server-standalone-VERSION.jar
- 是否正確安裝了Selenium WebDriver;
- chrome driver是否正確安裝;
- chrome版本與chrome driver版本是否適配,從理論上說,兩者版本號 基本 相同就可以了;
- 代碼輸入是否有誤;
Selenium-WebDriver ruby/python/java binding的安裝實際上非常的簡單和快速,稍微有點ruby/pyton/java基礎的讀者應該能夠順利的自行完成。
下一節將介紹webdriver的啟動和關閉,歡迎繼續關注。