上一講我們介紹了如何部署selenium 2.0的開發環境,這一講我們將介紹如何使用selenium提供給我們的接口進行瀏覽器的簡單操作。
本文將先介紹適合初級用戶的一些常用方法,然后將對一些高級用法和實現源碼進行稍微深入一些的分析。
如何打開一個測試瀏覽器
做自動化測試一般情況下我們都需要首先打開測試瀏覽器,瀏覽器開啟后我們方可”命令”瀏覽器去打開新頁面,點擊特定的鏈接,判斷具體的邏輯等等。因此該操作為”萬里長征的第一步”,必須給以重視。具體代碼如下。需要注意的是如果使用chrome進行測試,那么必須下載安裝chrome driver,如果是ie的話,目前必須下載ie driver,另外還需要注意ie的保護模式設置。具體細節參考這里。
require 'rubygems' # for ruby 187 only require 'selenium-webdriver' # 打開firefox dr = Selenium::WebDriver.for :firefox #dr = Selenium::WebDriver.for :ff dr.quit # 打開ie dr = Selenium::WebDriver.for :ie dr.quit #dr = Selenium::WebDriver.for :internet_explorer # 打開chrome dr = Selenium::WebDriver.for :chrome dr.quit
from selenium import webdriver driver = webdriver.Firefox() driver.quit() driver = webdriver.Chrome() driver.quit() driver = webdriver.Ie() driver.quit()
// 文件OpenBrowser.java import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.ie.InternetExplorerDriver; public class OpenBrowser { public static void main(String[] args) { WebDriver driver = new ChromeDriver(); driver.quit(); # 設置firefox的安裝路徑 System.setProperty("webdriver.firefox.bin","D:\\Program Files\\Mozilla Firefox\\firefox.exe"); WebDriver driver2 = new FirefoxDriver(); driver2.quit(); WebDriver driver3 = new InternetExplorerDriver(); driver3.quit(); } }
如何訪問1個具體的url
打開瀏覽器后我們需要轉到我們的測試站點,也就是要訪問1個url。下面的代碼可以達成這個目的。
require 'rubygems' # for ruby 187 only require 'selenium-webdriver' dr = Selenium::WebDriver.for :chrome # 使用get方法 dr.get 'http://www.baidu.com' dr.quit()
from time import sleep from selenium import webdriver driver = webdriver.Chrome() driver.get('http://www.baidu.com') driver.quit()
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class OpenBrowser { public static void main(String[] args) { WebDriver driver = new ChromeDriver(); driver.get("http://www.baidu.com"); driver.quit(); } }
如何關閉瀏覽器
測試結束后往往需要關閉瀏覽器,可以使用driver.quit()或者是driver.close()方法。
這兩個方法的異同點是:
- quit可以關閉driver打開的所有瀏覽器窗口,而close只是關閉當前窗口;
- quit可以關閉與driver的連接,而close依然保留連接。如果你不能理解這個的話,你可以這樣簡單的認為quit的話會關閉掉driver,而close的不會。因此你使用close關閉了瀏覽器后,在某些情況下你可以看到仍然存在chromedriver或者iedriverserver進程。
如何返回當前頁面的url
這個功能的典型應用場景是:點擊一個鏈接,這時候瀏覽器跳轉到新的頁面。測試人員需要判斷新頁面的url以檢查這個鏈接的跳轉是否正確。
下面的代碼演示了在百度首頁點擊"百科"這個鏈接,跳轉到百度百科頁面后判斷該頁面的url是否正確
# encoding: utf-8 require 'rubygems' # for ruby 187 only require 'selenium-webdriver' dr = Selenium::WebDriver.for :chrome url = 'http://www.baidu.com' dr.get url dr.find_element(link_text: '百科').click puts 'correct' if dr.current_url == 'http://baike.baidu.com/'
# -*- coding: utf-8 -*- from selenium import webdriver driver = webdriver.Chrome() driver.get('http://www.baidu.com') driver.find_element_by_link_text('百科').click() if driver.current_url == 'http://baike.baidu.com/': print 'correct' driver.quit()
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class OpenBrowser { public static void main(String[] args) { WebDriver driver = new ChromeDriver(); driver.get("http://www.baidu.com"); driver.findElement(By.linkText("百科")).click(); System.out.println(driver.getCurrentUrl()); if(driver.getCurrentUrl().equals("http://baike.baidu.com/")){ System.out.println("correct"); } driver.quit(); } }
如何返回當前頁面的title
這個功能的應用場景跟返回頁面url的情形差不多。
require 'rubygems' require 'selenium-webdriver' dr = Selenium::WebDriver.for :chrome url = 'http://www.qq.com' dr.get url puts dr.title dr.quit
from selenium import webdriver driver = webdriver.Chrome() driver.get('http://www.qq.com') print driver.title driver.quit()
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class OpenBrowser { public static void main(String[] args) { WebDriver driver = new ChromeDriver(); driver.get("http://www.baidu.com"); driver.findElement(By.linkText("百科")).click(); System.out.println(driver.getTitle()); driver.quit(); } }
其他方法或屬性
在這里僅僅討論一些簡單的屬性和方法,更加復雜的方法會在后面慢慢討論。
ruby
- window_handles : 返回當前所有打開瀏覽器的窗口句柄
- window_handle : 返回當前的瀏覽器的窗口句柄
- page_source : 返回當前頁面的源碼
- visible? : 當前瀏覽器是否可見,並不保證支持所有瀏覽器
python
- window_handles : 返回當前所有打開瀏覽器的窗口句柄.注意,這是屬性,不是方法;
- current_window_handle : 返回當前的瀏覽器的窗口句柄.注意,這是屬性,不是方法;
- page_source : 返回當前頁面的源碼.注意,這是屬性,不是方法;
- name : 返回當前瀏覽器的名稱.注意,這是屬性,不是方法;
java
- getWindowHandles() : 返回當前所有打開瀏覽器的窗口句柄
- getWindowHandle() : 返回當前的瀏覽器的窗口句柄
- getPageSource() : 返回當前頁面的源碼
深入討論
ruby 源碼中,操作瀏覽器的方法主要封裝在lib\selenium\webdriver\common\driver.rb文件中。 該文件定義了Selenium::WebDriver::Driver類。我們啟動瀏覽器就是調用這個類的for方法。
python源碼中,操作瀏覽器的方法主要封裝在selenium\webdriver\remote\webdriver.py文件中。 該文件定義了Remote WebDriver類。該類是其他具體的driver,如Chrome WebDriver的父類,實現了大多數的公用方法。
java源碼中,操作瀏覽器的方法主要封裝在org\openqa\selenium\remote\RemoteWebDriver.java文件中。 該文件定義了RemoteWebDriver類。該類是其他具體的driver,如Chrome WebDriver的父類,實現了WebDriver和JavascriptExecutor接口。
接下來
這一節討論了瀏覽器的簡單操作,下一節我們將討論如何在頁面上執行js代碼。