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

您的位置:軟件測試 > 開源軟件測試 > 開源功能測試工具 > Selenium
全球化測試中利用Selenium定位Web元素難點解析
作者:網絡轉載 發布時間:[ 2016/6/22 11:06:11 ] 推薦標簽:功能測試工具 Selenium

  在軟件生命周期各個階段都逐漸開始重視交付速度的情況下,全球化測試同樣也面臨了敏捷的挑戰。因此自動化測試也開始在全球化測試領域變得流行起來,但是由于受限于翻譯驗證性測試中"一次編寫,多個語言環境下運行"的特點,在利用 Selenium 進行 Web 自動化測試時對元素的一致定位成了編寫自動化腳本的瓶頸。本文將針對現階段遇到的問題結合實例詳細闡述在利用 Selenium 對 Web 應用進行自動化測試時定位元素的方法,并針對全球化測試中遇到的難點給予重點解答。
  翻譯驗證性測試中定位 Web 元素遇到的挑戰
  翻譯驗證性測試是全球化測試中的一部分,旨在驗證軟件用戶界面中需要翻譯的字符串是否已經正確翻譯。為了提高效率,目前一般采用先由熟悉產品的測試支持工程師書寫測試用例,再由熟悉各國語言的測試人員執行用例或者先由測試支持工程師將復雜用例的執行結果在各個語言環境下截圖,然后再發送給測試人員進行驗證兩種模式。目前隨著持續交付模式的出現,無論是測試人員多語言環境下重復執行用例還是測試支持工程師多語言環境下手動截圖都難以滿足持續交付對速度的要求,因此測試支持工程師編寫自動化腳本完成多語言環境下的自動截圖變成了提高效率的必然選擇。
  在傳統的 Web 自動化測試應用場景中,由于程序編碼的不規范,元素通常很難直接通過靜態 ID 或 name 定位,幸好有 CSS 選擇器和 XPath 定位為我們提供了新的可能。然而由于 DHTML 和 Ajax 的盛行,新的挑戰又擺在了測試人員面前,由 Dojo 等客戶端腳本生成的 DOM 結構異常復雜:層次繁多且一個 DOM 樹上可能存在多個頁面的 DOM 子節點,而且其中元素的 ID 是動態的(該 ID 一般由一個前綴和一個動態的數字組成,前綴表明了元素對應的部件類型,數字則由運行時該小部件在 DOM 樹上的位置確定)。這導致了有些元素甚至需要依靠 CSS 偽類再運用組合選擇器才能精確定位的到。而對于在翻譯驗證性測試中的自動化,這種問題尤其突出,由于翻譯驗證性測試中的自動化腳本“一次編寫,多個語言環境下”運行的要求,元素定位的后“救命稻草”-CSS 偽類中的內文本匹配也無法開箱即用了。
  下面筆者將通過實例詳細闡述元素定位的方法,以期讀者能靈活運用以應對上述的各種挑戰。
  Selenium IDE 與 WebDriver 定位元素概覽
  Selenium 是一款強大的瀏覽器自動化工具,利用它可以實現 Web 界面測試的自動化。根據實現原理和使用方式的不同,其又分為 Selenium IDE 和 WebDriver,前者以瀏覽器插件的方式賦予用戶簡單快速地創建自動化腳本的能力,后者則通過 API 庫的形式向用戶提供更加靈活和健壯的 Web 自動化能力。
  Selenium IDE 在其命令中采用 locatorType=location 的格式進行定位,該方法將定位到條件匹配的第一個元素,一般情況下 locatorType 可以省略;WebDriver 利用 findElement(By.locatorType("value") 或 findElements(By.locatorType("value") 函數查找元素,前者將返回一個的元素,后者將返回一個元素列表。具體的定位由 By.locatorType("value") 實現。
  除去定位使用的方法而言,二者本質上都是通過 locatorType 進行定位的,常用的 locatorType 包括 id,name,link text,dom/JavaScript,xpath,css 等,示例見清單 2(行末括號中的數字顯示當前行定位器將定位到清單 1 HTML 文檔中的第幾行元素):
  清單 1. HTML 示例 1
(01)<html>
(02) <body>
(03) <form id="loginForm" name="loginFrom">
(04) <input class="required" name="username" type="text" />
(05) <input class="required passfield" name="password" type="password" />
(06) <input name="continue" type="submit" value="Login" />
(07) <input name="continue" type="button" value="Clear" />
(08) </form>
(09) <p>Are you sure you want to do this?</p>
(10) <a href="continue.html">Continue</a>
(11) <a href="cancel.html">Cancel</a>
(12)</body>
(13)<html>
  清單 2. Selenium 和 WebDriver 中通用的定位方式
//by ID
id=loginForm(03)//in IDE
WebElement element = driver.findElement(By.id("loginForm"));(03)//in WebDriver
//by Name
name=continue type=button(07)//in IDE
WebElement element = driver.findElement(By.name("loginForm"));(03)//in WebDriver
//by link text
link=Continue(10)//in IDE
WebElement element = driver.findElement(By.linkText("Continue"));(10)//in WebDriver
//by DOM or JavaScript
dom=document.forms[0].elements['username'](04)//use DOM in IDE
WebElement element = (WebElement) ((JavascriptExecutor)driver).
executeScript("return $('.required')[0]"); (04)//use JQuery in WebDriver
//by XPath
//form[@id='loginForm']/input[1](04)//by IDE
WebElement element = driver.findElement(By.xpath("//input[@name='username']"));(04)//by WebDriver
//by CSS
css=#loginForm input[type="password"](05)//by IDE
WebElement e = driver.findElement(By.cssSelector("input.passfield")(05)//by WebDriver
  通過 ID 和 name 定位是高效也是的定位方式,不過由于 name 不一定,在定位時匹配條件的元素可能有多個,因此這種情況下只會定位到匹配條件的第一個元素。針對多個元素具有相同 name(或鏈接文本)屬性的情況還需額外增加其他的過濾器才能進行精確定位,如清單 2 中 IDE 利用 name 進行定位的示例。
  DOM 代表了整個 HTML 文檔的結構,使用 JavaScript 可以訪問 DOM 中的節點。Selenium IDE 基于 DOM 結構可以使用 JavaScript 的點操作符進行層次定位以簡化定位操作,由于只有 DOM 定位器以“document”開頭,因此“dom=”也可以省略;此外在 WebDriver 中甚至可以通過執行任意的返回值為 DOM 對象的 JavaScript 語句來查找元素,如清單 2 中 WebDriver 使用 JQuery(一種 JavaScript 框架)的元素查找函數$進行定位。
  XPath 初是用來在 XML 文檔中定位 DOM 節點的語言,由于 HTML 也可以算作 XML 的一種實現,所以 Selenium 也可以利用 XPath 這一強大的語言來定位 Web 元素。XPath 在傳統屬性定位之外擴展了諸如“定位第三個多選框”等定位能力,以便應對沒有 ID 或 name 屬性的情況。利用 Xpath 可以通過路徑,或者相對于一個可精確定位的元素的相對路徑來定位。為了保證定位的健壯性,推薦使用相對路徑和基于位置關系的定位。同樣由于只有 XPath 定位器以“//”開頭,所以“xpath=”也可以省略。
  CSS (Cascading Style Sheets) 是一種用于渲染 HTML 或者 XML 文檔的語言,CSS 利用其選擇器可以將樣式屬性綁定到文檔中的指定元素,即前端開發人員可以利用 CSS 設定頁面上每一個元素的樣式。所以理論上說無論一個元素定位有多復雜,既然開發人員能夠定位到并設置樣式,那么測試人員同樣應該也能定位繼而操作該元素。這也正是 Selenium 官方極力推薦使用 CSS 定位,而不是 XPath 定位的主要原因。CSS 定位被推崇的另一個原因是不同的瀏覽器 XPath 引擎不同甚至沒有自己的 Xpath 引擎,這導致了 XPath 定位速度較慢,而采用 CSS 定位往往能用更簡潔的語法快速定位到復雜的元素。因此后文將詳細介紹 CSS 定位器的使用方法。
  除了以上通用的定位方式之外,在 Selenium IDE 中還可通過 identifier 進行定位,這是通用也是默認的定位方式,其定位時首先將 identifier 的值視為 ID 繼而查找匹配元素,沒有匹配項之后再把其看作 name 進行查找,直到找到第一個匹配的元素為止。由于其是默認的定位方式,因此“identifier=”通常也會省略。對于 WebDriver 而言,特有的定位方式更多。首先它可以通過鏈接文本進行部分匹配,如清單 3 所示;然后它還可以通過標簽名或者 CSS 類名的方式進行定位,利用 findElement 的話這兩種方式均是定位到第一個匹配條件的元素,利用 findElements 則可獲得一個所有滿足條件的元素列表,如清單 3 所示。

上一頁12下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 91热久久免费频精品动漫99 | 亚洲日本一区二区三区在线 | 久久精品动漫网一区二区 | 成年人午夜免费视频 | 成人无遮挡 | 在线看www | 成人国产一区 | 性xxxx18免费观看视频 | 日韩欧美一区二区三区在线视频 | 10周岁女全身裸无打码免费 | 国产精品久久久久网站 | 欧洲在线观看在线视频吗 | 天堂va亚洲va欧美va国产 | 久久精品国产精品亚洲综合 | 久久综合九色综合欧美狠狠 | 欧美理论片在线观看一区二区 | 精品一区二区三区在线观看视频 | 国产成人网 | 欧美成人高清乱码 | 日韩理论在线观看 | 相泽亚洲一区中文字幕 | 日韩一级欧美一级 | 成人网在线视频 | 欧美成人精品高清在线播放 | 亚洲日本中文 | jizzzz亚洲丰满xxxxⅹ | 欧美日本免费一区二区三区 | 成人免费福利片在线观看 | 麻豆成人久久精品二区三区小说 | 视频黄色片| gogo人体大胆高清专业久久久 | 草草免费视频 | 精品国内视频 | 最新欧美一级视频 | 国产成人精品s8p视频 | 久久澡人人澡狠狠澡 | 日韩国产欧美一区二区三区在线 | 成人激情在线视频 | 一级黄色片免费播放 | 羞羞免费网站 | 无遮挡黄动漫在线观看播放 |