亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源功能測(cè)試工具 > Selenium
Selenium使用注意事項(xiàng)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2016/11/16 11:47:52 ] 推薦標(biāo)簽:Selenium 功能測(cè)試

  Selenium是一套用于進(jìn)行瀏覽器自動(dòng)化測(cè)試的開(kāi)源工具集,可進(jìn)行Web應(yīng)用的端到端測(cè)試。Selenium主要包括兩個(gè)工具:一是Selenium IDE,這是一個(gè)在Firefox上運(yùn)行的插件,可對(duì)用戶的行為進(jìn)行錄制與回放,還可以將錄制的內(nèi)容生成代碼后在Selenium Remote Control上運(yùn)行。二是本文的重點(diǎn)Selenium WebDriver(簡(jiǎn)稱WebDriver),這是一個(gè)開(kāi)源的項(xiàng)目,能夠讓用戶編寫(xiě)在各種主流瀏覽器上運(yùn)行的互操作代碼。目前已經(jīng)推出了支持C#、Java等語(yǔ)言的類庫(kù)。W3C的WebDriver規(guī)范也正是在這個(gè)開(kāi)源項(xiàng)目的基礎(chǔ)上發(fā)展起來(lái)的。
  WebDriver可謂QA工程師進(jìn)行UI測(cè)試強(qiáng)大的利器,它提供了豐富的API以實(shí)現(xiàn)訪問(wèn)DOM、運(yùn)行JavaScript、模擬鍵盤(pán)輸入等操作。利用WebDriver進(jìn)行編程可實(shí)現(xiàn)UI測(cè)試的完全自動(dòng)化,為回歸測(cè)試、乃至持續(xù)集成流程提供了極大的便利性。盡管如此,但使用WebDriver編寫(xiě)測(cè)試需要投入大量的時(shí)間,并且由于瀏覽器行為的多樣性,以及UI的易變性,需要進(jìn)行大量的代碼維護(hù)工作。與應(yīng)用程序的代碼一樣,編寫(xiě)測(cè)試代碼同樣需要遵循良好的代碼規(guī)范與設(shè)計(jì),糟糕的代碼結(jié)構(gòu)會(huì)很快使得測(cè)試代碼的維護(hù)變成一個(gè)無(wú)底洞,終被團(tuán)隊(duì)無(wú)奈地拋棄。
  在今年的OpenWest 2015大會(huì)上,來(lái)自Lucidchart的Jared Yarn進(jìn)行了一場(chǎng)關(guān)于Selenium WebDriver測(cè)試方面的演講,并隨后撰文總結(jié)了演講的內(nèi)容。他首先談起了所在的團(tuán)隊(duì)在使用WebDriver時(shí)所遇到的困境,當(dāng)時(shí)他們維護(hù)著由大約40個(gè)不同開(kāi)發(fā)者編寫(xiě)的300多個(gè)測(cè)試用例(該團(tuán)隊(duì)沒(méi)有專職的測(cè)試人員,測(cè)試代碼全部由開(kāi)發(fā)者編寫(xiě)),每天的運(yùn)行都會(huì)產(chǎn)生70個(gè)左右的錯(cuò)誤,這一情況在分配了專門的維護(hù)人員之后也沒(méi)有多少改善。為了徹底改進(jìn)測(cè)試集的可靠性、可伸縮性以及可維護(hù)性,Yarn與整個(gè)團(tuán)隊(duì)一起對(duì)整個(gè)測(cè)試代碼結(jié)構(gòu)進(jìn)行了重構(gòu)。經(jīng)過(guò)重構(gòu)后,誤判的失敗率降到了1%以下,并且編寫(xiě)測(cè)試的時(shí)間也大大縮短了。
  Yarn將這次重構(gòu)的成功歸結(jié)為以下七點(diǎn)。
  創(chuàng)建Application User對(duì)象團(tuán)隊(duì)首先要解決的問(wèn)題是編寫(xiě)測(cè)試所需投入的精力過(guò)大,為了克服這一點(diǎn),他們?cè)O(shè)計(jì)了一些實(shí)體對(duì)象。首先創(chuàng)建的是一種Application User對(duì)象,它代表了網(wǎng)站的后端功能,并且通過(guò)一些輔助方法提供了準(zhǔn)備測(cè)試場(chǎng)景、或是在測(cè)試完成前進(jìn)行teardown(清理)工作的功能。以下是使用這種對(duì)象的一個(gè)示例:
  class EditorPerformanceTest extends LucidSpec {
  val user = new ChartUser
  override def beforeAll() {
  user.login()
  user.createDocument()
  }
  …
  override def afterAll() {
  user.finished()
  }通過(guò)這種對(duì)象的應(yīng)用,所有的準(zhǔn)備工作被簡(jiǎn)化成兩個(gè)方法調(diào)用(login與createDocument),而teardown中的邏輯則由finished方法實(shí)現(xiàn),因此開(kāi)發(fā)者可以專注于具體的測(cè)試邏輯,將精力集中在bug修復(fù)或特性的檢測(cè)。
  創(chuàng)建Application Driver對(duì)象WebDriver的API非常豐富,單是定位某個(gè)UI元素有不下20種做法,這種巨大的靈活性也令人望而生畏。有數(shù)之不盡的方式可以完成拖放、單擊、滾動(dòng)以及輸入等操作。為了簡(jiǎn)化這一點(diǎn),Yarn的團(tuán)隊(duì)設(shè)計(jì)了一種Application Driver類,以簡(jiǎn)化一些常見(jiàn)的操作。它首先繼承自WebDriver類,并引用了Selenium中的Actions類,隨后加入了一些方法用于實(shí)現(xiàn)常見(jiàn)的用戶操作,例如單擊元素與執(zhí)行腳本等等。可以通過(guò)下面這個(gè)UML圖概括這個(gè)類的設(shè)計(jì)。

  其使用方法如下:
  def dragAndDrop(cssFrom: String, cssTo: String) {
  val elem1 = getElementByCss(cssFrom)
  val elem2 = getElementByCss(cssTo)
  actions.dragAndDrop(elem1, elem2)
  }
  def contextClickByCss(css: String)
  actions.contextClick(getElementByCss(css))
  }通過(guò)ID訪問(wèn)DOM對(duì)象在WebDriver測(cè)試過(guò)程中,如何定位一個(gè)DOM元素是有挑戰(zhàn)性的任務(wù)之一。常見(jiàn)的方式包括XPath、CSS路徑以及各種復(fù)雜的CSS選擇器(類似于jQuery),但這些方式在元素移動(dòng)了位置或改變了CSS類名之后會(huì)失效,不得不重新修改代碼。因此,Yarn建議使用DOM元素的ID進(jìn)行定位,這種方式的好處是不受元素所在位置、以及所應(yīng)用的樣式的影響。Yarn的團(tuán)隊(duì)隨后對(duì)產(chǎn)品的某一重要特性進(jìn)行了UI改版,而由于頁(yè)面中的ID保持不變,因此測(cè)試代碼的改動(dòng)非常之少。
  頁(yè)面對(duì)象模式頁(yè)面對(duì)象模式(Page Object Pattern)是測(cè)試代碼可維護(hù)性的關(guān)鍵因素,這一模式本身非常簡(jiǎn)單,它表示每個(gè)頁(yè)面應(yīng)了解如何執(zhí)行該頁(yè)面當(dāng)中的所有操作。舉例來(lái)說(shuō),登錄頁(yè)面知道應(yīng)當(dāng)如何提交用戶的認(rèn)證信息、如何點(diǎn)擊“忘記密碼鏈接”等等操作。如果將這些功能轉(zhuǎn)移到一個(gè)公用的地方,可以在所有測(cè)試中重用這部分功能。以下代碼表示了一個(gè)文檔頁(yè)面的功能:
  object DocsList extends RetryHelper with MainMenu with Page {
  val actionsPanel = new ActionsPanel
  val fileBrowser = new FileBrowser
  val fileTree = new FileTree
  val sharingPanel = new SharingPanel
  val invitationPanel = new InvitationPanel這個(gè)頁(yè)面中的操作非常多,因此Yarn將其分解為多個(gè)較小的類,每個(gè)類都代表了頁(yè)面中某個(gè)塊的功能。它們各自包含在這一區(qū)域內(nèi)可執(zhí)行的操作的相關(guān)方法,正如以下代碼所示:
  def clickCreateDocument(implicit user: LucidUser) {
  doWithRetry() {
  user.clickElement("new-document-button")
  }
  }
  def selectDocument(fileNum: Int=0)(implicit user: LucidUser) {
  doWithRetry() {
  user.driver.getElements(docIconCss)(fileNum).click()
  }
  }
  def numberOfDocsEquals(numberOfDocs: Int)(implicit user: LucidUser) : Boolean ={
  predicateWithRetry(WebUser.longWaitTime *5, WebUser.waitTime) {
  numberOfDocuments == numberOfDocs
  }
  }

上一頁(yè)12下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 日本在线www | 羞羞视频免费网站在线看 | 免费成年人在线视频 | 亚洲国产日韩a在线播放 | 午夜免费观看体验区入口 | 91在线欧美 | 亚洲制服丝袜在线播放 | 日本中文字幕免费 | 一区在线免费观看 | 干亚洲美女 | 久草手机视频在线 | 污丝瓜视频 | 中文字幕在线播放 | 成人欧美视频 | 男女视频在线免费观看 | 中文字幕视频免费在线观看 | 天天干天天色天天射 | 成人午夜久久精品 | 香港一级纯黄大片 | 欧美中日韩在线 | 在线a网站 | 精品国产免费一区二区 | 欧美成人精品 | 午夜免费看视频 | 亚洲黄色视屏 | 拔擦拔擦8x华人免费久久 | 一级免费黄色录像 | 国产麻豆a一级毛片爽爽影院 | www.黄com| 久久狠狠色噜噜狠狠狠狠97 | 国产黄色高清视频 | 成年男女男免费视频网站不卡 | 国产精品综合视频 | 午夜刺激爽爽视频免费观看 | 国产成人精品免费2021 | 小明永久视频免费播放 | 亚洲免费精品视频 | 日本高清乱理论片 | 理伦片免费理论片 | 欧美日韩性视频一区二区三区 | 日韩精品一区二区三区中文精品 |