日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Selenium自动化框架理论总结

發(fā)布時間:2023/12/29 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Selenium自动化框架理论总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、自動化原理

1、結(jié)構(gòu)圖:

自動化程序(selenium客戶端庫) <-->? 瀏覽器驅(qū)動器? ?<-->? 瀏覽器

其中自動化程序通過http協(xié)議與瀏覽器驅(qū)動器進(jìn)行交互

2、安裝:

(1)selenium客戶端庫:pip install selenium

(2)瀏覽器驅(qū)動器:需要額外下載,實際上就是一個exe文件,不需要其他操作

3、基本代碼

from selenium import webdriver #根據(jù)驅(qū)動器創(chuàng)建一個webdriver對象,并啟動瀏覽器 wd=webdriver.Chorme('瀏覽器的路徑/驅(qū)動器文件')# Chorme Firefox Ie Safari Edge #利用wd對元素進(jìn)行定位操作、對窗口等進(jìn)行操作 wd.get('url') #請求訪問對應(yīng)網(wǎng)頁 wd.quit() #關(guān)閉瀏覽器窗口

二、元素定位的幾種常用方法

下面代碼中的wd可以替換為WebElement實例,查找范圍由原來的整個頁面更改為對應(yīng)元素的內(nèi)部;比較特殊的xpath,當(dāng)使用webelement時,參數(shù)前一定要加上.開頭

1、id

elements=wd.find_elements_by_id('id值') #以列表的形式返回所有符合元素;若無,空列表 element=wd.find_element_by_id('值') #返回第一個符合條件的元素;如無,拋出異常

2、class

elements=wd.find_elements_by_class_name('class值') #以列表的形式返回所有符合元素;若無,空列表 elements=wd.find_element_by_class_name('class值') #返回第一個符合條件的元素;如無,拋出異常

3、name

elements=wd.find_elements_by_name('值') #以列表的形式返回所有符合元素;若無,空列表 element=wd.find_element_by_name('值') #返回第一個符合條件的元素;如無,拋出異常

4、tag

elements=wd.find_elements_by_tag_name('值') #以列表的形式返回所有符合元素;若無,空列表 element=wd.find_element_by_tag_name('值') #返回第一個符合條件的元素;如無,拋出異常

5、css選擇器

elements=wd.find_elements_by_css_selector('參數(shù)') #以列表的形式返回所有符合元素;若無,空列表 element=wd.find_element_by_css_selector('參數(shù)') #返回第一個符合條件的元素;如無,拋出異常

(1)按照tag? ? 參數(shù):標(biāo)簽名

(2)按照屬性

  • id? ?參數(shù):#id值
  • class? ?參數(shù):.class值
  • 其他屬性? 參數(shù): [屬性名=’屬性值‘] ,其中屬性值的引號可省略

補(bǔ)充:屬性值部分可以進(jìn)行三總模糊查詢,分別如下所示:

? ? ? ? ? *= (包含)? ^= (以...開頭)? $=? (以...結(jié)尾)

(3)按照次序選擇子節(jié)點(diǎn)?? ? ? ?參數(shù)為? ? :nth-child(m) ,?本身父元素的第m個子節(jié)點(diǎn)

參數(shù)為? ? ?:nth-last-child(m),?本身父節(jié)點(diǎn)的倒數(shù)第m個子節(jié)點(diǎn)?? ? ? ??

(4)按照類型選擇子節(jié)點(diǎn)? ? ? ? 參數(shù)為? ? :nth-of-type(m),本身父元素的第m個類型的子節(jié)點(diǎn)

參數(shù)為? ? ?:nth-last-of-type(m),?本身父節(jié)點(diǎn)的倒數(shù)第m個子節(jié)點(diǎn)?? ??

補(bǔ)充:(3)(4)中的函數(shù)可以使用兩個特別的值:odd(奇數(shù))和even(偶數(shù))

(5)兄弟節(jié)點(diǎn)的選擇? ? ?

  • 相鄰兄弟? ? 類型 + 類型
  • 后續(xù)所以兄弟,包括表兄弟? ? ?類型~類型

(6)子代和后代的選擇

  • 子代? ?>
  • 后代? ? 空格

注意:css選擇器還可以組選擇,只需要用 逗號 隔開就好;也可以聯(lián)合使用,只需要沒有空格的連著寫即可

6、Xpath選擇器

elements=wd.find_elements_by_xpath('參數(shù)') #以列表的形式返回所有符合元素;若無,空列表 element=wd.find_element_by_xpath('參數(shù)') #返回第一個符合條件的元素;如無,拋出異常

? ? 絕對路徑:以 / 開頭,將每層依次寫下,用 / 隔開,類似子代

? ? 相對路徑:以? // 間隔 ,類似后代

