Selenium詳細教程


前言

相信搞過Python的人絕大部分都會一點點爬蟲技能,但是很多時候爬蟲也不是萬能的,這個時候就需要我們的自動化測試框架了,於是Selenium就應運而生了,它可以算的上是自動化測試框架中的佼佼者,因為它解決了大多數用來爬取頁面的模塊的一個永遠的痛,那就是Ajax異步加載,今天小編就帶大家來好好了解下這個Selenium 。

一、安裝與導入

這里我們需要安裝三個東西,一個是Selenium框架,還有一個瀏覽器,最后就是驅動。這里小編選擇了谷歌瀏覽器,下載地址:谷歌瀏覽器。然后Selenium框架嘛,大家都會下的啦,pip就搞定了,最后就是要下載個Chrome瀏覽器的驅動程序,為了讓Selenium和瀏覽器之間產生關聯的一個東西,下載地址:chromedriver(注意谷歌瀏覽器與驅動chromedriver有版本匹配問題!谷歌瀏覽器會強制更新軟件可以考慮拿一個綠色版到項目里面,然后配置一下瀏覽器的路徑就好)。安裝好瀏覽器后,將瀏覽器驅動放在瀏覽器同級目錄下,這樣前期工作就算都預備好了。

注:不要隨便亂下瀏覽器和驅動,每個瀏覽器和驅動器的版本都必須是一一對應的,不是通用的。

二、與瀏覽器建立連接

做好前面的准備工作,我們只需要寫入幾行Python代碼即可與瀏覽器進行交互,如下:

from selenium import webdriver
c=webdriver.Chrome(executable_path=r'./chromedriver.exe') #獲取chrome瀏覽器的驅動,並啟動Chrome瀏覽器
c.get('https://www.baidu.com')#打開百度
  • 1
  • 2
  • 3

三、查找元素

對於操作瀏覽器中的頁面的自動化測試框架來說,肯定少不了 去發現網頁中的元素,你只有發現那些元素實時存在了才能做出下一步的操作。Selenium中提供了眾多的方法供我們去找到網頁中的元素,這給我們帶來了很大的便利,那么都有哪些方法了,我們可以通過Python快速獲取到這些方法:
在這里插入圖片描述

可以看到只要是前面帶有Find字樣的方法都是。下面我們來簡要說說這些方法的作用以及如何使用,如下:

find_element                         #通過指定方法查找指定的一個元素(需指定兩個參數)
find_element_by_class_name           #通過Class name查找指定的一個元素
find_element_by_css_selector         #通過CSS選擇器查找指定的一個元素
find_element_by_id                   #通過ID查找指定的一個元素
find_element_by_link_text            #通過鏈接文本獲取指定的一個超鏈接(精確匹配)
find_element_by_name                 #通過Name查找指定的一個元素
find_element_by_partial_link_text    #通過鏈接文本獲取指定的一個超鏈接(模糊匹配)
find_element_by_tag_name             #通過標簽名查找指定的一個元素
find_element_by_xpath                #通過Xpath語法來指定的一個元素
find_elements                        #通過指定方法查找所有元素(需指定兩個參數)
find_elements_by_class_name          #通過Class name查找所有元素
find_elements_by_css_selector        #通過CSS選擇器查找所有元素
find_elements_by_id                  #通過ID查找所有元素
find_elements_by_link_text           #通過鏈接文本獲取所有超鏈接(精確匹配)
find_elements_by_name                #通過Name查找所有元素
find_elements_by_partial_link_text   #通過鏈接文本獲取所有超鏈接(模糊匹配)
find_elements_by_tag_name            #通過標簽名查找所有元素
find_elements_by_xpath               #通過Xpath語法來查找所有元素
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

下面我們就上面提到的方法做部分解讀,這里我們選擇打開百度首頁並且定位輸入框,如下:
在這里插入圖片描述

可以看到輸入框的ID為KW,Name為WD,這里我們選擇ID,選擇ID有三種方法,如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
c=webdriver.Chrome(executable_path=r'./chromedriver.exe')
c.get('https://www.baidu.com')
kw1=c.find_element(By.ID,'kw')
kw2=c.find_element_by_id('kw')
kw3=c.find_elements_by_id('kw')[0]
print(kw1)
print(kw2)
print(kw3)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

