Python自動化測試 | Selenium
阿新 • • 發佈:2018-12-16
Selenium操作流程
- 開啟瀏覽器
- 開啟網頁
- 元素定位及互動操作
- 關閉瀏覽器
1、開啟瀏覽器
建立瀏覽器物件
from selenium import webdriver
browser=webdriver.Chrome() # 建立一個瀏覽器物件
# browser = webdriver.Firefox()
# browser = webdriver.Safari()
# browser = webdriver.Edge()
2、開啟網頁
開啟百度首頁
browser.get('www.baidu.com')
網頁前進/後退
browser.forward() browser.back()
判斷訪問是否有效
# 獲取當前URL
browser.current_url
# 獲取網頁標題
browser.title
3、元素定位(核心操作)
定位當前原始碼的元素,函式返回該元素物件
元素名稱 | webdriver API | 說明 |
---|---|---|
id | find_element_by_id() | |
name | find_element_by_name() | |
class name | find_element_by_class_name() | |
tag name | find_element_by_tag_name() | |
link text | find_element_by_link_text() | |
partial link text | find_element_by_partial_link_text() | |
xpath | find_element_by_xpath() | |
css selector | find_element_by_css_selector() |
id / name /class
# 例項:<input id="kw" name="wd" class="s_ipt" value="">
link text
# 示例:<a href="admin.php?m=user&a=ls">使用者總數</a> ele = browser.find_element_by_link_text(‘使用者總數’)
partial link text (模糊查詢)
# 示例:<a href="admin.php?m=user&a=ls">使用者總數</a>
ele = browser.find_element_by_partial_link_text(‘總數’)
css selector
# 方法1
Chrome:右鍵,檢查,Copy selector
Firefox:藉助 firebug 等瀏覽器外掛工具,右鍵檢查元素,複製 CSS 路徑即可
# 方法2
示例:<a href="javascript:;" data-toggle="modal" data-target="#loginModal">購買課程</a>
browser.find_element_by_css_selector(r'a[href="javascript:;"]')
# r‘tag_name[key=“value”]’
4、元素互動操作
由元素定位後返回的元素物件進行呼叫(不是瀏覽器物件)
函式 | 作用 |
---|---|
click() | 左擊 |
context_click() | 右擊 |
double_click() | 雙擊 |
send_keys() | 模擬按鍵輸入 |
clear() | 清空元素內容(如輸入框) |
submit() | 提交表單 |
get_attribute(‘KEY’) | 返回元素的屬性 |
drag_and_drop(source, target) | 拖拽滑鼠 |
move_to_element() | 滑鼠移動到一個元素上 |
click_and_hold() | 左擊一個元素 |
有的網頁需要將滑鼠放到某個位置才顯示具體內容(如導航), 這種情況下,直接定位網頁元素是沒用的。這時候,需要用到動作鏈(Action Chains)
from selenium.webdriver import ActionChains
actions = ActionChains(browser) # 建立動作鏈物件
actions.something_code_here() # 一些操作
actions.perform() # 執行
5、瀏覽器視窗管理
檢視視窗
browser.window_handles # 列出所有控制代碼
browser.current_window_handle
切換視窗
browser.switch_to_window()
關閉視窗
browser.close()
6、關閉瀏覽器
browser.quit()
異常log
1、NoSuchElementException異常
元素的id或name明明存在,但通過find_element_by_id()等函式查詢時,報NoSuchElementException異常,解決方案: 如果 iframe 有 name 或 id 的話
switch_to_frame("name/id")