Selenium(3)-webUI自動化的Weddriver常見操作方法匯總

1 元素的操作方法

常見元素操作方法:
1、元素.send_keys() ,元素的輸入方法,針對input
2、元素.click(),點擊元素方法,針對link(鏈接)
3、元素.clear(),清空元素的信息,針對input,在輸入之前,需要清空操作,確保輸入的信息是我們所需要的

4、實例

# 1、導(dǎo)包
from time import sleep
from selenium import webdriver

# 2、實例化瀏覽器對象:類名()
driver = webdriver.Chrome()
# 3、打開網(wǎng)頁包含協(xié)議頭
driver.get('https://www.baidu.com/')
# 4、實施操作
# ele1= driver.find_element('id','s_kw_wrap').clear() ## 清空輸入框
ele2 = driver.find_element('id','kw').send_keys('selenium自動化') # 輸入檢索數(shù)據(jù)
ele = driver.find_element('id','su').click() # 點擊操作,查看檢索結(jié)果
sleep(3)
# 5、關(guān)閉網(wǎng)頁
driver.quit()

2 瀏覽器操作模塊

1、導(dǎo)入webdriver模塊:from selenium import webdriver
2、實例化瀏覽器:driver = webdriver.Chrome()
3、常見瀏覽器操作方法

瀏覽器操作動作 說明
driver.maximize_window() 最大化瀏覽器
driver.minimize_window() 最小化瀏覽器
driver.set_window_size(w,h) 設(shè)置瀏覽器大小 單位像素
driver.set_window_position(x,y) 設(shè)置瀏覽器位置
driver.current_url 獲取當(dāng)前頁面url信息
driver.title 獲取當(dāng)前頁面title信息
driver.get_cookie 獲取cookie
driver.get_cookies 獲取所有cookie
driver.delete_all_cookies() 刪除所有cookie
driver.delete_cookie() 刪除指定cookie
driver.get_window_position 獲取窗口位置
driver.get_window_rect 獲取窗口矩形
driver.get_window_size 獲取窗口大小
driver.back() 后退操作
driver.forward() 前進操作
driver.refrensh() 刷新操作
driver.close() 關(guān)閉當(dāng)前主窗口(主窗口:默認啟動那個界面,就是主窗口)
driver.quit() 關(guān)閉driver對象啟動的全部頁面

4、實例

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.maximize_window() # 窗口最大化
sleep(1)
driver.set_window_size(1000, 1000) # 設(shè)置瀏覽器寬,高
sleep(1)
driver.set_window_position(200, 200)# 設(shè)置窗口瀏覽器位置  
sleep(3)
driver.quit()

3 鍵盤操作模塊

1、導(dǎo)入鍵盤模塊的包:from selenium.webdriver.common.keys import Keys
2、send_keys()常用于模擬鍵盤輸入,也可以用于輸入鍵盤上
的按鍵,甚至是組合鍵,如 Ctrl+a、Ctrl+c 等(不區(qū)分大小寫)。

表達式 說明
send_keys(Keys.BACK_SPACE) 刪除鍵(BackSpace)
send_keys(Keys.SPACE) 空格鍵(Space)
send_keys(Keys.TAB) 制表鍵(Tab)
send_keys(Keys.ESCAPE) 回退鍵(Esc)
send_keys(Keys.ENTER) 回車鍵(Enter)
send_keys(Keys.CONTROL,‘a(chǎn)’) 全選(Ctrl+a)
send_keys(Keys.CONTROL,‘c’) 復(fù)制(Ctrl+c)
send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+x)
send_keys(Keys.CONTROL,‘v’) 粘貼(Ctrl+v)
send_keys(Keys.F1) 鍵盤 F1
send_keys(Keys.F12) 鍵盤 F12

實例:

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains

# 模擬按下Ctrl+A鍵
ActionChains(driver).key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform()
 driver.find_element_by_xpath(“xpath”).send_keys(Keys.ENTER)# 按下enter
driver.find_element_by_xpath(“xpath”).send_keys(“text”) # 鍵盤輸入

4 鼠標操作模塊

1、導(dǎo)入鼠標操作模塊的包:from selenium.webdriver import ActionChains
2、鼠標操作模塊的語法

# 1、鏈式寫法
ActionChains(driver).動作1.動作2.perform()
# 2、分布執(zhí)行寫法
myaction=ActionChains(driver) # 實例化
myaction.動作1
myaction.動作2
myaction.perfrom()

3、常見的鼠標操作

動作 說明
click(self,on_element=None) 左鍵
context_click(self,_on_element=None) 右鍵
double_click(self,on_element=None) 雙擊
move_to_element(self,to_element) 鼠標移動到某個元素(懸停)
drag_and_drop(self,source,target) 拖拽到某個元素然后松開
drag_and_drop_by_offset(self,source,xoffset,yoffset) 拖拽到某個坐標然后松開
key_down(self,value,element=None) 按下某個鍵
key_up(self,value,element=None) 松開某個鍵
move_by_offset(self,xoffset,yoffset) 鼠標從當(dāng)前位置移動到某個坐標
move_to_element_with_offset(self,to_element,xoffsety,yoffset) 移動到距某個元素(左上角坐標) 多少距離的位置
release(self,on_element=None) 在某個元素位置松開鼠標左鍵
send_keys(self,*keys_to_send) 發(fā)送某個鍵到當(dāng)前焦點的元素
send_keys_to_element(self,element,*keys_to_send) 發(fā)送某個鍵到指定元素
click_and_hold(self,on_element=None) 按住左鍵不放

注意:selenium 框架雖然提供了 鼠標右鍵方法,但是沒有提供選擇右鍵菜單方法,需要選擇郵件菜單,可以通過鍵盤快捷鍵操作實現(xiàn)
4、實際應(yīng)用

from selenium.webdriver import ActionChains

#鼠標左鍵單擊
driver.find_element_by_xpath(“xpath”).click()  
# 鼠標右鍵單擊:
Actions(driver).context_click(driver.find_element_by_xpath(“xpath”)).perform()
# 鼠標懸停:
Actions(driver).move_to_element(driver.find_element_by_xpath(“xpath”)).perform()
# 鼠標拖拽:
Actions(driver).drag_and_drop(source, target).perform()

5 選擇Select操作模塊(下拉框)

1、導(dǎo)入select模塊:from selenium.webdriver.support.select import Select
2、方法說明

select_by_visible_text('男生') # 顯示的文本定位
select_by_value('張三') # value的屬性值定位
select_by_index(0) # 通過索引定位
deselect_all() # 反選所有

3、實例
頁面

<select id="fruit">
  <option value="apple">蘋果</option>
  <option value="banana">香蕉</option>
  <option value="orange">橙子</option>
</select>

定位:

from selenium import webdriver
from selenium.webdriver.support.ui import Select

# 創(chuàng)建一個Chrome瀏覽器實例
driver = webdriver.Chrome()
# 打開網(wǎng)頁
driver.get("http://example.com")
# 定位下拉框元素
element = driver.find_element_by_id("fruit")
# 將定位到的元素轉(zhuǎn)換成Select類型
select = Select(element)
# 通過value屬性選擇選項
select.select_by_value("banana")
# 關(guān)閉瀏覽器
driver.quit()

6 截圖操作模塊

語法:driver.get_screenshot_as_file(imgepath), imagepath:圖片保存的目錄地址及文件名稱

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('selenium')
# 截圖方法,建議使用png格式 , ./為當(dāng)前路徑,  ../為上一級路徑
driver.get_screenshot_as_file('./info.png')
sleep(3)
driver.quit()

7 三種等待

等待:頁面元素全部加載出來時,元素才能正常定位,如果不等待,那么可能出現(xiàn)定位的元素還沒加載出來,從而定位失敗
三種等待
1、強制等待sleep:在代碼中設(shè)置一個固定的等待時間,無論頁面是否加載完成都會等待一段時間后繼續(xù)執(zhí)行下一步操作。

from selenium import webdriver
import time

driver = webdriver.Chrome()

driver.get("https://www.baidu.com")
time.sleep(10) # 強制等待10秒
element = driver.find_element_by_id("kw")

