1. 程式人生 > 其它 >web自動化之selenium

web自動化之selenium

閱讀目錄

selenium簡介

Selenium官方文件

Selenium是一款用於Web程式的自動化測試工具。Selenium可以直接執行在瀏覽器中,模擬使用者操作。Selenium支援的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等,但一般建議使用Firefox、Chrome瀏覽器【相容性好】。Selenium支援跨平臺(Linux、wins)、跨語言(java、Python、ruby、php等),既能錄製指令碼也可手動編寫測試指令碼。

selenium架構圖(來源霍格沃茲教學圖片)

環境搭建(以win10為主)

1、下載瀏覽器對應的driver,並給driver配置環境變數

  Chrome瀏覽器,對應的driver淘寶映象:https://registry.npmmirror.com/binary.html?path=chromedriver/,選擇與本地Chrome瀏覽器對應的版本;

  Firefox瀏覽器,對應的driver淘寶映象:https://registry.npmmirror.com/binary.html?path=geckodriver/,選擇最新的淘寶映象即可;

  driver映象檔案,指定目錄儲存然後把目錄配置到環境變數;

  補充:

  1、啟動Firefox報:selenium.common.exceptions.WebDriverException: Message: Service geckodriver unexpectedly exited. Status code was: 64

    解決:需要把geckodriver.exe放在python安裝目錄下

  2、啟動Chrome報:selenium.common.exceptions.WebDriverException: Message: unknown error: Failed to create Chrome process.

    解決:開啟Chrome瀏覽器屬性->相容性,取消管理員操作 即可解決

2、驗證driver配置

     cmd->chromedriver | chromedriver --version    

     cmd->geckodriver --version

Selenium+Python啟動web應用demo

def open_browser():
    driver = webdriver.Chrome()
    driver.get('https://ceshiren.com/')
    time.sleep(2)
    driver.refresh()
    driver.get("www.baidu.com")

報錯:

 解決:driver.get("http://www.baidu.com") url地址必須要加上http或https協議。

 元素載入等待

 強制等待:time.sleep()  忽略

   隱式等待:只關注元素是否找到,不含是否可操作,語法:driver.implicitly_wait(3)   

      一般隱式等待配置在程式碼開始執行的地方,隱式等待是全域性生效,在所有find_element動作之前就執行此程式碼

  顯示等待:更關注元素是否可操作性。語法:WebDriverWait().until()  or  WebDriverWait().until_not()

         示例: WebDriverWait(driver例項, 最長等待時間, 輪詢時間).until(結束條件)

def wait_until():
    driver = webdriver.Chrome()
    driver.get("https://vip.ceshiren.com/#/ui_study")
    WebDriverWait(driver, 10).until(
        expected_conditions.element_to_be_clickable(
            (By.CSS_SELECTOR, '#success_btn')))
    driver.find_element(By.CSS_SELECTOR, "#success_btn").click()
顯示等待

元素定位

 Selenium提供了八種定位方式:https://www.selenium.dev/documentation/webdriver/elements/locators/

常用定位方式有:css selector、xpath、ID、name,語法:driver.find_element(By.方式, '表示式'),重點為:css selector

css selector定位:

  相鄰兄弟選擇器: + (只是相鄰的一個兄弟)
  後續兄弟選擇器: ~ (元素同級下之後所有兄弟)
  父子元素選擇器: >
  後代選擇器: 空格

  demo 案例:來源於:https://blog.csdn.net/qq_36234441/article/details/115481192

  
#input 選擇id為input的節點

.Volvo 選擇class為Volvo的節點

div#radio>input 選擇id為radio的div下的所有的input節點

div#radio input 選擇id為radio的div下的所有的子孫後代input節點

div#radio>input:nth-of-type(4) 選擇id為radio的div下的第4個input節點

div#radio>nth-child(1) 選擇id為radio的div下的第1個子節點

div#radio>input:nth-of-type(4)+label 選擇id為radio的div下的第4個input節點之後挨著的label節點

div#radio>input:nth-of-type(4)~labe 選擇id為radio的div下的第4個input節點之後的所有label節點

input.Vovlo[name=‘identity’] 選擇class為.Volvo並且name為identity的input節點

input[name=‘identity’][type=‘radio’]:nth-of-type(1) 選擇name為identity且type為radio的第1個input節點

input[name^=‘ident’] 選擇以ident開頭的name屬性的所有input節點

input[name$=‘entity’] 選擇以’entity’結尾的name屬性的所有input節點

input[name*=‘enti’] 選擇包含’enti’的name屬性的所有input節點

div#radio>*.not(input) 選擇id為radio的div的子節點中不為input的所有子節點

input:not([type=‘radio’]) 選擇input節點中type不為radio的所有節點
View Code