啟動瀏覽器
from selenium import webdriver driver = webdriver.Firefox()
關閉瀏覽器
quit除了會關閉瀏覽器之後,也會釋放 client/server的連線。
close 只是單存的關閉現在目前的瀏覽器。當測試程式連續執行 100次以上時,如果資源都沒有釋放,就會出現奇奇怪怪的系統異常導致自動化測試失敗。
from selenium import webdriver import time driver = webdriver.Firefox()
driver.quit() # dr.close()
視窗最大化
from selenium import webdriver dr = webdriver.Chrome() dr.maximize_window() dr.quit()
啟動瀏覽器並前往指定url
from selenium import webdriver import time driver = webdriver.Firefox() url = 'http://www.google.com'
driver.get(url)
time.sleep(3)
dr.quit()
取得目前的 URL 與 Title
# -*- coding: utf-8 -*- from selenium import webdriver from time import sleep import os dr = webdriver.Firefox() url = 'http://www.google.com' dr.get(url) print "current page title is %s" %(dr.title) print "current page url is %s" %(dr.current_url) sleep(5) dr.quit()
檔案下載
檔案下載最大的問題在於出現的視窗是 Selenium無法處理先設定 FireFox profile將存檔的位置設定好,避免在執行過程中出現存檔的視窗。
import os from selenium import webdriver fp = webdriver.FirefoxProfile() fp.set_preference("browser.download.folderList",2) fp.set_preference("browser.download.manager.showWhenStarting",False) fp.set_preference("browser.download.dir", os.getcwd()) fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream") browser = webdriver.Firefox(firefox_profile=fp) browser.get("http://pypi.python.org/pypi/selenium") browser.find_element_by_partial_link_text("selenium-2").click()
等待網頁元件出現
WebDriverWait,比較像是 timeout的設定。
# -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.keys import Keys from time import sleep import os import selenium.webdriver.support.ui as ui dr = webdriver.Firefox() url = 'http://www.google.com' dr.get(url) wait = ui.WebDriverWait(dr, 10) wait.until(lambda dr: dr.find_element_by_name('q').is_displayed()) dr.quit()
FORM元件的操作
網頁的 FORM有 checkBox, Radio, Selection, Alert等,相關的處理範例如下:
# -*- coding: utf-8 -*- from selenium import webdriver from time import sleep import os dr = webdriver.Firefox() url = 'http://www.google.com' dr.get(url) # checkbox dr.find_element_by_css_selector('input[type=checkbox]').click() # radio dr.find_element_by_css_selector('input[type=radio]').click() # Options dr.find_element_by_tag_name('select').find_elements_by_tag_name('option')[-1].click() sleep(1) # Alert的處理 alert = dr.switch_to_alert() print alert.text alert.accept() dr.quit()
鍵盤的輸入
Google Search的輸入<pre><code>dr.find_element_by_name('q').send_keys("Google Search")網頁元件的屬性特殊按鍵像是 copy & Paste 的行為
# copy content of A dr.find_element_by_id('A').send_keys((Keys.CONTROL, 'a')) dr.find_element_by_id('A').send_keys((Keys.CONTROL, 'x'))
網頁元件屬性
根據取得網頁元件屬形做基本的驗證或是判斷進一步的處理。- text_field = dr.find_element_by_name(‘user‘)
- print text_field.is_enabled()
- print text_field.is_displayed()
如果是 Radio,可以判斷是否被選取
- radio = dr.find_element_by_name(‘radio‘)
- print radio.is_selected()
沒有留言:
張貼留言