在bug管理系統上,按項目查詢出來所有的bug,然后點擊導出按鈕,導出這個項目所有的bug,用selenium+python實現
操作步驟如下:
1、打開網址url
2、輸入用戶名和密碼,點擊登錄(不需要驗證碼)
3、在項目框內輸入項目編碼,點擊查詢按鈕
4、點擊導出按鈕,彈框提示導出成功(導出不是同步導出的,這里點擊導出只是發起了一個導出操作,等待1到2分鍾后,再去導出頁面查看是否導出成功)
5、去導出頁面下載導出的文件 xxxxxx.xls
因為之前沒有用過爬蟲工具,但是知道有個selenium這個自動化測試框架,本身這個需求就很簡單,找到幾個輸入框和按鈕,順序操作就行,登錄也不需要驗證碼
python用的是3.5版本,selenium用的是3.3 GeckoDriv
from selenium import webdriver from selenium.webdriver.common.keys import Keys browser = webdriver.Firefox() browser.get('http://www.yahoo.com') assert 'Yahoo!' in browser.title elem = browser.find_element_by_name('p') # Find the search box
elem.send_keys('seleniumhq' + Keys.RETURN) browser.quit()
先在selenium上抄了一個例子,一運行,發現了少了GeckoDriver,下載GeckoDriver,放在一個path路徑下
from selenium import webdriver from selenium.webdriver.common.keys import Keys browser = webdriver.Firefox() browser.get('http://www.xxxxxxx.com') #這里地址用的是查詢頁面,如果沒有登錄就會跳轉到登錄頁面,登錄之后會自動跳到查詢頁面 #assert 'Yahoo!' in browser 這行不要了
username=browser.find_element_by_name('uid')#獲取username輸入框
username.clear() #先清空輸入框
username.send_keys(username) #輸入用戶名
password=browser.find_element_by_name('password')#獲取username輸入框
password.clear() #先清空輸入框
password.send_keys(password) #輸入密碼
password.send_keys(Keys.RETURN) #輸入密碼之后輸入RETURN特殊鍵實現登錄,不用再定位登錄按鈕
以上代碼就實現了用戶登錄
from selenium import webdriver from selenium.webdriver.common.keys import Keys from time #time。sleep()實現延時
browser = webdriver.Firefox() browser.get('http://www.xxxxxxx.com') #這里地址用的是查詢頁面,如果沒有登錄就會跳轉到登錄頁面,登錄之后會自動跳到查詢頁面 #assert 'Yahoo!' in browser 這行不要了
username=browser.find_element_by_name('uid')#獲取username輸入框
username.clear() #先清空輸入框
username.send_keys(username) #輸入用戶名
password=browser.find_element_by_name('password')#獲取username輸入框
password.clear() #先清空輸入框
password.send_keys(password) #輸入密碼
password.send_keys(Keys.RETURN) #輸入密碼之后輸入RETURN特殊鍵實現登錄,不用再定位登錄按鈕
time.sleep(3) #延時3秒等待頁面跳轉
browser.find_element_by_name('項目').send_keys(ID) #定位到項目ID輸入框並輸入項目ID
browser.find_element_by_id('search').click() #定位到搜索按鈕,並點擊
time.sleep(3) #延時等待搜索結果
browser.find_element_by_xpath('\\').click() #定位到導出按鈕,並點擊
time.sleep(3) #延時 彈出導出提示框,提示用戶到另外一個頁面下載導出數據
browser.find_element_by_xpath('\\').click()#定位到彈出框上的確定按鈕,點擊確定隱藏提示框,以方便導出下一個項目的bug列表
browser.get('http://www.yyyyyy.com') #跳轉到下載頁面
filelist=browser.find_elements_by_xpath('\\') #定位到文件列表中所有的文件
for file in filelist: file.click() #點擊保存文件 這里有個問題,firefox保存文件會有一個提示框,讓你選擇是保存還是打開
百度了一下,在這里找到了方法http://www.51testing.com/html/50/598350-860378.html
設置firefox的Profile:
browser.download.dir
:指定下載路徑
browser.download.folderList
:設置成 2
表示使用自定義下載路徑;設置成 0
表示下載到桌面;設置成 1
表示下載到默認路徑
browser.download.manager.showWhenStarting
:在開始下載時是否顯示下載管理器
browser.helperApps.neverAsk.saveToDisk
:對所給出文件類型不再彈出框進行詢問
profile = webdriver.FirefoxProfile() profile.set_preference('browser.download.dir', 'd:\\') profile.set_preference('browser.download.folderList', 2) profile.set_preference('browser.download.manager.showWhenStarting', False) profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/zip') driver = webdriver.Firefox(firefox_profile=profile)
最后就是延時,剛開始用的是time.sleep()實現延時,運行很慢,百度一下,在這里找到了,http://www.cnblogs.com/zl0372/p/selenium_python.html
通過implicitly_wait()實現智能等待
最終代碼:
from selenium import webdriver from selenium.webdriver.common.keys import Keys from time #time。sleep()實現延時
profile = webdriver.FirefoxProfile() profile.set_preference('browser.download.dir', 'd:\\') profile.set_preference('browser.download.folderList', 2) profile.set_preference('browser.download.manager.showWhenStarting', False) profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/zip') browser = webdriver.Firefox(firefox_profile=profile) browser.get('http://www.xxxxxxx.com') #這里地址用的是查詢頁面,如果沒有登錄就會跳轉到登錄頁面,登錄之后會自動跳到查詢頁面 #assert 'Yahoo!' in browser 這行不要了
username=browser.find_element_by_name('uid')#獲取username輸入框
username.clear() #先清空輸入框
username.send_keys(username) #輸入用戶名
password=browser.find_element_by_name('password')#獲取username輸入框
password.clear() #先清空輸入框
password.send_keys(password) #輸入密碼
password.send_keys(Keys.RETURN) #輸入密碼之后輸入RETURN特殊鍵實現登錄,不用再定位登錄按鈕
browser.implicitly_wait(5) #延時3秒等待頁面跳轉
browser.find_element_by_name('項目').send_keys(ID) #定位到項目ID輸入框並輸入項目ID
browser.find_element_by_id('search').click() #定位到搜索按鈕,並點擊
browser.implicitly_wait(5) #延時等待搜索結果
browser.find_element_by_xpath('\\').click() #定位到導出按鈕,並點擊
leep(3 #延時 彈出導出提示框,提示用戶到另外一個頁面下載導出數據
browser.find_element_by_xpath('\\').click()#定位到彈出框上的確定按鈕,點擊確定隱藏提示框,以方便導出下一個項目的bug列表
browser.get('http://www.yyyyyy.com') #跳轉到下載頁面
filelist=browser.find_elements_by_xpath('\\') #定位到文件列表中所有的文件
for file in filelist: file.click() #點擊保存文件