Selenium的基本使用
一、Selenium的Java編程基本語法
在Selenium的基本語法中首先是需要定位到頁面元素的,Selenium通過找尋到界面元素然后觸發相應的時間,通過頁面元素變化判斷是否執行了相應的操作。
可以通過頁面元素的屬性獲取相應的頁面元素。
1.通過Identifier(id)定位元素
所給出的定位的HTML元素必須要有identifier,如果沒有就會報告未找到相應元素的錯誤。通過ID來標識可以確定唯一性。
WebElement ele = By.id("idName");
只有當你明確知道元素的id屬性,才能使用。
2.通過Name定位元素
使用id定位元素固然方面,但是id并不是html元素必須的,我們可以使用Name定位元素位置。
使用Name定位元素的位置,會匹配第一個與Name匹配的元素。如果頁面中有多個相同的Name,可以使用更多的篩選器進行元素篩選的細化。
WebElement ele = By.Name("name");
只有明確知道原屬的那么,才能使用。
3.通過Xpath定位元素
在一些情況下無法得知頁面元素的id和name,還可以使用xpath從已知節點開始定位相應的元素。
絕對路徑進行定位 xpath=/html/body/form[1]
通過元素的相應屬性定位例如xpath=//form[@id='loginForm'] 表示從根節點開始查找一個form元素她包含一個屬性是id并且里面的值為loginForm
找到某一個元素下相應的子元素 xpath=//form[input/@name='username'] 找到Form表單下面的input元素并且該元素有一個屬性name且該name的值是username。
找到第一個指定的元素 xpath=//input[@name='username'] 扎到第一個input元素里面有一個name屬性并且該屬性值為username
還可以使用更加細分的查找 xpath = //input[@name='continue'][@type='button'] 找到input標簽,1.該標簽有一個name=continue屬性和type=button屬性的元素。
4.通過連接定位元素
WebElement ele = By.LinkText("xxxx");
當知曉相應的鏈接類容就可以定位到相應的元素。
5.通過DOM元素定位元素
DOM元素是HTML的基本元素,而且只有dom定位可以直接通過document
dom=document.getElementById('loginForm') dom=document.forms['loginForm'] dom=document.forms[0] document.forms[0].username document.forms[0].elements['username'] document.forms[0].elements[0] document.forms[0].elements[3] |
6.通過tagName,通過標簽名稱進行定位
List<WebElement> eles = By.TagName("tagname");
在一個頁面中相同的tag標簽太多了,如果僅適用單個tagname查詢會找到一個列表。
7.通過Css進行定位(Cascading Style Sheets)
css=form#loginForm css=input[name="username"] css=input.required[type="text"] css=input.passfield css=#loginForm input[type="button"] css=#loginForm input:nth-child(2) |
二、Selenium錯誤現場保存方法(截屏和記錄日志)
知曉了如何定位元素,我們就可以觸發頁面上相應的BOM事件了。
那么當執行頁面響應的自動化操作的時候發生了錯誤我們應該怎樣才能更好的記錄相應的錯誤呢?記錄Log日志和保存相應的屏幕錯誤信息。
1.首先記錄log日志,可使用為java量身定做的log4j進行日志記錄(我的另外一篇Log4j如何實現日志分模塊,分天,分錯誤級別進行記錄)
2.截取錯誤發生時的屏幕,這樣就可以很快的定位錯誤發生前的操作和錯誤發生時的錯誤信息了。
分享一段執行截屏的java代碼。
/*截屏操作,遇到錯誤自動截屏存儲到指定位置。 * 指定保存的路徑,然后通過 TakesScreenshot 的 getScreenshotAs進行截屏操作。 * WebElement 繼承 TakesScreenshot 這個最大能耐焊好的基于了瀏覽器,返回當前的狀態 * ——整個當前的HTML元素內容 * ——可視化部分的HTML元素 * */ public static void captureScreenshot(String arg0,WebDriver driver){ if(PrivateDataSource.Debug){ logger.debug("調試截圖功能,并把截圖存儲到:"+PrivateDataSource.screenshotsResultsPath); } String screenshotsResultsPath=PrivateDataSource.screenshotsResultsPath; String imagePath = screenshotsResultsPath + File.separator+arg0+"_" +arg0+".png"; File screenShotFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); try { org.apache.commons.io.FileUtils.copyFile(screenShotFile, new File(imagePath)); } catch (IOException e) { e.printStackTrace(); if(PrivateDataSource.DebugError){ logger.info( logger.getClass().getName()+" selenium輸出截圖功能失敗。以下是錯誤信息!"); logger.error(e.getStackTrace()); } } } |
三、Selenium瀏覽器兼容性測試
1.向瀏覽器注入一段可執行的JavaScript腳本
在很多情況下我們需要程序觸發一段JavaScript腳本,首先我們需要注冊相應的JavaScript到瀏覽器中然后觸發執行。
WebElement ele = driver.findElement(By.id("SubMenu7").xpath("http://table/tbody/tr[9]"));//定位Web頁面的元素 //((JavascriptExecutor)driver).executeScript("arguments[0].onclick=function(){alert('js has been execute!');}", ele);//為這個元素添加可執行的js ((JavascriptExecutor)driver).executeScript("arguments[0].onclick=function(){SelectMenu(this,'AirLineSeasonManage.aspx?TimeStamp=' + TimeStamp());}", ele);//為這個元素添加可執行的js ele.click(); |
以上代碼首先找到相應的元素
然后向相應的元素里面注入一段可執行腳本
最后點擊該元素執行這個JavaScript腳本。
2.IE瀏覽器運行注意點
首先需要下載一個IEDriverServer.exe工具然后放置在任意位置,記錄相應的存放path
設置瀏覽器啟動路徑System.setProperty("webdriver.ie.driver", "存放IEDriverServer.exe的path");
啟動程序開始執行
3.Chrome瀏覽器運行注意點
首先需要下載一個chromedriver.exe模擬Chrome瀏覽器的工具,放在任意位置,記錄相應的存放path
設置瀏覽器啟動路徑System.setProperty("webdriver.chrome.driver", "存放chromedriver.exe的path");
啟動程序開始執行
4.FireFox瀏覽器中運行注意點
直接安裝了FireFox瀏覽器,并且Selenium對FireFox有非常好的支持,所以不需要下載其余的模擬器進行執行驗證。
如果你的FireFox沒有默認安裝,即改變了默認的安裝路徑需要設定運行變量,不然FireFox不會被正常啟動的。
System.setProperty("webdriver.firefox.bin", "FireFox的安裝路徑");
啟動程序開始執行
posted on 2014-04-24 10:24 順其自然EVO 閱讀(623) 評論(0) 編輯 收藏 所屬分類: selenium and watir webdrivers 自動化測試學習