1. 程式人生 > >Python自動化測試 | Selenium

Python自動化測試 | Selenium

Selenium操作流程

  1. 開啟瀏覽器
  2. 開啟網頁
  3. 元素定位及互動操作
  4. 關閉瀏覽器
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&amp;a=ls">使用者總數</a>

ele = browser.find_element_by_link_text(‘使用者總數’)

partial link text (模糊查詢)

# 示例:<a href="admin.php?m=user&amp;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() 左擊一個元素

有的網頁需要將滑鼠放到某個位置才顯示具體內容(如導航), 在這裡插入圖片描述 滑鼠放到Java上 這種情況下,直接定位網頁元素是沒用的。這時候,需要用到動作鏈(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")