web自動化測試框架-----Selenium大揭秘

可以看到我們成功使用三種方法獲取到了這個元素,其它方法差不多,都是一通百通,喜歡哪種方法就使用哪種方法

四、瀏覽器操作

1.獲取本頁面URL

c.current_url
  • 1

2.獲取日志

c.log_types  #獲取當前日志類型
c.get_log('browser')#瀏覽器操作日志
c.get_log('driver') #設備日志
c.get_log('client') #客戶端日志
c.get_log('server') #服務端日志

##3.窗口操作
c.maximize_window()#最大化
c.fullscreen_window() #全屏
c.minimize_window() #最小化
c.get_window_position() #獲取窗口的坐標
c.get_window_rect()#獲取窗口的大小和坐標
c.get_window_size()#獲取窗口的大小
c.set_window_position(100,200)#設置窗口的坐標
c.set_window_rect(100,200,32,50)    #設置窗口的大小和坐標
c.set_window_size(400,600)#設置窗口的大小
c.current_window_handle   #返回當前窗口的句柄
c.window_handles         #返回當前會話中的所有窗口的句柄
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

4.設置延時

c.set_script_timeout(5) #設置腳本延時五秒后執行
c.set_page_load_timeout(5)#設置頁面讀取時間延時五秒
  • 1
  • 2

5.關閉

c.close() #關閉當前標簽頁
c.quit() #關閉瀏覽器並關閉驅動
  • 1
  • 2

6.打印網頁源代碼

c.page_source
  • 1

7.屏幕截圖操作

c.save_screenshot('1.png')#截圖,只支持PNG格式
c.get_screenshot_as_png() #獲取當前窗口的截圖作為二進制數據
c.get_screenshot_as_base64() #獲取當前窗口的截圖作為base64編碼的字符串

8.前進后退刷新
c.forward() #前進
c.back()  #后退
c.refresh()#刷新
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

9.執行JS代碼

在Selenium中也可以自定義JS代碼並帶到當前頁面中去執行,如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
c=webdriver.Chrome(executable_path=r'./chromedriver.exe')
c.get('https://www.baidu.com')
kw1=c.find_element(By.ID,'kw')
c.execute_script("alert('hello')")
time.sleep(3)
c.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在這里插入圖片描述

這里我使用一個JS中的函數來執行屏幕提示的功能,成功被執行。

10.Cookies操作

c.get_cookie('BAIDUID') #獲取指定鍵的Cookies
c.get_cookies()         #獲取所有的Cookies
for y in c.get_cookies():
   x=y
   if x.get('expiry'):
       x.pop('expiry')     
   c.add_cookie(x) #添加Cookies 
c.delete_cookie('BAIDUID') #刪除指定鍵的Cookies內容
c.delete_all_cookies() #刪除所有cookies
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

11.獲取標題內容

c.title
  • 1

12.獲取當前瀏覽器名

c.name
  • 1

13.全局超時時間

c.implicitly_wait(5)
  • 1

web自動化測試框架-----Selenium大揭秘

五、元素操作

對我們找到的元素進行二次操作,不僅可以再次選擇子元素還可以進行其它操作。如下:

kw1.clear()        #清除元素的值
kw1.click()        #點擊元素
kw1.id             #Selenium所使用的內部ID
kw1.get_property('background') #獲取元素的屬性的值
kw1.get_attribute('id') #獲取元素的屬性的值
kw1.location       #不滾動獲取元素的坐標
kw1.location_once_scrolled_into_view  #不滾動且底部對齊並獲取元素的坐標
kw1.parent         #父元素
kw1.send_keys('')  #向元素內輸入值
kw1.size           #大小
kw1.submit         #提交
kw1.screenshot('2.png') #截取元素形狀並保存為圖片
kw1.tag_name       #標簽名
kw1.text           #內容,如果是表單元素則無法獲取
kw1.is_selected()  #判斷元素是否被選中
kw1.is_enabled()   #判斷元素是否可編輯
kw1.is_displayed   #判斷元素是否顯示
kw1.value_of_css_property('color') #獲取元素屬性的值
kw1._upload('2.png') #上傳文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

