標籤:sendkeys 通過 oam name src test data files efault
前言
檔案上傳是web頁面上很常見的一個功能,自動化成功中操作起來卻不是那麼簡單。
一般分兩個情境:一種是input標籤,這種可以用selenium提供的send_keys()方法輕鬆解決;
另外一種非input標籤實現起來比較困難,可以藉助autoit工具或者SendKeys第三方庫。
本篇以部落格園的上傳圖片為案例,通過send_keys()方法解決檔案上傳問題
一、識別上傳按鈕
1.點開部落格園編輯器裡的圖片上傳按鈕,彈出”上傳本地圖片”框。
2.用firebug查看按鈕屬性,這種上傳圖片按鈕有個很明顯的標識,它是一個input標籤,並且type屬性的值為file。
只要找到這兩個標識,我們就可以直接用send_keys()方法上傳檔案了。
二、定位iframe
1.這裡定位元影像片上傳按鈕情況有點複雜,首先它是在iframe上(不懂iframe的看這篇:Selenium2+python自動化14-iframe)
2.這個iframe的id是動態,且沒有name屬性,其它屬性也不是很明顯
3.通過搜尋發現,這個頁面上有兩個iframe,需要定位的這個iframe是處於第二個位置
4.可以通過標籤定位所有的iframe標籤,然後取對應的第幾個就可以了。
三、檔案上傳
1.先定位到檔案上傳按鈕,直接調用send_keys()方法就可以實現啦
# coding:utf-8
from selenium import webdriver
import time
profileDir = r‘C:\Users\Gloria\AppData\Roaming\Mozilla\Firefox\Profiles\1x41j9of.default‘
profile = webdriver.FirefoxProfile(profileDir)
driver = webdriver.Firefox(profile)
driver.implicitly_wait(30)
driver.get("http://www.cnblogs.com/yoyoketang/")
driver.find_element_by_link_text("新隨筆").click()
time.sleep(3)
# 點開編輯器圖片
driver.find_element_by_css_selector("img.mceIcon").click()
time.sleep(3)
# 定位所有iframe,取第二個
iframe = driver.find_elements_by_tag_name(‘iframe‘)[1]
# 切換到iframe上
driver.switch_to_frame(iframe)
# 檔案路徑
driver.find_element_by_name(‘file‘).send_keys(r"D:\test\xuexi\test\14.png")
非input標籤的檔案上傳,就不適用於此方法了,需要藉助autoit工具或者SendKeys第三方庫。
Selenium2+python自動化33-檔案上傳(send_keys)