1、 元素定位的方式:
id name tag class link_text partial_link_text xpath css
定位元素的時候,有一個要求:所有的定位屬性,必須是網頁中唯一的一個屬性,
2、 Webdriver中定位元素的基本語法:
最常用:find_element_by_id、name、class_name、link_text
最精確能定位元素:find _element_by_xpath
Xpath:是一個頁面元素在頁面中表現最基本的路徑
相對路徑://*[@id=“kw”]
絕對路徑:/html/body/div/div[2]/div[5]/div[1]/div/form/span[1]/input
3、 對頁面元素可以進行的操作:
clear():清除文本框中已有的內容,無需引數,
send_keys():向文本框中輸入數值,需要引數的函式,引數型別為字串,
click():點擊操作,按鈕、超鏈接、圖片等元素,無需引數
案例:打開火狐瀏覽器,打開百度首頁,在百度搜索框中輸入 千鋒教育,并點擊百度按鈕,
4、獲取頁面元素屬性(text get_attribute)
size :回傳元素的尺寸(寬,高)
text :獲取元素的文本內容
get_attribute(name):獲取屬性值,需要引數,引數為元素的屬性值,一般情況下該內容不
? 單獨對單一的元素使用,一般用于批量獲取元素屬性
is_displayed():設定該元素是否用戶可見
5、滑鼠事件:(move_to_element() perform()實作 ActionChains包)
? Action Chains 類提供了滑鼠操作的常用方法:
? perform():執行所有ActionChains 中存盤的行為
? context_click():右擊
? double_click():雙擊
? drag_and_drop():拖動
? move_to_element():滑鼠懸停
懸停代碼:
# 將百度搜索設定后續操作
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
driver= webdriver.Firefox()
driver.get("https://www.baidu.com")
sleep(3)
# 定位到懸停元素
ab=driver.find_element_by_id("s-usersetting-top")
# 滑鼠點擊到該元素
ActionChains(driver).move_to_element(ab).perform()
# 點擊元素鏈接
driver.find_element_by_link_text("搜索設定").click()
sleep(3)
# 點擊單選按鈕
driver.find_element_by_id("s1_2").click()
sleep(2)
driver.find_element_by_id("SL_1").click()
sleep(2)
driver.find_element_by_id("nr_2").click()
sleep(2)
driver.find_element_by_id("issw1_2").click()
sleep(2)
driver.find_element_by_id("sh_2").click()
sleep(2)
# 點擊元素鏈接保存
driver.find_element_by_link_text("保存設定").click()
# 回到原網頁
driver.switch_to.alert.accept()
url地址是否相同:
"""
常用的頁面資訊和內容的驗證
驗證網頁的title
驗證網頁的URL地址
驗證網頁中特定元素的文本資訊
驗證網頁是否包含特定的資訊(資料)
"""
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
url = "https://www.baidu.com/"
title = "百度一下,你就知道"
driver.get(url)
sleep(2)
# driver.title 當前頁面的title
if title ==driver.title:
print("Yes")
else:
print("No")
# driver.current_url 當前頁面的URL
print(driver.current_url)
if url == driver.current_url:
print("Yes")
else:
print("No")
# 網頁中是否包含:百度一下,你就知道 字串
if title in driver.page_source:
print("Yes")
else:
print("No")
# 輸出瀏覽器當前的源代碼
print(driver.page_source)
6、對警告框的處理:
1、 警告框的形式:
1) alert
2) confirm
3) prompt
由于警告框并不是HTML元素,所以,需要使用switch_to.alert進行切轉和轉變,
2、swicth_to.alert. ()的處理:
1) text:獲取警告框中的提示資訊,
2) accept:接受警告框,
3) dismiss:消除、撤銷警告框
4) send_keys:專用于prompt型別的警告框,(類似的組合按鍵、功能鍵都不能用)
警告框代碼:
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("file:///C:/Users/Administrator/Desktop/test_confirm.html")
# 定位元素并操作
driver.find_element_by_tag_name("input").click()
# 切換到警告框
sleep(4)driver.switch_to.alert.accept()
"""
定位元素
對警告框輸入內容
接受警告框
在確認后的頁面判斷2中輸入的內容是否存在
"""
from selenium import webdriver
from time import sleep
driver= webdriver.Firefox()
driver.get("file:///C:/Users/Administrator/Desktop/test_prompt.html")
# 定位元素并操作
driver.find_element_by_id("test").click()
# 切換到警告框 ,輸入文字并接受
input1="寫代碼"
driver.switch_to.alert.send_keys(input1)
sleep(4)
driver.switch_to.alert.accept()
# 判斷輸入的的內容是否正確
if input1 in driver.page_source:
print("yes")
else:
print("no")
注意:
1) 不論是哪一種型別的警告框,都是用switch_to.alert進行切換;
2) 警告框并不是HTML元素,所以里面的文本框和按鈕,都不能用常用的元素的操作方式,
3) 警告框并不是HTML元素,所以里面的文本框和按鈕,都不能用Selenium的元素定位去識別,
2、 frame或者iframe的處理
7、iframe、Frame能夠內嵌網頁
? swicth_to.frame 切換到框架
? swicth_to.default_content 切換到默認連接
由于iframe或者Frame能夠內嵌網頁,內嵌的網頁和原網頁不是同一個頁面物體,因此不能直接進行頁面元素之間的識別和定位,
需要使用switch_to.frame進行切換和轉換,轉入需要定位元素的網頁和框架內,
如果頁面中也有iframe,但是無需操作,那么不需要進行轉換和切換,
進入到iframe或者frame中,還得出來(需要操作另外的網頁物體中的元素的時候):
Driver.switch_to.default_content
框架代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
</style>
</head>
<body>
<iframe src="http://www.baidu.com" id="if" width="800" height="500" ></iframe>
<hr />
<a href="http://www.QQ.com">QQ</a>
</body>
</html>
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("file:///C:/Users/Administrator/Desktop/index.html")
sleep(2)
# 進行框架切換,然后進行元素定位
driver.switch_to.frame("if")
# 在網頁中,定位百度搜索框按鈕
driver.find_element_by_id("kw").send_keys("python")
driver.find_element_by_id("su").click()
sleep(2)
# 從框架中切換出來,回到原網頁
driver.switch_to.default_content()
driver.find_element_by_link_text("QQ").click()
8、對下拉串列元素的操作
導包 :
from selenium.webdriver.support.select import Select
使用Select()方法將元素變成下拉串列后進行操作(只能是 Select標簽)
對元素的選擇有三種方式:
按照索引(index)、value屬性的值、 文本進行元素的選擇,
語法: select_by_index()
? select_by_visible_text()
? select_by_index()
select代碼如下:
from selenium import webdriver
from time import sleep
from selenium.webdriver.support.select import Select
driver=webdriver.Firefox()
driver.get("file:///C:/Users/Administrator/Desktop/new_file2.html")
sleep(2)
# 定位select元素
sele=driver.find_element_by_id("sss")
sleep(2)
# 將sl轉化
Select(sele).select_by_index(1)
sleep(2)
Select(sele).select_by_value("js")
sleep(2)
Select(sele).select_by_visible_text("Android")
9、螢屏截圖和瀏覽器關閉
1) 螢屏截圖,
一般就是用來證明軟體運行中有bug的時候進行的界面截圖,使用函式:
Get_screenshot_as_file()進行,該函式需要一個引數,引數為圖片的存盤路徑;支持的圖片格式為 PNG格式,
2) 瀏覽器的關閉和退出,
close():關閉單一的瀏覽器標簽頁,如果有多個頁面標簽,關閉指定標簽頁,用close,如果只有一個標簽頁 ,關閉和退出沒有區別
quit():退出瀏覽器程式
3)針對元素截圖:screenshot()
? logo=driver.find_element_by_id("")
? logo.screenshot(“logo.png”)
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("https://www.baidu.com")
sleep(2)
# 給百度首頁進行截圖
driver.get_screenshot_as_file("1.png")
# 定位元素
driver.find_element_by_id("kw").send_keys("java")
sleep(2)
driver.find_element_by_id("su").click()
sleep(2)
# 給百度的搜索結果頁面進行截圖
driver.get_screenshot_as_file("D:\\2.png")
driver.close()
10、引數化腳本:
1、腳本引數化定義:
? 使用變數代替腳本中的常量,是自動化測驗中最重要的技術點之一
2、使用腳本中特有的資料型別(list或者元祖)實施自動化
3、使用外部資料檔案(TXT,CSV)
? 打開和讀取檔案、資料
? 將資料組合進入腳本中使用(一定要使用對應資料)
? 檔案使用完之后,記得關閉
引數化代碼:
import csv
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("https://ssl.zc.qq.com/v3/index-chs.html")
sleep(2)
csv_f1 = open("qq_register.csv","r",encoding='utf-8')
data = csv.reader(csv_f1)
for i in data:
driver.refresh()
driver.find_element_by_id("nickname").send_keys(i[0])
sleep(2)
driver.find_element_by_id("password").send_keys(i[1])
sleep(2)
driver.find_element_by_id("phone").send_keys(i[2])
sleep(2)
driver.find_element_by_id("code").send_keys(i[3])
csv_f1.close()
11、在頁面中使用JS腳本操作頁面元素
1、通用的函式:
? execute_script 會優先執行JS腳本,結束后運行Python腳本
2、JS陳述句用于修改元素的css樣式,前提是要定義一個css樣式
3、用JS陳述句獲取焦點元素
? driver.execute_script(“arguments[0].focus();”,ys)
4、JS陳述句用于控制滾動條
? js = “document.documentElement.scrollTop=100000000000”
5、JS陳述句用于修改元素屬性
? “document.getElementById(‘train_date’).removeAttribute(‘readonly’);”
6、JS陳述句用于設定元素的value值屬性
? “document.getElementById(‘train_date’).value=‘2020-10-02’;”
12、瀏覽器視窗句柄:
獲取當前視窗句柄:driver.current_window_handle
獲取瀏覽器所有句柄:driver.window_handles
切換到指定的瀏覽器視窗:driver.switch_to.window(handle)
from selenium import webdriver
from time import sleep
driver= webdriver.Firefox()
driver.get("https://www.baidu.com")
sleep(3)
driver.get_screenshot_as_file("bd.png")
# 輸出當前視窗的句柄
print(driver.current_window_handle)
driver.find_element_by_link_text("新聞").click()
sleep(3)
# 切換瀏覽器句柄
driver.switch_to.window(driver.window_handles[1])
# 輸出當前視窗的句柄
print(driver.current_window_handle)
driver.get_screenshot_as_file("news.png")
sleep(2)
# 獲取瀏覽器當前所有的視窗句柄
print(driver.window_handles)
driver.quit()
擴展的知識:
1) 實際運行的軟體系統中,某些元素不好識別的,在測驗環境中是不存在的,
2) 如果測驗系統中,有手機驗證碼或者圖形驗證碼的時候,測驗或者開發人員會專門設定一個萬能驗證碼(無需真的獲取就能驗證通過)
3) 可以暫時的屏蔽或者注釋掉驗證碼功能,
4) 要結合企業的實際情況,系統的實際運行環境、測驗環境、開發環境,都有可能是不一樣的,
后續持續給你更新,看完記得關注我哦!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/89293.html
標籤:其他
