作者:桃子df?
本文以一個(gè)頁(yè)面例子說明運(yùn)行自動(dòng)化腳本需要哪些步驟及實(shí)現(xiàn)過程中的報(bào)錯(cuò)匯總
具體實(shí)現(xiàn)功能:
登錄操作
進(jìn)入三級(jí)菜單
新建頁(yè)面輸入文本框值宝冕,輸入時(shí)間,進(jìn)入iframe智末,點(diǎn)擊提交按鈕
一 自動(dòng)化實(shí)現(xiàn)步驟
首先需要導(dǎo)入模塊名
有些功能selenium框架已經(jīng)封裝好了哨鸭,只需要我們直接調(diào)用就好
常用的導(dǎo)入功能
from selenium import webdriver? #導(dǎo)入webdriver驅(qū)動(dòng)
from time import sleep? #導(dǎo)入sleep函數(shù)
from selenium.webdriver.common.action_chains import ActionChains? #導(dǎo)入ActionChains 函數(shù)
from selenium.webdriver.support.select import Select#導(dǎo)入select函數(shù)
webdriver驅(qū)動(dòng):通過webdriver驅(qū)動(dòng)來調(diào)用瀏覽器
sleep函數(shù):正常網(wǎng)頁(yè)加載過程中斩熊,如果不通過時(shí)間等待再點(diǎn)擊元素是無法定位到元素里逆,從而報(bào)錯(cuò)进胯,sleep函數(shù)是自動(dòng)化過程中經(jīng)常用到的功能
ActionChains 函數(shù):ActionChains 是模擬鼠標(biāo)事件的函數(shù)
啟動(dòng)瀏覽器
所有的自動(dòng)化操作都是基于頁(yè)面打開的前提下,所以我們的首要步驟顯示要啟動(dòng)瀏覽器运悲。
在Selenium 中可以啟動(dòng)任何瀏覽器龄减,前提是需要下載相應(yīng)的瀏覽器驅(qū)動(dòng)
這里以chrom瀏覽器為例
代碼實(shí)現(xiàn):
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("excludeSwitches", ['enable-automation'])
driver = webdriver.Chrome(options=chrome_options)
driver.get("http://127.0.0.1:8080/portal-web/framework/login?")
driver.maximize_window()
功能實(shí)現(xiàn)
3.1 元素定位
剛接觸自動(dòng)化的同學(xué)可能都被元素定位搞的暈頭轉(zhuǎn)向
元素定位有八大方式(id、tagname班眯、class希停、xpath等等),到底使用哪一種呢
所有的元素定位方式我都用到了署隘,還是不能定位到元素這到底是什么原因呢
剛開始我也是這樣宠能,經(jīng)過一段時(shí)間的摸索發(fā)現(xiàn)原來是這樣~~
元素定位-id,id是唯一磁餐,通過id可定位任何元素
元素定位-xpath定位:其他定位方式都不會(huì)违崇,只要會(huì)xpath就能搞定定位問題
定位不到:考慮時(shí)間、窗體诊霹、ifame等因素
3.2 元素方法
click()-單擊(最常用)
driver.find_element_by_id('dlu').click()
send_keys? 文本框輸入內(nèi)容
driver.find_element_by_id('password').send_keys('11qq!!')
實(shí)現(xiàn)功能:登錄功能
driver.find_element_by_name("username").send_keys('b')#定位用戶名羞延,輸入值
driver.find_element_by_id('password').send_keys('11qq!!')#定位密碼,輸入值
driver.find_element_by_id('dlu').click()#點(diǎn)擊登錄按鈕
double_click? 雙擊
ActionChains(driver).double_click(ul1).perform()? ?
實(shí)現(xiàn)功能:雙擊進(jìn)入三級(jí)菜單
ul1=driver.find_element_by_xpath("http://*[text()='質(zhì)量基礎(chǔ)']")
ActionChains(driver).double_click(ul1).perform()#雙擊一級(jí)菜單
ul2=driver.find_element_by_xpath("http://*[text()='供應(yīng)商產(chǎn)品質(zhì)量維持認(rèn)證']")
ActionChains(driver).double_click(ul2).perform()#雙擊二級(jí)菜單
ul3=driver.find_element_by_xpath("http://*[text()='供應(yīng)商產(chǎn)品質(zhì)量維持認(rèn)證計(jì)劃']")
ActionChains(driver).double_click(ul3).perform()#雙擊三級(jí)菜單
sleep(3)
iframe 標(biāo)簽,這塊屬于自動(dòng)化的重點(diǎn)及難點(diǎn)
driver.switch_to.frame('data_iframe')#進(jìn)入標(biāo)簽
driver.switch_to.parent_frame() #跳回到上層標(biāo)簽
driver.switch_to.default_content()#退出標(biāo)簽
實(shí)現(xiàn)功能:三個(gè)iframe間切換操作
時(shí)間控件
時(shí)間控件正常操作是點(diǎn)擊并選擇時(shí)間
自動(dòng)化input標(biāo)簽由于readonly 屬性脾还,所以日期控件是不允許輸入的伴箩,那么我們主要通過js來刪除或者readonly制成否,這樣可以直接允許輸入鄙漏。
js = "$('.kendoDate').removeAttr('readonly')"? # jQuery嗤谚,移除屬性
driver.execute_script(js) #執(zhí)行js腳本
實(shí)現(xiàn)功能
js = "$('.kendoDate').removeAttr('readonly')"? # jQuery,移除屬性
driver.execute_script(js)
sleep(2)
driver.find_element_by_xpath('//*[@id="myform"]/table/tbody/tr[3]/td[4]/span/span/input').send_keys("2020-06-22")#輸入固定日期
#認(rèn)證日期
driver.find_element_by_xpath('//*[@id="mybody"]/tr/td[7]/span/span/input').send_keys('2020-06-22')
driver.find_element_by_xpath('//*[@id="mybody"]/tr/td[8]/span/span/input').send_keys('2020-06-22')
6.鍵盤操作
driver.find_element_by_class().send_keys(Keys.CONTROL+'a')
執(zhí)行完操作后關(guān)閉瀏覽器
driver.quit()
二 報(bào)錯(cuò)處理方案
pycharm 引入包報(bào)錯(cuò)怔蚌,選中模塊名稱【右鍵】->【mark directory as 】->【sources root】
圖片: https://uploader.shimo.im/f/D7sNMzDamhfHgqfK.png
pycharm 中如何調(diào)節(jié)字體大小位置
菜單欄:file ----> setting —> editor —>font —> size 修改為需要大小字號(hào)例如20巩步,點(diǎn)擊ok
消息彈窗3秒消失,無法定位彈窗元素
圖片: https://uploader.shimo.im/f/RxYyHIxSuUIx2CqF.png
打開F12桦踊,在source里面點(diǎn)擊暫停腳本執(zhí)行椅野,把元素定住回还,然后再去寫xpath定位
測(cè)試報(bào)告點(diǎn)擊瀏覽器打開提示“系統(tǒng)找不到文件chrome”
出現(xiàn)該報(bào)錯(cuò)主要是因?yàn)槟銢]有進(jìn)行chrome瀏覽器安裝路徑的配置殿遂,解決方法很簡(jiǎn)單:
打開pycharm–》File–》setting–》Tools–》Web Browsers
在Default Browser一欄勾選Custom Path(敲黑板)
然后將chrome的路徑改為安裝路徑即可,如圖所示:
圖片: https://uploader.shimo.im/f/6aOlR1ChJEHFMelE.png
運(yùn)行腳本章办,提示chrome正在受到自控軟件控制-屬于chrome瀏覽器特有的問題
首先查看瀏覽器版本? 75版本以下 :
option = webdriver.ChromeOptions()
option.add_argument('disable-infobars')
driver = webdriver.Chrome(chrome_options=option)
url=''
driver.get(url)
————————————————
75版以上
chrome_options = webdriver.ChromeOptions();
chrome_options.add_experimental_option("excludeSwitches", ['enable-automation']);
driver = webdriver.Chrome(options=chrome_options);