? ? 不管是絕對還是相對路徑,每一層都要有標(biāo)簽或者通配符*

(1)根據(jù)屬性選擇(id class與其他屬性一視同仁)

格式?:? [@屬性名="屬性值"],其中屬性值的引號不可省,但是可單可雙,要在標(biāo)簽或*后使用

也可以進(jìn)行模糊查詢,具體有三種形式:

  • [contain(@屬性名,'值')]? 包含
  • [starts-with(@屬性名,'值')]? 以...開頭
  • [ends-with(@屬性名,'值')]? 以...結(jié)尾,但是這屬于xpath2.0語法,目前瀏覽器不支持

(2)根據(jù)次序選擇

  • 標(biāo)簽名[n]或者*[n]? ? 分別表示選擇標(biāo)簽名的第n個或者第n個
  • 標(biāo)簽名[last()-n]或者*[last()-n]? ?分別表示標(biāo)簽名的倒數(shù)第n+1個或者倒數(shù)第n+1個
  • 標(biāo)簽名[position()<n]或者*[position()<n]? ?其中<可以換成其他的比較符號,last()也可應(yīng)用于n

(3)父節(jié)點(diǎn)? ? ?/..

? ? ? ? 后續(xù)親兄弟節(jié)點(diǎn)? ?/following-sibling::*或tag名

? ? ? ? 前面親兄弟節(jié)點(diǎn)? ?/preceding-sibling::*或tag名

:也可以進(jìn)行組選擇,使用 | 連接

7、專門用于定位超鏈接的,也就是對應(yīng)html頁面中的<a>標(biāo)簽,括號里傳的值就是a標(biāo)簽中的超鏈接文字,兩者的區(qū)別在于一個是完整的超鏈接文字,一個是可以只寫部分超鏈接文字。

link復(fù)數(shù)定位find_element(s)_by_link_text()

partial_link復(fù)數(shù)定位find_element(s)_by_partial_link_text()

三、元素操作(點(diǎn)擊、輸入、獲取以及鼠標(biāo)和鍵盤操作等)

定位元素的函數(shù) find_elements_by_xxx()返回一個WebElement對象element,然后就可以進(jìn)行元素操作,常見的如下:

click(),send_keys(' ') ,text, get_attribute('屬性名') [innerHTML? outerHTML 是特殊的參數(shù)]

補(bǔ)充 : text屬性如果不顯示或只顯示部分內(nèi)容,可用get_attribute('innerHTML')或者('textContent')

輸入框輸入的內(nèi)容不可以通過text屬性獲得,要用get_attribute('value')

四、實戰(zhàn)技巧

1、radio? checkbox? select三種選擇框元素

(1)radio和checkbox都對應(yīng)input標(biāo)簽,type類型不同,分別對象單選和多選,一組的采用同一個name值

? ? ? ? select對應(yīng)的select標(biāo)簽,選項放在option標(biāo)簽內(nèi),默認(rèn)為單選,在select中添加屬性multiple改為多選

(2)radio? ?click() 選中 ;checkbox? ?click() 選中和未選中狀態(tài)切換

(3)select有專門的類進(jìn)行處理Select(select元素)實例化

(de)select_by_value()? ? (de)select_by_index()? (de)select_by_visible_text()? ? ?deselect_all()

2、alert? confirm? prompt三種彈出框 alert=wd.switch_to.alert

(1)alert:? ?alert.text? ? ;? ?alert.accept()

(2)confirm:? alert.text? ?;? ?alert.accept();? ?alert.dismiss()

(3)prompt :? ?alert.send_keys()? ;?? alert.text? ?;? ?alert.accept();? ?alert.dismiss()

3、frame切換

(1)frame或iframe標(biāo)簽利用src屬性指定一個html文件,使其嵌入到當(dāng)前HTML文件中;但是由于wd的訪問范圍不包括嵌入頁面的,所以如果需要訪問嵌入文件的元素,需要切換frame

(2)wd.switch_to.frame(' ')? 參數(shù)為frame的特征或者對應(yīng)的webelement元素

? ? ? ? ?wd.switch_to.default_content()? 返回到原來的frame

4、窗口切換

wd.title

wd.switch_to.window(handle), 其中handle要通過wd.window_handles結(jié)合一些條件查找到的

mainWindow=wd.current_window_handle

5、界面等待管理

某些元素內(nèi)容不會立即出現(xiàn),wd捕捉不到。selenium提供了一個方案:周期性(0.5s)重新尋找元素,直到元素找到或者超出最大等待時間拋出異常;

wd.implicitly(n):最大等待時間為n毫秒

要注意的是,周期性尋找的前提是找不到,如果找到了雖然是不正確的,那這個是不會處理這個情況的(一般只能sleep下)

?

?

?

?

?

?

?

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的Selenium自动化框架理论总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。