web自動化測試框架-----Selenium大揭秘

六、鍵盤鼠標操作

1.模擬鍵盤輸入和按鍵

from selenium.webdriver.common.keys import Keys
c.find_element(By.ID,'kw').send_keys('python')#輸出Python
c.find_element(By.ID,'kw').send_keys(Keys.ENTER)#回車鍵
c.find_element(By.ID,'kw').click()#點擊
  • 1
  • 2
  • 3
  • 4

這里列舉出了一個最簡單的鍵盤輸入和鼠標點擊的例子,不過我們在Selenium中可以使用更為高逼格的操作,那么是什么了?當然是咱們的鼠標鍵盤監聽事件來觸發事件啦,而且它里面的方法的確也很多樣化,滿足小編日常的騷操作不在話下,如下所示:

click(on_element=None)                 #鼠標左鍵單擊
click_and_hold(on_element=None)        #單擊鼠標左鍵,不松開
context_click(on_element=None)         #單擊鼠標右鍵
double_click(on_element=None)          #雙擊鼠標左鍵
drag_and_drop(source,target)           #拖拽到某個元素然后松開
drag_and_drop_by_offset(source,xoffset,yoffset) #拖拽到某個坐標然后松開
key_down(value,element=None)     #按下鍵盤上的某個鍵
key_up(value, element=None)      #松開鍵盤上的某個鍵
move_by_offset(xoffset, yoffset)  #鼠標從當前位置移動到某個坐標
move_to_element(to_element)        #鼠標移動到某個元素
move_to_element_with_offset(to_element, xoffset, yoffset) #移動到距某個元素(左上角坐標)多少距離的位置
pause(seconds)                  #暫停所有輸入(指定持續時間以秒為單位)
perform()                       #執行所有操作
reset_actions()                 #結束已經存在的操作並重置
release(on_element=None)       #在某個元素位置松開鼠標左鍵
send_keys(*keys_to_send)        #發送某個鍵或者輸入文本到當前焦點的元素
send_keys_to_element(element, *keys_to_send) #發送某個鍵到指定元素
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

以上就是咱們鼠標和鍵盤的全部操作了,小編將用一個例子帶大家零基礎入門。如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
c=webdriver.Chrome(executable_path=r'./chromedriver.exe')
c.get('https://www.baidu.com')
a=ActionChains(c)
kw1=c.find_element(By.ID,'kw')
tj=c.find_element(By.ID,'su')
tj.send_keys(Keys.CONTROL,'c') #復制
a.drag_and_drop(kw1,tj).perform()#從輸入框拖動到搜索按鈕
kw1.send_keys(Keys.CONTROL,'v')#粘貼
tj.send_keys(Keys.ENTER)
time.sleep(3)
c.close()
c.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

這里我們通過對事件的監控,進行復制和粘貼,這里涉及到一個組合鍵的知識,大家注意。

七、選項操作

我們可以通過給當前操作的對象一些選項來增強交互能力,如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.chrome.options import Options
o=Options()
o.add_argument('--headless')#無界面瀏覽
c=webdriver.Chrome(executable_path=r'./chromedriver.exe',chrome_options=o)
c.get('https://www.baidu.com')
kw1=c.find_element(By.ID,'kw')
print(c.title)
time.sleep(3)
c.close()
c.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

web自動化測試框架-----Selenium大揭秘

這個時候就實現了咱們的無界面瀏覽了,也就是不用打開瀏覽器即可自動返回執行的結果。不過你可別以為選項就那么一兩個,那可是多到你懷疑人生的,例如:

o.add_argument('--window-size=600,600') #設置窗口大小
o.add_argument('--incognito') #無痕模式
o.add_argument('--disable-infobars') #去掉chrome正受到自動測試軟件的控制的提示
o.add_argument('user-agent="XXXX"') #添加請求頭
o.add_argument("--proxy-server=http://200.130.123.43:3456")#代理服務器訪問
o.add_experimental_option('excludeSwitches', ['enable-automation'])#開發者模式
o.add_experimental_option("prefs",{"profile.managed_default_content_settings.images": 2})#禁止加載圖片
o.add_experimental_option('prefs',
{'profile.default_content_setting_values':{'notifications':2}}) #禁用瀏覽器彈窗
o.add_argument('blink-settings=imagesEnabled=false')  #禁止加載圖片
o.add_argument('lang=zh_CN.UTF-8') #設置默認編碼為utf-8
o.add_extension(create_proxyauth_extension(
           proxy_host='host',
           proxy_port='port',
           proxy_username="username",
           proxy_password="password"
       ))# 設置有賬號密碼的代理
o.add_argument('--disable-gpu')  # 這個屬性可以規避谷歌的部分bug
o.add_argument('--disable-javascript')  # 禁用javascript
o.add_argument('--hide-scrollbars')  # 隱藏滾動條
o.binary_location=r"C:\Users\Administrator\AppData\Local\Google\Chrome\Application" #指定瀏覽器位置 (可以考慮復制一個綠色版到項目,再指定)
o.add_argument('--no-sandbox')  #解決DevToolsActivePort文件不存在的報錯
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

其實選項的添加無非就是分為以下這幾種,如下:

o.set_headless()          #設置啟動無界面化
o.binary_location(value)  #設置chrome二進制文件位置
o.add_argument(arg)               #添加啟動參數
o.add_extension(path)                #添加指定路徑下的擴展應用
o.add_encoded_extension(base64)      #添加經過Base64編碼的擴展應用
o.add_experimental_option(name,value)         #添加實驗性質的選項
o.debugger_address(value)                #設置調試器地址 
o.to_capabilities()                    #獲取當前瀏覽器的所有信息
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

雖然選項很多,但是我們真正能用到的不多,一般就是無痕模式或者禁用JavaScript和圖片來快速獲取到相關信息。雖然我們上面使用的是Options方法,但是在實際應用中建議大家使用的ChromeOptions方法。

八、框架操作(Frame/IFrame)

我們還可以操作框架里的東西,比如IFrame,Frame等等,雖然都是框架,但是這兩者操作起來還是有很大差別的。下面我們就來看看吧,如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
c=webdriver.Chrome(executable_path=r'./chromedriver.exe')
c.implicitly_wait(10)
c.get('https://hao.360.com/?a1004')
#ss=c.find_element(By.CLASS_NAME,'NEWS_FEED_VIDEO_1595850774217HPA70')#不容易找到標簽
c.switch_to.frame(0)#索引
c.switch_to.frame('NEWS_FEED_VIDEO_1595850774217HPA70-VideoIframe') #ID
c.switch_to.frame('NEWS_FEED_VIDEO_1595850774217HPA70')#Class
c.switch_to.frame(c.find_element_by_tag_name("iframe"))#標簽
time.sleep(3)
c.close()
c.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

這里小編是以360瀏覽器的主頁為例子,對它里面的IFrame進行訪問,最有效的方法一般就是我上面提到的四種了。這里我們有時候因為這個框架需要加載才可以出來,所以很多時候是無法獲取到的,因此我們只有使用滑動加載到出現這個標簽或者ID,Class為可以獲取到,這在剛才小編是說了的,大家可以往前看看,不過這個方法不推薦使用,為啥?因為開發者文檔上是這樣寫的。我們的Frame由於是IFrame里的子集,所以上面的方法便是可以層層遍歷的好方法,但是如果我們遍歷到最后了如何返回主框架了,可以這樣做,如下所示:

c.switch_to.default_content()
  • 1

這樣就可以回到主框架繼續進行操作了。如果我們由里往外遍歷的話,那么可以這樣來做,如下:

c.switch_to.parent_frame()
  • 1

九、Alert

在彈窗處理中,我們會遇到三種情況,如下:

瀏覽器彈出框
新窗口彈出框
人為彈出框

那么我們該怎么分辨了?下面跟我一起看看吧。

1.瀏覽器彈出框

首先說說瀏覽器彈出框,想必大家對JavaScript中的Alert,Confirm,Prompt應該不是很陌生,就是彈出框,確認框,輸入框;基本方法我們來看下,如下:

from selenium.webdriver.common.alert import Alert
c=webdriver.Chrome(executable_path=r'./chromedriver.exe')
c.implicitly_wait(10)
c.get('https://www.baidu.com')
a1=Alert(c)
a1.accept() #確定
a1.dismiss() #取消
a1.authenticate(username,password) #用戶身份驗證
a1.send_keys('') #輸入文本或按鍵
a1.text  #獲取彈窗內容
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

這里我們應對每種情況它上面的方法的對應位置都是會有所變化的,所以我們需要根據具體情況來進行操作,而且還可以使用另一種方法,如下:

c=webdriver.Chrome(executable_path=r'./chromedriver.exe')
c.implicitly_wait(10)
c.get('https://www.baidu.com')
a1=c.switch_to_alert()
a1.accept() #確定
a1.dismiss() #取消
a1.authenticate(username,password) #用戶身份驗證
a1.send_keys('') #輸入文本或按鍵
a1.text  #獲取彈窗內容
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

注:該類方法必須在有彈框的情況下才有作用,如沒有會報錯。

2.新窗口彈出框

上面就是瀏覽器彈出框的處理方法了,如果是新窗口彈出的話那么就不一樣了,我們需要通過句柄來定位,前面我們提到過這兩個方法。下面我們來看看它們的具體用法,如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
c=webdriver.Chrome(executable_path=r'./chromedriver.exe')
c.implicitly_wait(10)
c.get('https://www.baidu.com')
kw1=c.find_element(By.ID,'kw')
tj=c.find_element(By.ID,'su')
hwnd=c.window_handles #所有窗口句柄
for h in hwnd:
   if h !=c.current_window_handle:  #如果句柄不是當前窗口句柄則切換 c.switch_to_window(h) #切換窗口
   else:
       print('無需切換窗口') 
time.sleep(3)
c.close()
c.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

注:如果有多個窗口,當你關閉了當前窗口想切換到另一個窗口,你需要把沒關閉的窗口切換成當前活動窗口,因為Selenium是不會為你做這件事的。

3.人為彈出框

這類彈出框是我們自己開發的,一般都是使用Div包裹一些其它的元素標簽然后形成一個整體,當我們觸發某個事件的時候就會出現,否則消失。這種彈出框使用我們的眾多Find前綴的方法就能遍歷到,很方便,這里不一一細說。

十、判斷

在Selenium中我們在做自動化測試時常無法判斷一個元素是否真的顯示出來了,因此會各種報錯,接下來我們對這些操作進行判斷,如果顯示出了我們預期的值,那么就進行下一步操作,否則就關閉或者暫停幾秒然后再判斷,這里我要跟大家說Selenium中的一個模塊-----Expected_Conditions,簡稱為EC,如下所示:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time
c=webdriver.Chrome(executable_path=r'./chromedriver.exe')
c.implicitly_wait(10)
c.get('https://baidu.com')
t=EC.title_is('百度一下,你就知道')
print(t(c))
time.sleep(3)
c.close()
c.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

web自動化測試框架-----Selenium大揭秘

這里其實就是判斷當前頁面的標題是否是我們給定的文本,可以看出這里為True,說明是。它不光就一個方法哦,還有其它的,小編在這里大致說下,如下所示:

EC.title_contains('')(c)#判斷頁面標題是否包含給定的字符串
EC.presence_of_element_located('')(c) #判斷某個元素是否加載到dom樹里,該元素不一定可見
EC.url_contains('')(c) #判斷當前url是否包含給定的字符串
EC.url_matches('')(c) #匹配URL
EC.url_to_be('')(c)  #精確匹配
EC.url_changes('')(c) #不完全匹配
EC.visibility_of_element_located('')(c) #判斷某個元素是否可見,可見代表元素非隱藏元素
EC.visibility_of('')(c)   #跟上面一樣,不過是直接傳定位到的element
EC.presence_of_all_elements_located('')(c) #判斷是否至少有1個元素存在於dom樹中
EC.visibility_of_any_elements_located('')(c) #判斷是否至少一個元素可見,返回列表
EC.visibility_of_all_elements_located('')(c) #判斷是否所有元素可見,返回列表
EC.text_to_be_present_in_element('')(c) #判斷元素中的text是否包含了預期的字符串
EC.text_to_be_present_in_element_value('')(c)#判斷元素中value屬性是否包含預期的字符串
EC.frame_to_be_available_and_switch_to_it('')(c) # 判斷該frame是否可以switch進去
EC.invisibility_of_element_located('')(c) #判斷某個元素是否不存在於dom樹或不可見
EC.element_to_be_clickable('')(c) #判斷某個元素中是否可見並且可點擊
EC.staleness_of('')(c)  #等某個元素從dom樹中移除
EC.element_to_be_selected('')(c)  #判斷某個元素是否被選中了,一般用在下拉列表
EC.element_located_to_be_selected('')(c) #判斷元組中的元素是否被選中
EC.element_selection_state_to_be('')(c) #判斷某個元素的選中狀態是否符合預期
EC.element_located_selection_state_to_be('')(c) #跟上面一樣,只不過是傳入located
EC.number_of_windows_to_be('')(c)  #判斷窗口中的數字是否符合預期
EC.new_window_is_opened('')(c)  #判斷新的窗口是否打開
EC.alert_is_present('')(c)  #判斷頁面上是否存在alert
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

這就是它全部的方法了,簡直不要多簡單。

十一、選擇

剛剛講過判斷,現在我們來說說選擇,選擇無非就是挑好的扔爛的,順着思路來不會錯,總體來講還是挺簡單的,如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.select import Select
import time
c=webdriver.Chrome(executable_path=r'./chromedriver.exe')
c.implicitly_wait(10)
c.get('http://www.juliwz.cn/forum.php')
s=Select(c.find_element_by_id('ls_fastloginfield'))#實例化
res=s.all_selected_options#全部選中子項
res1=s.options#全部子項
print(res)
print(res1)
time.sleep(3)
c.close()
c.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

web自動化測試框架-----Selenium大揭秘

發覺主流網站都沒有Select這個標簽,於是找了個很冷門的網站,就一個Select。Select里面的方法也是相當多的,如下:

s.first_selected_option  #第一個選中的子項
s.select_by_index(index) #根據索引選擇
s.select_by_value(value)   #根據值來選擇
s.select_by_visible_text(text)  #根據選項可見文本
s.deselect_by_index(index)   #根據索引來取消選擇
s.deselect_by_value(value)   #根據值來取消選擇
s.deselect_by_visible_text(text)  #根據可見文本來取消選擇
s.deselect_all()                #取消所有選擇
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

十二、顯示等待和隱式等待

想必大家應該聽過這個概念,顯示等待就是瀏覽器在我們設置的時間內不斷尋找,等到元素后才繼續執行,如果沒在規定時間內找到,也會拋異常;而隱式等待則是我們設置時間,然后程序去找元素,期間會不斷刷新頁面,到了時間仍然沒找到就拋異常。這里有個常用的模塊專門用來實現顯示等待和隱式等待的,它就是”wait“,我們來看看吧。如下:

from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
c=webdriver.Chrome(executable_path=r'C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chromedriver.exe')
c.get('https://www.baidu.com/')
su=WebDriverWait(c,10).until(lambda x:x.find_element_by_id('su')) 
su.location_once_scrolled_into_view
print(su.get_attribute('value'))
time.sleep(3)
c.close()
c.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

隱式等待很簡單,就一行代碼,如下:

c.implicitly_wait(10)
  • 1

它的等待時間適用於全局的環境,也就是任何地方找不到某個元素,它都將發揮作用,如果找得到,則不會產生作用。

十三、總結

Selenium的內容其實還是挺豐富的,它還有手機端的自動化測試框架,不過小編先把WEB端講完就可以了,畢竟也寫了這么多了,日后有時間再慢慢了解。大家如果是對觸摸活動事件感興趣的也可以看看“touch_actions"這個模塊。這個模塊里集成的都是關於觸摸屏的操作,里面也有很多的方法,小編之所以能把Selenium一天學完,還是Selenium模塊中的文檔比較給力,主要是介紹的比較好,讓人能輕松聯想到方法的使用,感激開源作者的無私奉獻。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM