Selenium API高級

彈出框操作

 1) 進入到彈出框中
    driver.switch_to.alert

2) 接收警告
    accept()

3) 解散警告
    dismiss()

4) 發(fā)送文本到警告框
    send_keys(data)

鼠標(biāo)和鍵盤操作

手動測試時鍵盤的操作在selenium頁有實現(xiàn),關(guān)于鼠標(biāo)的操作由ActionChains()類來提供,關(guān)于鍵盤的操作由Key()類來提供

1)鼠標(biāo)操作

    導(dǎo)入動作鏈類,動作鏈可以儲存鼠標(biāo)的動作
    from selenium.webdriver import ActionChains     
    獲取元素                                                                                                                                el = driver.find_element_by_xxx(value)
    context_click(el)       對el執(zhí)行右擊
    執(zhí)行ActionChains中儲存的所有動作
                   perform()

1)鍵盤操作
鍵盤操作使用的是Keys類,一般配合send_keys使用

    * 導(dǎo)入
    from selenium.webdriver.common.keys import Keys

    * 常用鍵盤操作
        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,‘x’)     剪切(Ctrl+X)
        
        send_keys(Keys.CONTROL,‘v’)     粘貼(Ctrl+V)
        
        send_keys(Keys.F1)          鍵盤 F1
        ……
        send_keys(Keys.F12)             鍵盤 F12

瀏覽器等待

1) 為什么要進行等待?
    
    1.網(wǎng)速慢

    2.網(wǎng)站內(nèi)容過多

    3.如果不進行等待而直接定位元素,可能會拋出異常

2) selenium中等待的分類:
                         強制等待
    
    顯示等待
    
    隱式等待

導(dǎo)入定時等待庫

from time import sleep 或者 import time

time.sleep(10) # 表示強行等待10s在執(zhí)行下一句代碼 這種等待方式時間到了就會執(zhí)行下個語句,但比較死板,不能保證在等待的時間內(nèi)元素真正被加載了出來。而且如果等待的元素已經(jīng)被加載出來,還需要等待到時間才會執(zhí)行下一句,浪費時間。
driver.implicitly_wait(30) #等待30s

這個等待表示在規(guī)定的時間內(nèi)頁面的所有元素都加載完了就執(zhí)行下一步,否則一直等到時間截止,然后再繼續(xù)下一步。?這個方法的缺點是你需要的元素已經(jīng)加載出來了,但頁面還沒有加載完,再需要繼續(xù)等待頁面加載完才能執(zhí)行下一步操作。

注:隱式等待的作用域是全局,所以一般設(shè)置在整局代碼的頭幾行。
隱式等待采用全部設(shè)置,也就是說,你所有的findElement方法都會最多等待30s

需要導(dǎo)入的包

from selenium.webdriver.support.wait import WebDriverWait #導(dǎo)入顯性等待的包
from selenium.webdriver.support import expected_conditions as EC #判斷所需要的元素是否已經(jīng)被加載出來
from selenium.webdriver.common.by import By #定位

WebDriverWait類是由WebDirver 提供的等待方法。顯示等待明確的要等到某個元素的出現(xiàn),在設(shè)置時間內(nèi)每隔x秒去判斷一下指定的元素是否加載完,加載完了就執(zhí)行下一步,否則繼續(xù)每隔x秒去判斷,指定時間截止。如果超時就會拋出異常。

例如:WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.CLASS_NAME,"g-hu")))

強制等待:傻瓜式等待,不智能?隱式等待:全局通用,只需設(shè)置一次,很智能(等到了就走,不會浪費時間)
顯式等待:等待元素處于特定條件的時候使用,很智能(等到了就走,不會浪費時間)

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
driver=webdriver.Chrome()
# driver.implicitly_wait(20)
driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").send_keys("淘寶")
driver.find_element_by_id("su").click()

driver.implicitly_wait(20)
driver.find_element_by_xpath("/html/body/div[2]/div[4]/div[1]/div[3]/div[2]/div/div/div[1]/div/div[1]/div/div/h3/div/a[1]").click()
#獲取所有窗口的句柄
handles = driver.window_handles
#通過窗口的句柄進入的窗口
driver.switch_to.window(handles[1])
# 登錄
driver.find_element_by_xpath("/html/body/div[1]/div/ul[1]/li[1]/div/a[1]").click()
driver.find_element_by_xpath("/html/body/div/div[2]/div[3]/div/div/div/div[1]/i").click()
# driver.find_element_by_name("fm-login-id").send_keys("17835720703")
# driver.find_element_by_name("fm-login-password").send_keys("ccc123...")
driver.find_element_by_id("J_search_key").clear()
driver.find_element_by_id("J_search_key").send_keys("華碩飛行堡壘9電腦")

#定位搜索按鈕并點擊
driver.find_element_by_xpath("/html/body/div[2]/div[1]/div[1]/div/div[1]/form/input").click()
#定位硬盤容量
# driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[3]/div[1]/div[14]/div/div[2]/div/div[3]/div[2]/div[1]/div/a[1]/span[2]").click()
#選擇電腦
driver.find_element_by_xpath("/html/body/div[2]/div[1]/div[2]/ul/li[1]/a/img").click()
# driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[3]/div[1]/div[21]/div/div/div[1]/div[3]/div[1]/div/div[1]/a/img").click()
#獲取所有窗口的句柄
handles = driver.window_handles
#通過窗口的句柄進入的窗口
driver.switch_to.window(handles[2])
#選擇內(nèi)存容量
driver.find_element_by_xpath("/html/body/div[5]/div/div[2]/div/div[1]/div[1]/div/div[4]/div/div/dl[1]/dd/ul/li[2]/a/span").click()
#選擇硬盤容量
driver.find_element_by_xpath("/html/body/div[5]/div/div[2]/div/div[1]/div[1]/div/div[4]/div/div/dl[2]/dd/ul/li[2]/a/span").click()
#選擇顏色
driver.find_element_by_xpath("/html/body/div[5]/div/div[2]/div/div[1]/div[1]/div/div[4]/div/div/dl[3]/dd/ul/li[3]/a/span").click()
#加入購物車
driver.find_element_by_xpath("/html/body/div[5]/div/div[2]/div/div[1]/div[1]/div/div[4]/div/div/div[2]/div[2]/a")
#進入購物車 刪除
driver.find_element_by_xpath("/html/body/div[2]/div[2]/div/ul/li[3]/a").click()
#刪除
driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[2]/div/div[2]/div[2]/div[1]/div/div[2]/div/div/div/div/ul/li[7]/div/a[2]").click()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容