總網頁瀏覽量

關於我自己

我的相片
人生的必修課是接受無常,人生的選修課是放下執著。

2016年6月22日 星期三

Selenium網站自動測試 by Python

啟動瀏覽器

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()









沒有留言:

張貼留言