版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章SeleniumWebDriver的高級(jí)應(yīng)用《自動(dòng)化測(cè)試應(yīng)用教程(Web+App)》學(xué)習(xí)目標(biāo)/Target掌握Select類的使用,能夠?qū)崿F(xiàn)下拉選擇框操作掌握彈出框操作的方式,能夠處理常見的輸入框、確認(rèn)框和提示框掌握截圖操作的方式,能夠?qū)δ_本執(zhí)行出錯(cuò)時(shí)的窗口進(jìn)行截圖保存掌握獲取瀏覽器窗口句柄的方法,能夠?qū)崿F(xiàn)多窗口切換操作掌握多表單切換的方式,能夠定位網(wǎng)頁中有frame類型標(biāo)簽的頁面元素學(xué)習(xí)目標(biāo)/Target掌握元素等待的方式,能夠解決因頁面元素未加載出來而報(bào)錯(cuò)的問題掌握獲取、添加、刪除Cookie的方式,能夠靈活處理Cookie掌握文件的上傳與下載的方式,能夠?qū)崿F(xiàn)文件的上傳和下載功能掌握?qǐng)?zhí)行JavaScript腳本的方式,能夠控制瀏覽器滾動(dòng)條和處理日期控件章節(jié)概述/Summary在第2章中,我們已經(jīng)初步學(xué)習(xí)了SeleniumWebDriver的基礎(chǔ)應(yīng)用,并能夠?yàn)閃eb項(xiàng)目編寫簡(jiǎn)單的測(cè)試腳本。然而在實(shí)際的測(cè)試項(xiàng)目中還需要對(duì)Web項(xiàng)目進(jìn)行一些高級(jí)的操作,例如操作下拉選擇框、彈出框、頁面截圖等,故需要進(jìn)一步學(xué)習(xí)Web項(xiàng)目的高級(jí)操作。下面將對(duì)SeleniumWebDriver的高級(jí)應(yīng)用進(jìn)行講解。目錄/Contents0102下拉選擇框操作彈出框操作03截圖操作04多窗口切換05多表單切換目錄/Contents0607元素等待Cookie處理08文件上傳與下載09執(zhí)行JavaScript腳本下拉選擇框操作3.13.1下拉選擇框操作
先定一個(gè)小目標(biāo)!掌握Select類的使用,能夠?qū)崿F(xiàn)下拉選擇框操作3.1下拉選擇框操作當(dāng)我們遇到測(cè)試網(wǎng)頁中的下拉選擇框時(shí),該如何讓程序自動(dòng)選擇下拉選擇框中的選項(xiàng)呢?3.1下拉選擇框操作在Web自動(dòng)化測(cè)試過程中,對(duì)下拉選擇框中的選項(xiàng)進(jìn)行定位與操作有兩種方式。方式1首先定位到要操作的option元素(下拉選擇框中的選項(xiàng)),然后執(zhí)行單擊操作。方式2使用SeleniumWebDriver中的Select類定位下拉選擇框中指定的選項(xiàng)。3.1下拉選擇框操作由于第一種方式操作起來比較煩瑣,而第二種方式能更快地對(duì)下拉選擇框進(jìn)行操作,所以通常我們會(huì)使用第二種方式。在使用第二種方式定位下拉選擇框中的指定選項(xiàng)時(shí),需要首先在項(xiàng)目中導(dǎo)入Select類,具體代碼如下。fromselenium.webdriver.support.selectimportSelect3.1下拉選擇框操作根據(jù)索引值定位下拉選擇框中的指定選項(xiàng)時(shí),需要調(diào)用select_by_index()方法,該方法的語法格式如下。select_by_index(index)#參數(shù)index表示下拉選擇框中選項(xiàng)的索引值下拉選擇框中選項(xiàng)的索引值是從0開始遞增的,如果想要選擇下拉選擇框中的第2個(gè)選項(xiàng),則可以將select_by_index()方法中傳遞的索引值設(shè)置為1,即select_by_index(1)。1.根據(jù)索引值定位指定選項(xiàng)3.1下拉選擇框操作根據(jù)value值定位下拉選擇框中的指定選項(xiàng)時(shí),需要調(diào)用select_by_value()方法,該方法的語法格式如下。select_by_value(value)參數(shù)value表示<select>標(biāo)簽(該標(biāo)簽用于顯示一個(gè)下拉選擇框)中option元素的value屬性值。2.根據(jù)value值定位指定選項(xiàng)3.1下拉選擇框操作例如,在HTML頁面中使用<select>標(biāo)簽顯示一個(gè)下拉選擇框的代碼如下。<selectname="selecta"id="selectA"><optionvalue="bj">北京</option><optionvalue="sh">上海</option><optionvalue="gz">廣州</option><optionvalue="sz">深圳</option></select>上述代碼用于顯示一個(gè)下拉選擇框,該下拉選擇框中的選項(xiàng)分別是“北京”、“上海”、“廣州”和“深圳”,如果想要選擇“深圳”選項(xiàng),該選項(xiàng)對(duì)應(yīng)的option元素的value屬性值為“sz”,可以調(diào)用select_by_value("sz")方法實(shí)現(xiàn)選擇“深圳”選項(xiàng)的操作。3.1下拉選擇框操作根據(jù)文本定位下拉選擇框中的指定選項(xiàng)時(shí),需要調(diào)用select_by_visible_text()方法,該方法的語法格式如下。select_by_visible_text(text)參數(shù)text表示<select>標(biāo)簽中option元素的文本內(nèi)容。3.根據(jù)文本定位指定選項(xiàng)3.1下拉選擇框操作下面以一個(gè)用戶注冊(cè)頁面為例,演示如何使用Select類中提供的3種方式操作頁面中“所在城市”的下拉選擇框。用戶注冊(cè)頁面效果如下圖所示。3.1下拉選擇框操作使用Select類提供的3種方式,定位“所在城市”下拉選擇框中指定選項(xiàng)的具體代碼如下。[單擊查看源碼]彈出框操作3.2
先定一個(gè)小目標(biāo)!3.2彈出框操作掌握彈出框操作的方式,能夠處理常見的輸入框、確認(rèn)框和提示框3.2彈出框操作彈出框通常分為3種類型,分別是輸入框(prompt)、提示框(alert)和確認(rèn)框(confirm)。當(dāng)頁面中出現(xiàn)這些彈出框時(shí),我們需要對(duì)這些彈出框進(jìn)行一些操作,然后才能對(duì)網(wǎng)頁進(jìn)行下一步操作或?yàn)g覽網(wǎng)頁中的其他內(nèi)容。在Web自動(dòng)化測(cè)試過程中,如果遇到網(wǎng)頁中有彈出框的情況,可以通過SeleniumWebDriver提供的對(duì)應(yīng)方法處理這些彈出框,以便于測(cè)試網(wǎng)頁中的其他信息。3.2彈出框操作在SeleniumWebDriver中,輸入框、提示框和確認(rèn)框都是Alert類的對(duì)象,在處理這些彈出框時(shí),首先需要獲取Alert類的對(duì)象,獲取該對(duì)象的語法格式如下。driver.switch_to.alert3.2彈出框操作獲取Alert類的對(duì)象后,需要調(diào)用Alert類的方法對(duì)彈出框進(jìn)行操作,Alert類的常用方法如下表所示。方法說明accept()接收彈出框信息,例如單擊彈出框的“確認(rèn)”按鈕dismiss()取消彈出框信息,例如單擊彈出框的“取消”按鈕send_keys()向彈出框輸入信息,該方法只對(duì)包含輸入框的彈出框有效除了表中介紹的3個(gè)常用方法外,Alert類還有一個(gè)常用的屬性text,該屬性用于獲取彈出框中的文本信息。3.2彈出框操作<html><head><title></title></head><body><inputtype="button"value="提示框"id="alerta"onclick="alert('我是提示框')"><br/><inputtype="button"value="確認(rèn)框"id="confirma"onclick="confirm('我是確認(rèn)框,確定要?jiǎng)h除商品信息嗎?')"><br/><inputtype="button"value="輸入框"id="prompta"onclick="prompt('我是輸入框,請(qǐng)輸入用戶名:')"></body></html>以一個(gè)彈出框頁面為例,演示如何對(duì)頁面中彈出的輸入框、提示框和確認(rèn)框進(jìn)行操作,具體代碼如下。3.2彈出框操作將編寫好的彈出框頁面代碼命名為alert.html并保存,然后在瀏覽器中打開該文件,彈出框頁面如下圖。單擊“提示框”按鈕,頁面中會(huì)彈出一個(gè)提示框3.2彈出框操作單擊“確認(rèn)框”按鈕,頁面中會(huì)彈出一個(gè)確認(rèn)框3.2彈出框操作單擊“輸入框”按鈕,頁面中會(huì)彈出一個(gè)輸入框3.2彈出框操作下面演示調(diào)用Alert類中的text屬性,分別獲取彈出框頁面中提示框、確認(rèn)框和輸入框中的文本信息并輸出到控制臺(tái),具體代碼如下。[單擊查看源碼]截圖操作3.33.3截圖操作
先定一個(gè)小目標(biāo)!掌握截圖操作的方式,能夠?qū)δ_本執(zhí)行出錯(cuò)時(shí)的窗口進(jìn)行截圖保存3.3截圖操作在自動(dòng)化測(cè)試的過程中,如果測(cè)試腳本執(zhí)行失敗,測(cè)試人員通常會(huì)去查看測(cè)試腳本運(yùn)行的錯(cuò)誤信息,分析腳本執(zhí)行失敗的原因。但有時(shí)候程序打印的錯(cuò)誤信息并不十分明確,測(cè)試人員很難判斷腳本執(zhí)行失敗的原因。在自動(dòng)化測(cè)試腳本執(zhí)行的過程中,如果通過截圖的方式將測(cè)試過程中操作的場(chǎng)景以圖片的形式展示出來,測(cè)試人員就能更快捷地分析出腳本執(zhí)行失敗的原因。3.3截圖操作SeleniumWebDriver提供的獲取截圖的方法有4個(gè),分別是get_screenshot_as_file()方法、
save_screenshot()方法、
get_screenshot_as_base64()方法和get_screenshot_as_png()方法。3.3截圖操作get_screenshot_as_file()方法用于獲取頁面截圖,并將截圖保存到指定的路徑下,該方法的語法格式如下。get_screenshot_as_file(filename)#參數(shù)filename是頁面截圖的存儲(chǔ)路徑,該存儲(chǔ)路徑為絕對(duì)路徑例如,get_screenshot_as_file(“D:\\baidu.png”),程序調(diào)用該方法后,會(huì)將頁面截圖保存在D盤,該頁面截圖的文件名稱為baidu.png。(1)get_screenshot_as_file()方法3.3截圖操作save_screenshot()方法用于保存頁面截圖,該截圖文件的后綴名為.png,該方法的語法格式如下。save_screenshot(filename)
#參數(shù)filename是頁面截圖的文件名稱save_screenshot()方法與get_screenshot_as_file()方法的作用相同,不同的是save_screenshot()方法將截圖保存在項(xiàng)目的根目錄中,而get_screenshot_as_file()方法將截圖保存在指定的路徑下。(2)save_screenshot()方法3.3截圖操作get_screenshot_as_base64()方法用于獲取頁面截圖的base64編碼字符串,該方法的語法格式如下。get_screenshot_as_base64()get_screenshot_as_png()方法用于獲取頁面截圖的二進(jìn)制數(shù)據(jù),該方法的語法格式如下。get_screenshot_as_png()(3)get_screenshot_as_base64()方法(4)get_screenshot_as_png()方法3.3截圖操作下面以閑云旅游網(wǎng)站為例,演示如何調(diào)用get_screenshot_as_file()、save_screenshot()、get_screenshot_as_base64()和get_screenshot_as_png()等方法對(duì)頁面進(jìn)行截圖并保存或輸出,具體代碼如下。[單擊查看源碼]多窗口切換3.43.4多窗口切換
先定一個(gè)小目標(biāo)!掌握獲取瀏覽器窗口句柄的方法,能夠?qū)崿F(xiàn)多窗口切換操作3.4多窗口切換多窗口切換是指在頁面中彈出的多個(gè)新窗口之間切換。每個(gè)瀏覽器窗口都有一個(gè)唯一標(biāo)識(shí),該標(biāo)識(shí)被稱為句柄(handle)。多窗口切換主要依賴于瀏覽器窗口的句柄,通過獲取瀏覽器窗口的句柄來區(qū)分不同的窗口,根據(jù)獲取的窗口句柄實(shí)現(xiàn)指定窗口的切換。3.4多窗口切換SeleniumWebDriver提供了2個(gè)獲取瀏覽器窗口句柄的屬性,分別是current_window_handle和window_handles,這2個(gè)屬性被調(diào)用的示例代碼如下。#獲取當(dāng)前窗口的句柄driver.current_window_handle#獲取所有窗口的句柄driver.window_handles3.4多窗口切換SeleniumWebDriver還提供了window()方法,該方法用于切換瀏覽器窗口。window()方法被調(diào)用的示例代碼如下。#切換到指定窗口driver.switch_to.window(handle)window()方法中傳遞的參數(shù)handle是要切換的指定窗口句柄。3.4多窗口切換下面以京東商城首頁為例,演示如何獲取京東首頁窗口的句柄和瀏覽器中所有窗口的句柄,然后根據(jù)獲取的句柄實(shí)現(xiàn)切換到指定窗口的功能,具體代碼如下。[單擊查看源碼]多表單切換3.53.5多表單切換
先定一個(gè)小目標(biāo)!掌握多表單切換的方式,能夠定位網(wǎng)頁中有frame類型標(biāo)簽的頁面元素3.5多表單切換多表單切換是對(duì)Web頁面中包含frame類型標(biāo)簽的頁面部分進(jìn)行的切換。在網(wǎng)頁中frame類型的標(biāo)簽是一種表單框架,該類型的標(biāo)簽作用是在當(dāng)前頁面的指定區(qū)域中顯示另一個(gè)頁面的元素。3.5多表單切換<frameset><frameset>標(biāo)簽可以在一個(gè)頁面中設(shè)置一個(gè)或多個(gè)框架,不影響正常的元素定位。<frame><frame>標(biāo)簽是整個(gè)頁面的框架。<iframe><iframe>標(biāo)簽是頁面中內(nèi)嵌的框架。frame類型的3種標(biāo)簽3.5多表單切換SeleniumWebDriver提供了switch_to.frame()方法來切換帶有<iframe>標(biāo)簽的頁面,該方法的語法格式如下。switch_to.frame(frame_reference)參數(shù)frame_reference可以是frame類型的標(biāo)簽中name屬性的值或id屬性的值。3.5多表單切換注意需要注意的是,在定位多表單中的元素時(shí),還需要調(diào)用default_content()方法返回到主頁面,才能對(duì)另外一個(gè)frame類型的表單中的元素進(jìn)行定位。3.5多表單切換以一個(gè)多表單切換頁面為例,演示如何在頁面中切換帶有<iframe>標(biāo)簽的頁面,多表單切換頁面如下圖所示。頁面中包含2個(gè)<iframe>標(biāo)簽,當(dāng)在“注冊(cè)用戶”頁面中輸入完一個(gè)注冊(cè)賬號(hào)后,想要在“登錄用戶”頁面中輸入登錄賬號(hào),此時(shí)就需要調(diào)用switch_to.frame()來切換這2個(gè)表單頁面。3.5多表單切換下面通過代碼演示注冊(cè)用戶頁面和登錄用戶頁面的切換操作,具體代碼如下。[單擊查看源碼]元素等待3.63.6.1顯式等待
先定一個(gè)小目標(biāo)!掌握元素等待的方式,能夠靈活應(yīng)用顯式等待的方法解決因頁面元素未加載出來而報(bào)錯(cuò)的問題3.6.1顯式等待元素等待是指在定位頁面元素時(shí),如果沒有找到頁面元素,測(cè)試腳本會(huì)在指定時(shí)間內(nèi)一直等待的過程。顯式等待指的是定位指定元素時(shí),如果能定位到指定元素,則測(cè)試程序直接返回該元素,不觸發(fā)等待;如果無法定位到指定元素,則需要等待一段時(shí)間后再進(jìn)行定位;如果超過程序設(shè)置的最長(zhǎng)等待時(shí)間還沒有定位到指定元素,則程序會(huì)拋出超時(shí)異常(TimeoutException)。3.6.1顯式等待實(shí)現(xiàn)顯式等待需要調(diào)用的方法為WebDriverWait(),由于該方法存在于WebDriverWait類中,所以調(diào)用WebDriverWait()方法之前首先要在程序中導(dǎo)入WebDriverWait類,具體代碼如下。fromselenium.webdriver.support.waitimportWebDriverWait3.6.1顯式等待WebDriverWait()方法的語法格式如下。WebDriverWait(driver,timeout,poll_frequency=POLL_FREQUENCY,ignored_exceptions=None)driver:必選參數(shù),表示瀏覽器驅(qū)動(dòng)對(duì)象。timeout:必選參數(shù),表示超時(shí)時(shí)間,即最長(zhǎng)的顯式等待時(shí)間,單位為秒。poll_frequency:可選參數(shù),表示查找指定元素間隔的時(shí)間,單位為秒。該參數(shù)的默認(rèn)值為常量POLL_FREQUENCY,該常量值為0.5,也就是查找指定元素的時(shí)間間隔默認(rèn)為0.5秒。ignored_exceptions:可選參數(shù),表示可忽略的異常集合。當(dāng)調(diào)用until()方法或until_not()方法時(shí),如果程序拋出的異常是這個(gè)集合中的異常,則程序不會(huì)中斷,會(huì)繼續(xù)等待;如果拋出的是這個(gè)集合外的異常,則程序會(huì)中斷并拋出異常。在這個(gè)異常集合中默認(rèn)只有NoSuchElementException異常。3.6.1顯式等待在程序中進(jìn)行顯式等待時(shí),WebDriverWait()方法必須與until()方法或until_not()方法結(jié)合使用。until()方法用于調(diào)用一個(gè)查找元素的匿名函數(shù),如果該函數(shù)的返回值為True,表示查找到元素;如果該函數(shù)的返回值為False,表示未找到元素;當(dāng)未找到元素時(shí),程序會(huì)每隔一段時(shí)間調(diào)用一次until()方法來查找元素,直到查找到元素為止。until()方法的語法格式如下。until(method,message='
')method:必選參數(shù),該參數(shù)是一個(gè)匿名函數(shù),在該函數(shù)中調(diào)用了查找頁面元素的方法。在規(guī)定的等待時(shí)間內(nèi),程序每隔一段時(shí)間會(huì)調(diào)用一次該匿名函數(shù),直到該函數(shù)的返回值為True。message:可選參數(shù),表示超時(shí)后的異常信息,如果程序超時(shí),則會(huì)拋出超時(shí)異常TimeoutException,該參數(shù)的值會(huì)傳遞到TimeoutException()方法中。3.6.1顯式等待如果想要對(duì)頁面中的“登錄”按鈕設(shè)置顯式等待,顯式等待的超時(shí)時(shí)間為5秒,查找元素的間隔時(shí)間為0.5秒,“登錄”按鈕的By.CLASS_NAME屬性值為lg-button,那么實(shí)現(xiàn)對(duì)“登錄”按鈕設(shè)置顯式等待的示例代碼如下。element=WebDriverWait(driver,5,0.5).until(lambdap:p.find_element(By.CLASS_NAME,"lg-button"))需要注意的是,until()方法中傳遞的參數(shù)是一個(gè)匿名函數(shù),在該函數(shù)中調(diào)用了find_element()方法來查找“登錄”按鈕,如果該函數(shù)的返回值為True,則表示查找到“登錄”按鈕;如果該函數(shù)的返回值為False,表示未找到“登錄”按鈕。3.6.1顯式等待until_not()方法也用于調(diào)用一個(gè)查找元素的匿名函數(shù),如果該函數(shù)的返回值為True,表示查找不到元素;如果該函數(shù)的返回值為False,表示查找到元素;當(dāng)未找到元素時(shí),程序會(huì)每隔一段時(shí)間調(diào)用一次until_not()方法查找元素,直到查找到元素為止。until_not()方法的語法格式如下。until_not(method,message='')使用WebDriverWait()方法與until_not()方法實(shí)現(xiàn)“登錄”按鈕的顯式等待,具體示例代碼如下。element=WebDriverWait(driver,5,0.5).until_not(lambdap:p.find_element(By.CLASS_NAME,"lg-button"))3.6.1顯式等待以閑云旅游網(wǎng)站為例,演示如何對(duì)旅游攻略頁面中的“寫游記”按鈕進(jìn)行顯式等待,旅游攻略頁面如下圖所示。3.6.1顯式等待下面演示調(diào)用WebDriverWait()方法和until()方法設(shè)置“寫游記”按鈕元素的顯式等待,具體代碼如下。[單擊查看源碼]3.6.2隱式等待
先定一個(gè)小目標(biāo)!掌握元素等待的方式,能夠靈活應(yīng)用隱式等待的方法解決因頁面元素未加載出來而報(bào)錯(cuò)的問題3.6.2隱式等待隱式等待指的是定位頁面元素時(shí),如果能定位到元素,則測(cè)試程序直接返回該元素,不觸發(fā)等待;如果定位不到該元素,則需要等待一段時(shí)間后再進(jìn)行定位。如果超過程序設(shè)置的最長(zhǎng)等待時(shí)間還沒有定位到指定元素,則程序會(huì)拋出元素不存在的異常(NoSuchElementException)。3.6.2隱式等待在程序中設(shè)置隱式等待時(shí)需要調(diào)用implicitly_wait()方法,該方法的語法格式如下。implicitly_wait(timeout)#參數(shù)timeout表示隱式等待的最長(zhǎng)等待時(shí)間,單位為秒。
如果想要在測(cè)試代碼中設(shè)置登錄頁面的隱式等待,等待的時(shí)間為10秒,則該隱式等待的示例代碼如下。driver.implicitly_wait(10)3.6.2隱式等待需要注意的是,隱式等待是全局設(shè)置,也就是說在測(cè)試代碼中只要設(shè)置了一次隱式等待,則該隱式等待會(huì)作用于頁面中的所有元素。注意3.6.2隱式等待以閑云旅游網(wǎng)站為例,演示如何對(duì)該項(xiàng)目首頁中的所有元素進(jìn)行隱式等待,閑云旅游網(wǎng)站的首頁如下圖所示。3.6.2隱式等待下面演示對(duì)閑云旅游網(wǎng)站的首頁中的所有元素進(jìn)行隱式等待,等待時(shí)間為10秒,具體代碼如下。fromseleniumimportwebdriverdriver=webdriver.Chrome()#設(shè)置隱式等待為10秒driver.implicitly_wait(10)url="/"driver.get(url)driver.maximize_window()city=driver.find_element_by_xpath("http://*[@id='__layout']/""div/section/div[2]/div/div[2]/input")city.send_keys("廣州")driver.find_element_by_class_name("ell-icon-search").click()driver.quit()多學(xué)一招顯式等待與隱式等待的區(qū)別010203123在程序中設(shè)置顯式等待時(shí),需要調(diào)用WebDriverWait()方法,并且該方法要與until()方法與until_not()結(jié)合使用。設(shè)置隱式等待時(shí),需要調(diào)用的方法為implicitly_wait()。調(diào)用的方法不同顯式等待只對(duì)頁面中的指定元素有效,隱式等待對(duì)頁面中的所有元素都有效。作用域不同設(shè)置顯式等待的程序超時(shí)后,會(huì)拋出超時(shí)異常TimeoutException。設(shè)置隱式等待的程序超時(shí)后,會(huì)拋出元素不存在的異常NoSuchElementException。超時(shí)后,拋出的異常不同3.6.3強(qiáng)制等待
先定一個(gè)小目標(biāo)!掌握元素等待的方式,能夠靈活應(yīng)用強(qiáng)制等待的方法解決因頁面元素未加載出來而報(bào)錯(cuò)的問題3.6.3強(qiáng)制等待強(qiáng)制等待主要是通過調(diào)用sleep()函數(shù)讓程序休眠一段時(shí)間,時(shí)間到達(dá)后,程序再繼續(xù)運(yùn)行。sleep()函數(shù)的語法格式如下。sleep(seconds)參數(shù)seconds表示程序休眠的時(shí)間,也就是強(qiáng)制等待的時(shí)間,單位為秒。如果想讓程序休眠2秒,則可以直接在程序中調(diào)用sleep(2)來實(shí)現(xiàn),即當(dāng)程序運(yùn)行到代碼sleep(2)時(shí),程序會(huì)暫停運(yùn)行,暫停2秒后,再繼續(xù)運(yùn)行其他代碼。3.6.3強(qiáng)制等待一般情況下,測(cè)試人員在調(diào)試腳本代碼的過程中,為了容易查看到頁面中的每一步操作,會(huì)使用強(qiáng)制等待。雖然強(qiáng)制等待的使用方式比較簡(jiǎn)單,但是如果強(qiáng)制等待的時(shí)間設(shè)置得太短,頁面元素還沒加載出來,程序就執(zhí)行了腳本代碼,此時(shí)程序仍然會(huì)報(bào)錯(cuò);如果強(qiáng)制等待的時(shí)間設(shè)置得太長(zhǎng),則又會(huì)浪費(fèi)程序的執(zhí)行時(shí)間,影響腳本的整體運(yùn)行速度,降低自動(dòng)化測(cè)試的效率。因此,在自動(dòng)化測(cè)試的腳本代碼中盡量少設(shè)置強(qiáng)制等待。Cookie處理3.73.7Cookie處理
先定一個(gè)小目標(biāo)!掌握獲取、添加、刪除Cookie的方式,能夠靈活處理Cookie3.7Cookie處理Cookie是一個(gè)客戶端技術(shù),該技術(shù)主要由Web服務(wù)器生成的數(shù)據(jù)以Cookie的形式保存在瀏覽器的小文本文件中。當(dāng)用戶通過瀏覽器訪問服務(wù)器中的Web資源時(shí),瀏覽器會(huì)自動(dòng)將之前保存的Cookie數(shù)據(jù)傳遞給服務(wù)器,服務(wù)器通過Cookie數(shù)據(jù)做出相應(yīng)的操作。3.7Cookie處理Cookie是以鍵值對(duì)的方式存儲(chǔ)數(shù)據(jù)的,它只能存儲(chǔ)少量的數(shù)據(jù),不同的瀏覽器存儲(chǔ)Cookie的容量也是不同的,一般不超過4KB。Cookie經(jīng)常用于存儲(chǔ)與用戶相關(guān)的信息,例如,存儲(chǔ)用戶的登錄狀態(tài)、用戶名和用戶密碼等信息。3.7Cookie處理在自動(dòng)化測(cè)試的過程中,SeleniumWebDriver提供了get_cookie()、get_cookies()、add_cookie()、delete_cookie()、delete_all_cookies()等方法對(duì)Cookie進(jìn)行獲取、添加和刪除等操作,其中g(shù)et_cookie()方法和get_cookies()方法可以通過獲取Cookie信息來驗(yàn)證Cookie的正確性。3.7Cookie處理Cookie的獲取、添加和刪除的具體語法格式如下。#獲取指定Cookieget_cookie(name)#獲取網(wǎng)站所有Cookieget_cookies()#添加Cookieadd_cookie(cookie_dict)#刪除指定Cookiedelete_cookie(name)#刪除所有的Cookiedelete_all_cookies()參數(shù)name表示Cookie的名稱參數(shù)cookie_dict表示字典對(duì)象3.7Cookie處理下面以百度搜索頁面為例,演示如何獲取、添加和刪除Cookie,具體代碼如下。[單擊查看源碼]文件上傳與下載3.83.8文件上傳與下載
先定一個(gè)小目標(biāo)!掌握文件的上傳與下載的實(shí)現(xiàn)方式,能夠?qū)崿F(xiàn)文件的上傳和下載功能3.8文件上傳與下載1.文件上傳當(dāng)測(cè)試頁面中的文件上傳功能時(shí),通常有兩種情況,不同情況的測(cè)試方式不同。第一種情況:如果頁面中的“上傳”按鈕是由<input/>標(biāo)簽顯示,該標(biāo)簽中的type屬性的值為“file”,此種情況可以首先定位“上傳”按鈕,然后調(diào)用send_keys()方法將要上傳的文件上傳到頁面中。3.8文件上傳與下載例如,測(cè)試一個(gè)員工導(dǎo)入頁面的上傳功能,該頁面中的“上傳”按鈕是由<input/>標(biāo)簽顯示,單擊“點(diǎn)擊上傳”按鈕,上傳E盤中名為image.png的圖片,只需要在測(cè)試的腳本代碼中添加如下代碼即可實(shí)現(xiàn)文件的上傳功能。element=driver.find_element_by_name("file").send_keys("E:\\image.png")3.8文件上傳與下載第二種情況:如果頁面中的“上傳”按鈕不是由<input/>標(biāo)簽顯示,單擊“上傳”按鈕會(huì)彈出一個(gè)打開上傳文件的對(duì)話框,該對(duì)話框是Windows系統(tǒng)的一個(gè)窗口。由于自動(dòng)化測(cè)試中的腳本代碼無法直接對(duì)Window窗口進(jìn)行操作,所以需要借助第三方工具AutoIt來測(cè)試文件的上傳功能。3.8文件上傳與下載AutoIt是一款免費(fèi)的編譯工具,它可以協(xié)助Selenium完成Web自動(dòng)化測(cè)試過程中的窗口操作部分。AutoIt工具的工作原理是首先在該工具中編寫腳本代碼定位Window窗口中的元素屬性值,然后將腳本代碼編譯成可執(zhí)行的文件,最后在自動(dòng)化測(cè)試過程中,直接調(diào)用可執(zhí)行文件實(shí)現(xiàn)文件的上傳與下載功能。3.8文件上傳與下載(1)安裝AutoIt工具首先訪問AutoIt官方網(wǎng)站,在AutoIt工具的下載界面中單擊“DownloadAutoIt”按鈕下載AutoIt工具的安裝包,AutoIt工具的下載界面如下圖所示。使用AutoIt工具測(cè)試文件上傳功能的具體步驟如下。3.8文件上傳與下載將鼠標(biāo)放在(Frozen)AutoItv3WindowInfo窗口中的“FinderTool”按鈕上,按下鼠標(biāo)左鍵并將“FinderTool”按鈕上的圖標(biāo)
依次拖動(dòng)到文件名輸入框控件和“打開”按鈕控件上,識(shí)別輸入框控件與“打開”按鈕控件,并將識(shí)別到這些控件的信息顯示在(Frozen)AutoItv3WindowInfo窗口中。(2)識(shí)別Windows窗口中的控件3.8文件上傳與下載STEP02當(dāng)Window窗口中的控件識(shí)別成功后,在(Frozen)AutoItv3WindowInfo窗口的編輯框區(qū)域會(huì)顯示識(shí)別到的控件信息,文件名輸入框控件和“打開”按鈕控件信息如下圖所示。文件名輸入框控件信息“打開”按鈕控件信息3.8文件上傳與下載首先打開AutoIt工具安裝目錄下的SciTE文件夾,在該文件夾下雙擊SciTE.exe文件,啟動(dòng)SciTE編輯器,然后根據(jù)識(shí)別的控件信息,在SciTE編輯器中編寫AutoIt腳本,如下圖所示。(3)編寫AutoIt腳本3.8文件上傳與下載首先單擊SciTE編輯器菜單欄中的Tools選項(xiàng),然后選擇Go選項(xiàng),運(yùn)行AutoIt腳本。(4)運(yùn)行AutoIt腳本3.8文件上傳與下載首先打開AutoIt工具安裝目錄下的Aut2Exe文件夾,在該文件夾下啟動(dòng)Aut2exe_x64.exe應(yīng)用程序,彈出Aut2Exev3-AutoItScripttoEXEConverter窗口,如下圖所示。設(shè)置AutoIt腳本文件的路徑選擇AutoIt腳本文件的后綴名(5)將AutoIt腳本文件生成后綴名為.exe的文件3.8文件上傳與下載下面以一個(gè)測(cè)試文件上傳頁面為例,演示如何測(cè)試文件的上傳功能,測(cè)試文件上傳頁面如下圖所示。(6)測(cè)試文件的上傳功能3.8文件上傳與下載下面編寫自動(dòng)化測(cè)試腳本代碼,并借助AutoIt工具實(shí)現(xiàn)測(cè)試文件的上傳功能,具體代碼如下。fromtimeimportsleepfromseleniumimportwebdriverimportosfromselenium.webdriverimportActionChainsdriver=webdriver.Chrome()driver.maximize_window()driver.get("E:/TestProject/upload.html")button_element=driver.find_element_by_name("uploadFile")ActionChains(driver).click(button_element).perform()os.system("D:\\AutoitScript.exe")sleep(2)driver.quit()導(dǎo)入os操作系統(tǒng)接口模塊,該模塊提供了一些方便使用操作系統(tǒng)相關(guān)功能的函數(shù)os.system()方法用于執(zhí)行D盤中的AutoitScript.exe文件3.8文件上傳與下載運(yùn)行測(cè)試文件上傳功能的代碼后,會(huì)彈出一個(gè)Window窗口,如下圖所示。需要注意的是,此時(shí)不能關(guān)閉Window窗口,需要再次運(yùn)行AutoIt腳本才能實(shí)現(xiàn)自動(dòng)上傳文件的功能。3.8文件上傳與下載由于在Web自動(dòng)化測(cè)試的過程中,SeleniumWebDriver沒有提供相應(yīng)的方法來測(cè)試文件的下載功能,所以當(dāng)需要測(cè)試文件的下載功能時(shí),可以在程序中添加瀏覽器的配置項(xiàng),例如禁止彈出窗口、設(shè)置文件下載后的路徑等。2.文件下載3.8文件上傳與下載下面以訪問傳智健康后臺(tái)管理系統(tǒng)為例,在Chrome瀏覽器中訪問系統(tǒng)中的“預(yù)約設(shè)置”頁面來測(cè)試下載該頁面中的模板文件,“預(yù)約設(shè)置”頁面如下圖所示。3.8文件上傳與下載下面編寫自動(dòng)化測(cè)試腳本代碼,實(shí)現(xiàn)測(cè)試下載傳智健康后臺(tái)管理系統(tǒng)中“預(yù)約設(shè)置”頁面的模板文件,具體代碼如下。[單擊查看源碼]3.8文件上傳與下載運(yùn)行測(cè)試下載文件的代碼后,打開計(jì)算機(jī)D盤的downloadFile文件夾,如下圖所示。該文件為下載的模板文件,說明在程序中通過添加瀏覽器的配置項(xiàng),能夠測(cè)試文件的下載功能。執(zhí)行JavaScript腳本3.93.9.1JavaScript腳本控制瀏覽器滾動(dòng)條
先定一個(gè)小目標(biāo)!掌握?qǐng)?zhí)行JavaScript腳本的方式,能夠控制瀏覽器滾動(dòng)條3.9.1JavaScript腳本控制瀏覽器滾動(dòng)條在瀏覽網(wǎng)頁的過程中,我們經(jīng)常會(huì)遇到頁面超過一屏的情況,這時(shí)候需要通過滑動(dòng)滾動(dòng)條來繼續(xù)瀏覽或操作剩余的頁面內(nèi)容,如果在自動(dòng)化測(cè)試中遇到此種情況,可以通過執(zhí)行JavaScript腳本來操作瀏覽器的滾動(dòng)條,實(shí)現(xiàn)自動(dòng)控制瀏覽器滾動(dòng)條的效果。3.9.1JavaScript腳本控制瀏覽器滾動(dòng)條瀏覽器的滾動(dòng)條分為縱向和橫向兩種,縱向滾動(dòng)條可以控制瀏覽器中的頁面進(jìn)行上下滑動(dòng);橫向滾動(dòng)條可以控制瀏覽器中的頁面進(jìn)行左右滑動(dòng)。3.9.1JavaScript腳本控制瀏覽器滾動(dòng)條在JavaScript腳本中,可以通過
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度茶樓與茶葉種植基地合作租賃協(xié)議4篇
- 2025年度拆除工程噪聲及揚(yáng)塵控制合同4篇
- 2025年度智能倉儲(chǔ)廠房購買及自動(dòng)化解決方案合同4篇
- 專屬2024版月餅銷售代理協(xié)議版B版
- 二零二五年度綠色能源項(xiàng)目商鋪?zhàn)赓U合同樣本2篇
- 2024物流企業(yè)融資租賃合同
- 2025年度廠房墻地磚節(jié)能減排改造項(xiàng)目合同3篇
- 2024版螺旋鋼管買賣合同書
- 2025年廠區(qū)光伏發(fā)電與配電一體化工程承包合同4篇
- 2024照明工程分包合同
- 長(zhǎng)鏈氯化石蠟
- 小學(xué)六年級(jí)數(shù)學(xué)解方程計(jì)算題
- 春節(jié)英語介紹SpringFestival(課件)新思維小學(xué)英語5A
- 進(jìn)度控制流程圖
- 2023年江蘇省南京市中考化學(xué)真題
- 【閱讀提升】部編版語文五年級(jí)下冊(cè)第四單元閱讀要素解析 類文閱讀課外閱讀過關(guān)(含答案)
- 供電副所長(zhǎng)述職報(bào)告
- 現(xiàn)在完成時(shí)練習(xí)(短暫性動(dòng)詞與延續(xù)性動(dòng)詞的轉(zhuǎn)換)
- 產(chǎn)品質(zhì)量監(jiān)控方案
- 物業(yè)總經(jīng)理述職報(bào)告
- 新起點(diǎn),新發(fā)展心得體會(huì)
評(píng)論
0/150
提交評(píng)論