Python+Selenium+Chrome 自動化測試(下)

---恢復內容開始---css

設置元素等待html

webDriver提供了兩種類型的等待:顯式等待和隱式等待python

顯式等待不說了,就用簡單的隱式等待便可web

 

隱式等待

WebDriver提供了implicitly_wait()方法來實現隱式等待,默認設置爲0。它的用法相對來講要簡單得多。windows

from selenium import webdriver
# 導入異常類型 from selenium.common.exceptions import NoSuchElementException from time import ctime driver = webdriver.Chrome() # 設置隱式等待爲10秒 driver.implicitly_wait(10)
driver.get("http://www.baidu.com") try: print(ctime()) driver.find_element_by_id("kw22").send_keys('selenium')

# 捕捉超時異常 except NoSuchElementException as e: print(e) finally: print(ctime()) driver.quit()

implicitly_wait()默認參數的單位爲秒,本例中設置等待時長爲10秒。首先這10秒並不是一個固定的等待時間,它並不影響腳本的執行速度。其次,它並不針對頁面上的某一元素進行等待。當腳本執行到某個元素定位時,若是元素能夠定位,則繼續執行;若是元素定位不到,則它將以輪詢的方式不斷地判斷元素是否被定位到。假設在第6秒定位到了元素則繼續執行,若直到超出設置時長(10秒)尚未定位到元素,則拋出異常。瀏覽器

 

定位一組元素的方法(比以前的單個元素多加了個s)cookie

find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()

例:ui

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
sleep(1)

# 定位一組元素
texts = driver.find_elements_by_xpath('//div/h3/a')

# 循環遍歷出每一條搜索結果的標題
for t in texts:
    print(t.text)

driver.quit()

 

 窗口切換spa

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")

# 得到百度搜索窗口句柄
sreach_windows = driver.current_window_handle

driver.find_element_by_link_text('登陸').click()
driver.find_element_by_link_text("當即註冊").click()

# 得到當前全部打開的窗口的句柄
all_handles = driver.window_handles # 進入註冊窗口
for handle in all_handles:
    if handle != sreach_windows:
       
        # 切換到句柄所表明的窗口
 driver.switch_to.window(handle) print('now register window!')
        driver.find_element_by_name("userName").send_keys('username')
        driver.find_element_by_name('password').send_keys('password')
        time.sleep(2)

 

警告框處理
code

在WebDriver中處理JavaScript所生成的alert、confirm以及prompt十分簡單,具體作法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,而後使用text/accept/dismiss/ send_keys等方法進行操做。


from
selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')

# 鼠標懸停至「設置」連接
link = driver.find_element_by_link_text('設置') ActionChains(driver).move_to_element(link).perform() # 打開搜索設置 driver.find_element_by_link_text("搜索設置").click()
time.sleep(1)
# 保存設置
driver.find_element_by_link_text("保存設置").click()
time.sleep(2)

# 打印警告框中的信息
print(driver.switch_to.alert.text)

# 經過driver.switch_to.alert()獲取警告框,accept()接受警告框
driver.switch_to.alert.accept()

driver.quit()

 

 下拉框.

 

from selenium import webdriver
from time import sleep
# 導入 Select類(Select類專門定位select標籤)
from selenium.webdriver.support.select import Select


driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')

# 鼠標點擊「設置」連接
driver.find_element_by_link_text('設置').click()
sleep(1)
# 打開搜索設置
driver.find_element_by_link_text("搜索設置").click()
sleep(2)

# 定位搜索結果顯示條數
sel = driver.find_element_by_xpath("//select[@id='nr']")


# <select name="NR" id="nr">

#   <option value="10" selected="">每頁顯示10條</option>

#   <option value="20">每頁顯示20條</option>

#   <option value="50">每頁顯示50條</option>

# </select>

# 以上是該下拉框的源碼.value值就在這裏找

# select_by_value(value)方法用於定位選項中的value值
Select(sel).select_by_value('50') # 顯示50條

driver.quit()

 

 

上傳文件

只須要定位到[上傳文件]元素,而後發送文件路徑便可

driver.find_element_by_name('file').send_keys("C:/Users/Administrator/Desktop/upload.html")

 

 

cookie信息

# 得到cookie信息
cookie= driver.get_cookies()

# 向cookie的name 和value中添加會話信息
driver.add_cookie({'name': 'key-aaaaaaa', 'value': 'value-bbbbbb'})

 

 

調用js代碼

js="window.scrollTo(100,450);"

# 調用js代碼的方法
driver.execute_script(js)

 

 

截圖方法

driver.get_screenshot_as_file("D:\\baidu_img.jpg")

 

 

關閉瀏覽器

# 關閉單個窗口
driver.close() 

# 關閉全部窗口
driver.quit() 

 

 

 

---恢復內容結束---

相關文章
相關標籤/搜索