本次主要學習關於selenium元素定位,瀏覽器的控制等方面的知識,需要一定的html基礎,了解了html基礎後,更能好的了解元素定位的方式
selenium提供了18中元素定位的方式,在這裡揀常用的8種方式進行學習,還有一些元素操作,瀏覽器的操作,滑鼠操作,切換頁面,切換表單等操作
#selenium之元素定位
from selenium import
webdriver
import
time
driver =webdriver.chrome()
driver.get(
"")#driver.find_elements_by_id("
kw")#
id具有唯一性
#2.name定位
driver.find_element_by_name("
wd")#
name屬性可以不唯一,定位時需要確認注意
#3.class 定位
driver.find_element_by_class_name("
s_ipt
")#class屬性也可以不唯一,定位時需要注意
#4.tag標籤定位
driver.find_element_by_tag_name("
input
")#單個標籤法案為太廣,一般不用這種方法
#5.link 文字標籤
driver.find_element_by_link_text("
新聞") #
通過元素標籤定的文字資訊進行定位
#6.取部分文字標籤進行定位
driver.find_element_by_partial_link_text("
新")#
通過取元素標籤的部分文字資訊進行定位
#7.xpath 定位
#(1).絕對路徑進行定位,通過標籤的層級關係找到元素的絕對路徑
driver.find_element_by_xpath("
/html/body/div/div[2]/div/div/div/from/span/input")
#(2).利用元素的屬性進行定位 '//'表示當前目錄下,'*'代表當前目錄下所有標籤,
#[@id='kw']表示這個元素的id屬性值為kw,元素屬性可以唯一標記乙個元素,都可以用這種方法定位
driver.find_element_by_xpath("
//*[@id='kw']")
driver.find_element_by_xpath(
"//*[@class='s_ipt']")
#(3).層級與屬性結合
driver.ffind_element_by_xpath("
//span[@class='bgs_bth']/input")
#(4).通過邏輯運算子 通過邏輯運算子連線多個屬性查詢元素
driver.find_element_by_xpath("
//input[@id='kw' and @class='su']/span/input")
#8.css定位 css通過選擇器為頁面上的元素繫結屬性,選擇器知識可以通過html基礎了解
#(1).class 選擇器
driver.find_element_by_css_selector("
.s_ipt
") #
'.'表示通過class屬性定位元素
#(2)id屬性定位
driver.find_element_by_css_selector("
#kw") #
'#'表示通過id屬性定位
#(3).通過標籤名進行定位,一般不單獨使用,推薦巢狀使用
#1).通過父子關係定位
driver.find_element_by_css_selector("
span>input")
#2).通過任意屬性定位,只要可以唯一的標記元素
driver.find_element_by_css_selector("
[name=kw]")
driver.find_element_by_css_selector(
"[type=submit]")
#3).組合定位,利用屬性與層級關係進行定位
driver.find_element_by_css_selector("
form.fm>span>input.s_ipt")
driver.find_element_by_css_selector(
"form#form>span>input#kw")
#控制瀏覽器操作
#1.控制瀏覽器彈窗的大小
driver.set_window_size(480,800)#
以規定的大小開啟瀏覽器
driver.maximize_window()#
不傳引數,以全屏的方式開啟瀏覽器
#2.控制瀏覽器的前進,後退,重新整理等操作
driver.back()#
網頁後退
driver.forward()#
網頁前進
driver.refresh()#
網頁重新整理
#簡單的元素操作
#1.send_keys() 模擬鍵盤給輸入框內輸入值
driver.find_element_by_css_selector("
#kw").send_keys("
hello")
time.sleep(2)
#2.clear() 對輸入框內的文字進行清除
driver.find_element_by_css_selector("
#kw"
).clear()
#3.click() 模擬滑鼠進行單擊
driver.find_element_by_css_selector("
#su"
).click()
driver.find_element_by_css_selector(
"#su
").submit()
#上述點選的例子可以用submit,submit方法用於提交表單,類似與「回車」操作,常常與click混用,但沒有click應用範圍廣
#常用滑鼠操作
#滑鼠互動的方式包括:右擊,雙擊,懸停,滑鼠拖動等功能,在webdriver中,這些方法都封裝在actionchains類中;
from selenium.webdriver.common.action_chains import
actionchains
#1.context_click() 右擊
right_click = driver.find_element_by_css_selector("xx"
)actionchains(driver).context_click(right_click).perform()
#首先定位到要單機的元素:right_click,
#呼叫actionchains類,將瀏覽器驅動driver作為引數傳入
#context_click模擬滑鼠右擊,呼叫時需要指定元素(right_click)
#perform(),執行所有actionchains中儲存行為,可以理解為對整個操作的提交動作
#2.move_to_element() 滑鼠懸停
above = driver.find_element_by_css_selector("
xx")#
定位到元素
actionchains(driver).move_to_element(above).perform()#
對元素進行懸停操作
#3.double_click 雙擊
double_click = driver.find_element_by_css_selector("xx"
)actionchains(driver).double_click(double_click).perform()
#4.drag_and_drop(source,target) 滑鼠拖放
source = driver.find_element_by_css_selector("
xx")#
定位到元素的原位置
target = driver.find_element_by_css_selector("
xx")#
定位到元素的目標位置
s2 = driver.find_element_by_css_selector("xx"
)t2 = driver.find_element_by_css_selector("xx"
)actionchains(driver).drag_and_drop(source,target).perform()
actionchains(driver).drag_and_drop(source,target).drag_and_drop(s2,t2).perform()
#多個拖拽
#多視窗切換
#1.獲取指標所在視窗
(driver.current_window_handle)
#2.獲取到所有tag頁面,以列表的形式返回
handles =driver.window_handles
#3.取列表的元素,切換至元素所代表的頁面
driver.switch_to_window(handles[-1])
#多表單切換
#1.當頁面有多個表單頁面組合而成的時候,就需要進行表單的切換才能定位到相應的元素
driver.get("
xx")#
開啟乙個多表單網頁
driver.switch_to_frame("
xx")#
過元素定位到該表單(預設取id,name),然後切換至該表單
driver.switch_to.parent_frame()#
跳出當前一級選單
driver.switch_to.default_content()#
跳到最外面的頁面
UI 自動化設計思路
近來負責測試的產品,頁面上全都是圖表資料,頁面上互動少,可以說沒有。正對這樣的產品自動化,做了一些自動化方面思路整理 自動化測試用例編寫守則 首先,我們要確定一點,就是自動化的目的和作用。自動化測試是為了代替人執行需要大量重複的規律性或 無規律 的工作,它的主要目的在於驗證問題而不是發現問題 所以我...
UI自動化測試隨筆
昨天給開發的同事講我們正在做的自動化測試,同事問了句 為什麼api的測試不需要寫 了,而ui的測試還需要寫那麼多 呢?能不寫 麼?目前我們的自動化測試的現狀 目前主要覆蓋兩個部分 api的測試和ui的測試。對於api的測試經過框架的封裝,基本上只需要編寫乙個xml描述的test case就可以了,x...
UI自動化元素定位
1.id定位 find element by id self,id 2.name定位 find element by name self,name 3.class定位 find element by class name self,name 4.tag定位 find element by tag n...