2、顯式等待WebDriverWait:針對單個元素生效,在規(guī)定的時間內(nèi)找到元素,找到了就執(zhí)行下一步,沒有找重新查找,直到超時則拋出異常(TimeoutException)。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()

driver.get("https://www.baidu.com")
wait = WebDriverWait(driver, 10) # 設(shè)置顯式等待時間為10秒
element = wait.until(EC.presence_of_element_located((By.ID, "kw")))

3、隱式等待 implicitly_wait:針對全局元素生效,在代碼中設(shè)置一個等待時間,如果在規(guī)定時間內(nèi)頁面加載完成,則繼續(xù)執(zhí)行下一步操作,否則等待時間結(jié)束后拋出異常。

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
# 1、獲取瀏覽器驅(qū)動對象
driver.get('www.baidu.com')
# 2、窗口最大化
driver.maximize_window()
# 3、設(shè)置隱式等待10s
driver.implicitly_wait(10)
ele = driver.find_element_by_id('kw')
ele.send_keys('zhangyisan')
sleep(3) # 強制等待
driver.quit()

8 js操作模塊(系統(tǒng)彈框處理,滾動條拉動)

1、系統(tǒng)彈框處理:使用js實現(xiàn)
2、滾動條處理:使用js實現(xiàn)

滾動條處理步驟:
1、設(shè)置操作滾動條的操作語句:js_down="window.scollTo(0,1000)",0表示左邊距(水平滾動條),1000表示上邊距(垂直滾動條)
2、調(diào)用執(zhí)行js方法,把設(shè)置js語句傳入方法中:driver.execute_script(js_down)

實例

"""
滾動條:selenium中沒有滾動條方法,需要js代碼實現(xiàn)
1、準備js代碼:"window.scrollTo(0, 1000)"
2、執(zhí)行js代碼:driver.execute_script(js的變量)
"""
from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()

driver.get('www.test.coml')
sleep(2)
# 1、準備js代碼
js_down = "window.scrollTo(0, 1000)"
# 2、執(zhí)行js代碼
driver.execute_script(js_down)
sleep(3)
driver.quit()

9 三種切換(自定義彈出框處理)

1、 alert切換: driver.switch_to.alert.方法
自定義彈窗:前端代碼封裝
彈出框的三種形式:alert(警示)、confirm(確認)、prompt(提示)
處理彈出框的步驟:
1、需要切換到對話框:driver.switch_to.alert.方法
2、處理對話框

alert.text  # 獲取文本
alert.accept() # 接受alert,只能用這個
alert.dismiss() # 取消,alert,confirm,prompt都可用

實例:

