版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Selenium經(jīng)典教程selenium教程justSelenium經(jīng)典教程selenium教程110/3/2023Selenium的簡(jiǎn)介Selenium是一個(gè)用于Web應(yīng)用程序測(cè)試的工具。Selenium測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE、MozillaFirefox、MozillaSuite等。這個(gè)工具的主要功能包括:測(cè)試與瀏覽器的兼容性——測(cè)試你的應(yīng)用程序看是否能夠很好得工作在不同瀏覽器和操作系統(tǒng)之上。測(cè)試系統(tǒng)功能——?jiǎng)?chuàng)建衰退測(cè)試檢驗(yàn)軟件功能和用戶需求。支持自動(dòng)錄制動(dòng)作和自動(dòng)生成。Net、Java、Perl等不同語(yǔ)言的測(cè)試腳本。Selenium是ThoughtWorks專門(mén)為Web應(yīng)用程序編寫(xiě)的一個(gè)驗(yàn)收測(cè)試工具。8/1/2023Selenium的簡(jiǎn)介Selenium是一個(gè)210/3/2023selenium的優(yōu)勢(shì)Selenium測(cè)試直接在瀏覽器中運(yùn)行,就像真實(shí)用戶所做的一樣。Selenium測(cè)試可以在Windows、Linux和Macintosh上的InternetExplorer、Mozilla和Firefox中運(yùn)行。其他測(cè)試工具都不能覆蓋如此多的平臺(tái)。使用Selenium和在瀏覽器中運(yùn)行測(cè)試還有很多其他好處。下面是主要的兩大好處:通過(guò)編寫(xiě)模仿用戶操作的Selenium測(cè)試腳本,可以從終端用戶的角度來(lái)測(cè)試應(yīng)用程序。通過(guò)在不同瀏覽器中測(cè)試,更容易發(fā)現(xiàn)瀏覽器的不兼容性。Selenium的核心,也稱browserbot,是用JavaScript編寫(xiě)的。這使得測(cè)試腳本可以在受支持的瀏覽器中運(yùn)行。browserbot負(fù)責(zé)執(zhí)行從測(cè)試腳本接收到的命令,測(cè)試腳本要么是用HTML的表布局編寫(xiě)的,要么是使用一種受支持的編程語(yǔ)言編寫(xiě)的。8/1/2023selenium的優(yōu)勢(shì)Selenium測(cè)試310/3/2023selenium支持的瀏覽器8/1/2023selenium支持的瀏覽器410/3/2023selenium的組件#SeleniumIDE:一個(gè)Firefox插件,可以錄制用戶的基本操作,生成測(cè)試用例。隨后可以運(yùn)行這些測(cè)試用例在瀏覽器里回放,可將測(cè)試用例轉(zhuǎn)換為其他語(yǔ)言的自動(dòng)化腳本。#SeleniumRemoteControl(RC):支持多種平臺(tái)(Windows,Linux,Solaris)和多種瀏覽器(IE,F(xiàn)irefox,Opera,Safari),可以用多種語(yǔ)言(Java,Ruby,Python,Perl,PHP,C#)編寫(xiě)測(cè)試用例。#SeleniumGrid:允許Selenium-RC針對(duì)規(guī)模龐大的測(cè)試案例集或者需要在不同環(huán)境中運(yùn)行的測(cè)試案例集進(jìn)行擴(kuò)展。8/1/2023selenium的組件#Selenium510/3/2023selenium1VSselenium2Selenium1.0不能處理一下事件:1)本機(jī)鍵盤(pán)和鼠標(biāo)事件2)同源策略XSS/HTTP(S)3)彈出框,對(duì)話框(基本身份認(rèn)證,自簽名的證書(shū)和文件上傳/下載)
Selenium2.0有簡(jiǎn)潔的API,WebDriver和WebElement對(duì)象,更好的抽象。且支持多中操作系統(tǒng),多語(yǔ)言,多瀏覽器。同時(shí)Selenium2.0進(jìn)行了架構(gòu)的調(diào)整和升級(jí):
Selenium2.0=Selenium1.0+WebDriver(也就是說(shuō)Selenium2.0合并了這兩個(gè)項(xiàng)目)8/1/2023selenium1VSselenium2Se610/3/2023WebDriver的一個(gè)小例子訪問(wèn)it168的一個(gè)例子:packagewebdriver;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.firefox.FirefoxDriver;publicclassFirstCase{ publicstaticvoidmain(String[]args)throwsInterruptedException{ WebDriverdriver=newFirefoxDriver(); driver.get(""); Thread.sleep(3000); driver.close(); }}8/1/2023WebDriver的一個(gè)小例子訪問(wèn)it168710/3/2023定位元素WebDriver可以通過(guò)WebDriver實(shí)例來(lái)定位元素,任何語(yǔ)言庫(kù)都含有“FindElement”和“FindElements”的方法。第一個(gè)方法返回一個(gè)WebElement或者拋出異常。后者返回所有WebElement的列表,或者空列表。獲取和定位元素我們調(diào)用“By”方法。下面具體解釋下“By”方法:ByID這是一個(gè)極為有效定位元素的方法。普遍的現(xiàn)狀是UI工程師在實(shí)際編寫(xiě)頁(yè)面時(shí)很少寫(xiě)id或者自動(dòng)生產(chǎn)一個(gè)ID,這些都是需要避免的。對(duì)于一個(gè)頁(yè)面Element來(lái)說(shuō),class比自動(dòng)生產(chǎn)的id更好。通過(guò)id定位元素的例子:<divid="coolestWidgetEvah">...</div>WebElementelement=driver.findElement(By.id("coolestWidgetEvah"));8/1/2023定位元素WebDriver可以通過(guò)WebDr810/3/2023定位元素ByClassName
這里的class指的是DOM中的元素,在實(shí)際使用過(guò)程中,我們也會(huì)發(fā)現(xiàn)很多DOM元素含有相同的class名。通過(guò)classname定位元素例子:<divclass="cheese"><span>Cheddar</span></div><divclass="cheese"><span>Gouda</span></div>List<WebElement>cheeses=driver.findElements(By.className("cheese"));8/1/2023定位元素ByClassName910/3/2023元素定位ByTagNameDOM的Tag元素用Tagname定位元素的例子:<iframesrc="..."></iframe>WebElementframe=driver.findElement(By.tagName("iframe"));8/1/2023元素定位ByTagName1010/3/2023元素定位ByName例子:<inputname="cheese"type="text"/>WebElementcheese=driver.findElement(B("cheese"));ByLinkText例子:<ahref="/search?q=cheese">cheese</a>WebElementcheese=driver.findElement(By.linkText("cheese"));8/1/2023元素定位ByName1110/3/2023元素定位ByCSS從名字上看,這是根據(jù)CSS來(lái)定位元素。例子:<divid="food"><spanclass="dairy">milk</span><spanclass="dairyaged">cheese</span></div>WebElementcheese=driver.findElement(By.cssSelector("#foodspan.dairyaged"));8/1/2023元素定位ByCSS1210/3/2023元素定位ByXPATH在高級(jí)的水平下,WebDriver盡可能使用瀏覽器的原生的XPath能力。在那些沒(méi)有原生的XPath支持的瀏覽器,我們提供自己的實(shí)現(xiàn)方式。但是三個(gè)Driver有一定的區(qū)別。<inputtype="text"name="example"/><INPUTtype="text"name="other"/>List<WebElement>inputs=driver.findElements(By.xpath("http://input"));8/1/2023元素定位ByXPATH1310/3/2023元素定位使用javascript您可以執(zhí)行任意JavaScript找到一個(gè)元素,只要你返回一個(gè)DOM元素,它會(huì)自動(dòng)轉(zhuǎn)換到一個(gè)WebElement對(duì)象。例子:jQuery的頁(yè)面加載一個(gè)簡(jiǎn)單的例子:WebElementelement=(WebElement)((JavascriptExecutor)driver).executeScript("return$('.cheese')[0]");尋求所有的頁(yè)面上的input元素:List<WebElement>labels=driver.findElements(By.tagName("label"));List<WebElement>inputs=(List<WebElement>)((JavascriptExecutor)driver).executeScript("varlabels=arguments[0],inputs=[];for(vari=0;i<labels.length;i++){"+"inputs.push(document.getElementById(labels[i].getAttribute('for')));}returninputs;",labels);8/1/2023元素定位使用javascript1410/3/2023select標(biāo)簽操作遍歷select標(biāo)簽WebElementselect=driver.findElement(By.tagName("select"));List<WebElement>allOptions=select.findElements(By.tagName("option"));for(WebElementoption:allOptions){System.out.println(String.format("Valueis:%s",option.getAttribute("value")));option.click();}選擇某一個(gè)選項(xiàng):Selectselect=newSelect(driver.findElement(By.tagName("select")));select.deselectAll();select.selectByVisibleText("Edam");8/1/2023select標(biāo)簽操作遍歷select標(biāo)簽1510/3/2023上傳文件WebElementFileUpload=driver.findElement(By.id("upload"));StringfilePath="C:\test\\uploadfile\\media_ads\\test.jpg";FileUpload.sendKeys(filePath);8/1/2023上傳文件WebElementFileUpl1610/3/2023提交Submit在form中driver.findElement(By.id("submit")).click();submit不在form中WebElement.submit();建議使用第一種方式,出錯(cuò)的幾率比較小,并且比較直觀8/1/2023提交Submit在form中1710/3/2023拖拽操作WebElementelement=driver.findElement(B("source"));WebElementtarget=driver.findElement(B("target"));(newActions(driver)).dragAndDrop(element,target).perform();8/1/2023拖拽操作WebElementelement1810/3/2023window和frame的切換Windows和Frames之間的切換一些web應(yīng)用程序有許多Frames或多個(gè)Windows。WebDriver支持使用“switchTo”的方法實(shí)現(xiàn)的窗口之間切換。driver.switchTo().window("windowName");所有對(duì)driver的調(diào)用都會(huì)指向特定的窗口,但是我們?cè)趺粗来翱诘拿帜??我們可以查看javascript代碼和打開(kāi)他的鏈接:<ahref="somewhere.html"target="windowName">Clickheretoopenanewwindow</a>另外,還可以通過(guò)“windowhandle”去調(diào)用“switchTo().window()”,通過(guò)這個(gè),我們就遍歷來(lái)找到所有打開(kāi)的窗口:for(Stringhandle:driver.getWindowHandles()){driver.switchTo().window(handle);}8/1/2023window和frame的切換Windows1910/3/2023frame和window的切換Switch同樣支持frame:driver.switchTo().frame("frameName");同樣可以使用他訪問(wèn)subframe,找frameName的第一個(gè)subframe中叫做child的frame:driver.switchTo().frame("frameName.0.child");8/1/2023frame和window的切換Switch同2010/3/2023彈出框從selenium2.0開(kāi)始,已經(jīng)支持對(duì)彈出框的獲取Alertalert=driver.switchTo().alert();這個(gè)方法會(huì)返回當(dāng)前被打開(kāi)打警告框,你可以進(jìn)行統(tǒng)一,取消,讀取提示內(nèi)容,后則進(jìn)入到提示,這個(gè)同樣使用alerts,confirms,prompts。8/1/2023彈出框從selenium2.0開(kāi)始,已經(jīng)支持2110/3/2023一些瀏覽器的自身操作Navigation:HistoryandLocation之前我們就可以通過(guò)get方法來(lái)打開(kāi)一個(gè)網(wǎng)頁(yè),像我們所看到的,WebDriver同樣還有許多小接口,Navigation就是其中一個(gè)小接口:driver.navigate().to("");navigate().to和get()其實(shí)作用是一樣的,但是navigate還可以進(jìn)行瀏覽器的前進(jìn)后退操作:driver.navigate().forward();driver.navigate().back();8/1/2023一些瀏覽器的自身操作Navigation:H22Webdriver鼠標(biāo)動(dòng)作的操作在前面的例子中已經(jīng)出現(xiàn)過(guò)鼠標(biāo)的操作了,就是拖拽,但是鼠標(biāo)動(dòng)作有很多,比如雙擊,單擊右鍵等。操作類在API中是Actions的類,具體的實(shí)現(xiàn)見(jiàn)例子:WedDriverdriver=newFirefoxDriver();Actionsaction=newActions(driver);這個(gè)時(shí)候可以調(diào)用action來(lái)進(jìn)行各種操作。Action.doubleClick();//雙擊左鍵具體的例子可以參考selenium的API10/3/2023Webdriver鼠標(biāo)動(dòng)作的操作在前面的例子中已經(jīng)出現(xiàn)過(guò)鼠標(biāo)23WebDriver中調(diào)用javascript有一些在頁(yè)面的東西可能運(yùn)用webdriver的API不好解決,這個(gè)時(shí)候我們可以調(diào)用javascript來(lái)解析DOM。所有的webdriver的實(shí)現(xiàn)類都繼承了JavascriptExecutor的接口。下面一個(gè)運(yùn)行javascript的例子:WebDriverdriver=newFirefoxDriver();Stringjs=“alert('Hello')”;(javascriptExecutor)driver.executeScript(js);這個(gè)例子就會(huì)執(zhí)行alert。因?yàn)獒槍?duì)前端,jquery比較流行,所以我們希望能夠使用jquery,下面介紹一下使用jquery的例子。10/3/2023WebDriver中調(diào)用javascript有一些在頁(yè)面的東24WebDriver中使用jquery假如設(shè)定jquery包的路徑為path,則程序如下:Stringjquery=null;FileInputStre
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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年度生態(tài)農(nóng)業(yè)地產(chǎn)合作開(kāi)發(fā)合同書(shū)
- 二零二五年度出租車座套定制與品牌推廣合同3篇
- 二零二五版電力設(shè)備質(zhì)檢員招聘與職責(zé)協(xié)議書(shū)3篇
- 個(gè)性化倉(cāng)儲(chǔ)解決方案服務(wù)外包協(xié)議范本版A版
- 2025年度企業(yè)員工心理健康培訓(xùn)服務(wù)合同范本8篇
- 中美洲2024年原材料供應(yīng)協(xié)議
- 養(yǎng)殖場(chǎng)動(dòng)物疫病防治服務(wù)合同(2025年度)3篇
- 2025版圍欄施工安全風(fēng)險(xiǎn)評(píng)估與應(yīng)急預(yù)案合同3篇
- 2025年度買(mǎi)賣合同擔(dān)保條款修訂版及風(fēng)險(xiǎn)防范策略
- 二零二五年度供暖設(shè)施安全檢測(cè)與暖氣安裝合同樣本
- 智慧校園信息化建設(shè)項(xiàng)目組織人員安排方案
- 浙教版七年級(jí)上冊(cè)數(shù)學(xué)第4章代數(shù)式單元測(cè)試卷(含答案)
- 一病一品成果護(hù)理匯報(bào)
- AQ-T 1009-2021礦山救護(hù)隊(duì)標(biāo)準(zhǔn)化考核規(guī)范
- 鹽酸埃克替尼臨床療效、不良反應(yīng)與藥代動(dòng)力學(xué)的相關(guān)性分析的開(kāi)題報(bào)告
- 消防設(shè)施安全檢查表
- 組合結(jié)構(gòu)設(shè)計(jì)原理 第2版 課件 第6、7章 鋼-混凝土組合梁、鋼-混凝土組合剪力墻
- 建筑公司資質(zhì)常識(shí)培訓(xùn)課件
- GB/T 26316-2023市場(chǎng)、民意和社會(huì)調(diào)查(包括洞察與數(shù)據(jù)分析)術(shù)語(yǔ)和服務(wù)要求
- 春節(jié)值班安全教育培訓(xùn)
- 帶狀皰疹護(hù)理查房
評(píng)論
0/150
提交評(píng)論