python+selenium自動測試之WebDriver的經常使用API(基礎篇二)

本篇介紹一下python+selenium複雜操做的處理,基於python3.6,selenium3.141,詳細資料介紹查看官方API文檔,點擊這裏html

1、常見特殊狀況處理如iframe/彈窗處理python

有時候定位不到元素,是由於須要定位的元素在frame裏面,這個時候須要切換到對應的frame裏面,再去定位元素git

 1 # 切換frame
 2 driver.switch_to.frame("frame")  # 切入到id="frame"的嵌套中
 3 driver.switch_to.default_content()  # 退出當前frame, 退回到原來的主body
 4 driver.switch_to.parent_frame()  # 返回上一級父frame
 5 # 彈窗對話框處理
 6 driver.switch_to.alert.text  # 獲取網頁上的警告信息
 7 driver.switch_to.alert.accept  # 接受警告信息,告警彈窗對話框點擊肯定
 8 driver.switch_to.alert.dismiss  # 取消告警彈窗對話框
 9 driver.switch_to.alert.send_keys("context")  # 彈窗對話框中輸入context
10 # 切換窗口/瀏覽器
11 driver.window_handles  # 獲取全部瀏覽器句柄,通常用於for in 遍歷
12 driver.switch_to.window("handle")  # 切換到handle的窗口

2、等待時間的設置github

  隱形等待,設置全局元素等待超時時間。隱性等待是指當要查找元素,而這個元素沒有立刻出現時,告訴WebDriver 查詢Dom必定時間。默認值是0, 可是設置以後,這個時間將在WebDriver 對象實例整個生命週期都起做用。但這裏有一個弊端,那就是程序會在設定的時間內一直等待整個頁面加載完成,纔會執行下一步,有時候個別JS加載比較慢會比較浪費時間。web

1 # 設置隱性等待時間
2 driver.implicitly_wait(10)

  顯性等待,wait模塊的WebDriverWait()類,配合until或者until_not方法,再輔以一些判斷條件expected_conditions模塊,就能夠構成這樣一個場景:每通過多少秒就查看一次locator的元素是否可見,若是可見就中止等待,若是不可見就繼續等待直到超過規定的時間後,報超時異常;若是同時設置隱性等待和顯性等待,取最大等待時間。api

 1 # 設置顯性等待
 2 from selenium.webdriver.support import expected_conditions as EC
 3 """
 4  __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)
 5  - driver - Instance of WebDriver (Ie, Firefox, Chrome or Remote)
 6  - timeout - 超時時間
 7  - poll_frequency - 迭代間隔時間,停幾秒從新獲取一次,默認0.5S
 8  - ignored_exceptions - 超時時間內忽略的異常,默認只有NoSuchElementException
 9 """
10 WebDriverWait(driver, 20, 1).until(EC.presence_of_element_located((By.ID, 'foo')))

  expected_conditions模塊經常使用的判斷條件,這裏根據官方API翻譯一下,僅供參考瀏覽器

3、Cookie處理cookie

1 driver.get_cookies()  # 得到全部cookie信息
2 driver.get_cookie("name")  # 返回指定name的cookie信息
3 driver.add_cookie({'name': 'key', 'value': 'value'})  # 添加cookie 
4 driver.delete_cookie("name")  # 刪除指定name的cookie 
5 driver.delete_all_cookies()  # 刪除全部cookie

4、其餘操做(下拉框/文件上傳等)ui

1 # 下拉框處理
2 from selenium.webdriver.support.ui import Select
3 # when given "foo" this would select an option like: <option value="foo">Bar</option>
4 Select(driver.find_element_by_xpath('xpath')).select_by_value("foo")
5 # 上傳文件,使用send_keys()發送一個本地的文件路徑,從而達到上傳文件的目的
6 driver.find_element_by_name("file").send_keys('D:\\test_file.xlsx')
7 # 截圖,必須以".png"結尾
8 driver.get_screenshot_as_file("text.png")
相關文章
相關標籤/搜索