from selenium import webdriverfrom time import sleep
from selenium.webdriver.common.alert import Alert
from selenium.webdriversupport.wait import WebDriverWait
from selenium.webdriversupport import expected conditions as EC
driver = webdriverChromel()
driver.get(r'www.test.com')
test flag = 5
if test flag==5.
  # 穩(wěn)定的切換
  # 問題: 點擊了alert之后立即去accept等操作,有可能會無法及時彈出alert, 如果定位不到元素,需要等待
  driver.find_element(id', confirm).click()
  sleep(2) #為了演示
  alert = WebDriverWait(driver,5,0.5).until(ECalert_is_present())
  alert.accept()
if test flag==4; #另外一種實現(xiàn)
  driver.find_element(id , confirm').click)
  sleep(2)
  Alert(driver).accept0 #不展開
if test flag ==3:
  driver.find_element(id, prompt ).click()
  sleep(2)
  driver.switch_to.alert.send_keys(helloworld) #輸入無顯示
  sleep(2)
  driver.switch_to.alert.accept() #這里看到helloworld
if test flag ==2:
  driverfind element(id', confirm').click()
  sleep(2)
  driver.switch_to.alert.dismiss() #輸出你選擇了取消
if test flag ==1:
  driver.find element(id', alert').click()
  sleep(2)
  driver.switch_to.alert.accept()

2、frame和iframe 切換:
說明:frame和iframe的定位以及語法格式是一模一樣的,此處只作frame介紹
識別frame-->devtools,console界面的top,frame
定位frame-->xpath定位法(需要切換到frame,一般可以獲取到元素的信息,但是執(zhí)行代碼時無法定位,因此需要先切換到frame)
方法:

driver.switch_to.frame(frame_referrence)
# frame_referrence一般為 
# --frame元素的id屬性的值(如果存在)
# --frame元素的name屬性的值(如果存在)
# --frame元素的索引(從0開始)
# --frame元素本身,即find_element得到的對象
driver.switch_to.parent_frame() # 父框架,相當(dāng)于Linux下的 ..
drive.switch_to.default_content() # 默認的路徑(主頁面),相當(dāng)好與Linux下的 ~,回到主頁面的方法

示例:
一般的frame切換:frame切換/窗口切換 | 白月黑羽 (byhy.net)](https://www.byhy.net/tut/auto/selenium/frame/)

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
 
# 導(dǎo)入驅(qū)動 括號里可填驅(qū)動的具體路徑
driver = webdriver.Chrome()
# 練習(xí)一
# 打開網(wǎng)頁
driver.get("https://cdn2.byhy.net/files/selenium/sample2.html")
#  進入內(nèi)嵌Frame
driver.switch_to.frame('innerFrame')
elements = driver.find_elements(By.CLASS_NAME, 'animal')
# 循環(huán)輸出元素
for element in elements:
    print(element.text)
#  再次返回到默認區(qū)域
driver.switch_to.default_content()
 
driver.find_element(By.ID, 'outerbutton').click()
 
show = driver.find_element(By.ID, 'add')
show1 = show.find_element(By.TAG_NAME, 'li')
print(show1.text)
# 關(guān)閉頁面
driver.quit()

連續(xù)的frame切換:drive.switch_to.default_content()

"""
需要默認切換到frame
方法:driver.switch_to.default_content()
"""
from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()

driver.get('www.example.com')

driver.switch_to.frame('idframe1')
driver.find_element_by_id('userA').send_keys('admin')

driver.switch_to.default_content()
driver.switch_to.frame('myframe2')
driver.find_element_by_id('userB').send_keys('admin4')
sleep(3)
driver.quit()

3、windows切換:
切換方法:每一個窗口都有唯一的窗口句柄值,可以通過句柄來切換

driver.switch_to.window(window_name) #切換窗口
driver.current_window_handle # 獲取當(dāng)前窗口的句柄
driver.window_handles #獲取當(dāng)前由driver啟動所有窗口句柄

舉例:

from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driverget(http://12141.14.39:8088/index.html)
first win = driver.current window handle #比如要保留的是第一個窗口,那就記錄下來sleep(2)
driver.execute script(window.open(https://www.baidu.com")#打打開新的窗
cur wins = driver.window handles #當(dāng)前的所有貨
driver.switch to.window(cur winsl-1)#切換到新的窗(假設(shè)就是2個窗口,多個要遍歷,而目新開的就在最后sleep(2)
driver.close0) #切換過去后關(guān)閉掉
driver.switch to.window(first win) #切換到你要保留的那個窗
print(driver.current url)driver.find element( id',username').send keys('123')

10 文件上傳

1、input標簽的文件上傳:使用send_keys
2、非input標簽的文件上傳

  • pywinauto 方法
from pywinauto.keyboard import send_keys
time.sleep(3)
send_keys(r'd:\1.png')
send_keys({VK_RETURN}) # 回車操作符號 
  • pywin32 方法
import pywin32com.client
sh = win32com.client.Dispatch('WScript.shell')
time.sleep(3)
sh.SendKeys(r'd:\1.png'+'\n')
  • pyautogui方法
from pywinauto.keyboard import send_keys
time.sleep(3)
send_keys(r'd:\1.png')
send_keys({VK_RETURN}) # 回車操作符號 

11 截圖

截圖方法:driver.get_screenshot_as_file(imgepath),imgpath為截圖保存的路徑
舉例:

from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('張大仙')
# 截圖方法,建議使用png格式 , ./為當(dāng)前路徑,  ../為上一級路徑
driver.get_screenshot_as_file('./info.png')
sleep(3)
driver.quit()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容