摘要:他支持手機瀏覽器,也支持等語言,支持如等操作系統,是一套為自動化測試量身定制的框架,框架由多個工具組成,包括,,和,至于他們的功能和作用請大家自行百度腦補,下面將重點介紹主要功能。
Selenium是ThroughtWorks公司一個強大的開源Web功能測試工具系列,提供一套測試函數,用于支持Web自動化測試。函數非常靈活,能夠完成界面元素定位、窗口跳轉、結果比較。他支持IE、Firefox、Safari、Chrome、Android手機瀏覽器,也支持Java、C#、Python、Ruby、PHP等語言,支持如Windows、Linux、IOS、Android等操作系統,是一套為web自動化測試量身定制的web框架, Selenium框架由多個工具組成,包括:Selenium IDE,Selenium RC,Selenium WebDriver和SeleniumRC,至于他們的功能和作用請大家自行百度腦補,下面將重點介紹selenium主要功能WebDriver。
1、瀏覽器并打開指定網頁
WebDriver driver = newChromeDriver();//初始化Google瀏覽器對象
WebDriver driver = newFirefoxDriver();//初始化火狐瀏覽器
WebDriver driver = new InternetExplorerDriver();//初始化IE瀏覽器
driver.get(“www.baidu.com”)//打開百度頁面
driver.close();//關閉當前頁面
driver.quit();//關閉由selenium所啟動的所有頁面
備注:有些瀏覽器比如火狐并沒有安裝在默認路徑,那么需要指定瀏覽器路徑:System.setProperty("webdriver.firefox.bin","D:Program FilesMozilla Firefoxfirefox.exe");
2、瀏覽器操作
driver.navigate().back();//返回或向前
driver.navigate().forward();//向后
driver.navigate().refresh();//刷新
driver.manage().window().maxsize();//最大畫窗口
String title = driver.getTitle(); //返回當前頁面的Ttile
String currentUrl = driver.getCurrentUrl(); //返回當前頁面的url
getPageSource() //返回當前頁面的源碼
getWindowHandle() //返回當前的瀏覽器的窗口句柄
getWindowHandles() //返回當前的瀏覽器的所有窗口句柄
備注:對于句柄等的介紹后續會有詳細篇幅進行介紹,此處不做贅述
a、單元素定位:
例子:
1、By.id(id) //用唯一屬性id來定位非常推薦使用 優先級最高
2、By.name(name) //用name屬性來定位也是非常高效的優先級僅次于id
3、By.linkText(linkText) //即通過超文本鏈接上的"文字信息"來定位元素,這種方式一般專門用于定位頁面上的超文本鏈接:一般tag為屬性href=鏈接
4、By.partialLinkText(linkText) //適用于鏈接類的元素,模糊匹配,即包含herf屬性的元素 ,同BylinkText()
5、By.className(className)) //對于元素的屬性包含class的情況適用
6、By.tagName(name) //通用定位方式,適用于層級定位,比如button就是一個tag 因此一般都會找出多條記錄,需要在進行定位,通常用for循環
以上均為單元素定位,當然6一般定位的結果都是多個,其他的一般結果為1個。單元素定位的命令基本格式如下:
WebElemet element = driver.findElement(By.id("imageField"));
element.click();//點擊
element.sendKeys("String");//輸入
備注:有一個現象,就是復合類,即例子中的class="gbqfba sb_bs">,如果用driver.findElement(By.id("gbqfba sb_bs"))一定會報錯,這種復合類必須用前面的或者后面的鍵值才能定位成功,即:driver.findElement(By.id("sb_bs"))or driver.findElement(By.id("gbqfba")),否則會報錯,但是注意,如果class="gbqfba:sb_bs">這不是符合類,可以自行腦補一下css
b、多元素定位:
多元素定位其實是指定位的元素返回多個結果,一般會用List集合來存儲結果,用for循環和if判斷語句來找到自己需要的元素,比如用tagName定位,返回的結果就會多個如下:
List
for(WebElement element :allInputs){
if(element.getAttribute("type").equals("text")){
System.out.println(e.getText().toString()); //打印出每個文本框里的值
}
}
c、層級定位
層級定位,顧名思義,就按照層級關系進行定位,一般是應用于無法直接定位到需要定位的元素,所以采用先定位其父元素,在定位子元素的方式,一般用于表格或下拉框定位:
表格應用
WebElement table = driver.findElement(By.id("table"));
List
下拉框應用
WebElement select = driver.findElement(By.name("select")); //
List
for(WebElement value : selectvalue){
System.out.println(“value”+value.getText())
}
e、xpath定位
Xpath是一個非常強大的定位方式,幾乎可以定位到所有數據,但是在我們學習Xpath定位之前,我們要知道明確兩個概念,絕對路徑&相對路徑,絕對路徑是以“/”開始的,
例如/body/buttononclick/input[1], 這就是絕對路徑的表達形式,相反“相對路徑”是以“//”開頭的,比如//input[2],另外需要多說一句的是,當xpath的路徑以"/"開頭時,表示
讓Xpath解析引擎從文檔的根節點開始解析。當xpath路徑以"http://"開頭時,則表示讓xpath引擎從文檔的任意符合的元素節點開始進行解析。而當/出現在xpath路徑中時,則表示
尋找父節點的直接子節點,當"http://"出現在xpath路徑中時,表示尋找父節點下任意符合條件的子節點,不管嵌套了多少層級(這些下面都有例子,大家可以參照來試驗)。弄清
這個原則,我們就可以靈活的使用 Xpaht進行定位了,下面還是看幾個"栗子"吧
查找頁面根元素://
查找頁面上所有的input元素://input
查找頁面上第一個form元素內的直接子input元素(即只包括form元素的下一級input元素,使用絕對路徑表示,單/號)://form[1]/input
查找頁面上第一個form元素內的所有子input元素(只要在form元素內的input都算,不管還嵌套了多少個其他標簽,使用相對路徑表示,雙//號)://form[1]//input
查找頁面上第一個form元素://form[1]
查找頁面上id為loginForm的form元素://form[@id=loginForm]
查找頁面上具有name屬性為username的input元素://input[@name=username]
查找頁面上id為loginForm的form元素下的第一個input元素://form[@id=loginForm]/input[1]
查找頁面具有name屬性為contiune并且type屬性為button的input元素://input[@name=continue][@type=button]
查找頁面上id為loginForm的form元素下第4個input元素://form[@id=loginForm]/input[4]
查找頁面上id是以“myid"開始/結尾關鍵字的元素://img[starts-with(@id,myid)] //img[ends-with(@id,myid)]
查找頁面上id屬性包含g1關鍵字的元素://img[contains(@id,g1)]
查找頁面上文本是“百度搜索”的所有元素://a[text()=百度搜索] //a[contains(text(),"搜索")] --文本模糊定位
查找頁面上input的最有一個元素://input[last()] 函數位置定位
a、通過路徑定位
WebElement xpath = driver.findElement(By.xpath("html/body/div/form/input"));
WebElement xpath = driver.findElement(By.xpath("http://input"))
b、通過索引定位
WebElement xpath = driver.findElement(By.xpath("http://input[3]"));
c、通過屬性定位
WebElement xpath = driver.findElement(By.xpath(""http://*[@id=su and @type=submit]""));
WebElement xpath = driver.findElement(By.xpath(""http://*[@id=su][type=submit]""));
d、文本屬性定位
WebElement xpath = driver.findElement(By.xpath("http://div[@class=qrcode-text]/p/b[text()=百度]"));
e、模糊匹配
WebElement xpath = driver.findElement(By.xpath("http://input[starts-with(@id,su)"));
WebElement xpath = driver.findElement(By.xpath("http://input[ends-with(@id,su)"));
WebElement xpath = driver.findElement(By.xpath("http://input[contains(@id,su)"));
WebElement xpath = driver.findElement(By.xpath(""http://*[@id=su][type=submit]""));
代碼實例:WebElement xpath = driver.findElement(By.xpath("http://form[@id=loginForm]"))
xpath定位就介紹這些,后續還會更新關于Cssselect、js定位、下拉框、單選/多選框、文本框、彈窗、句柄等,敬請關注
小技巧:
1.當頁面元素有id屬性時,最好盡量用id來定位。但由于現實項目中很多程序員其實寫的代碼并不規范,會缺少很多標準屬性,這時就只有選擇其他定位方法。
2.xpath很強悍,但定位性能不是很好,所以還是盡量少用。如果確實少數元素不好定位,可以選擇xpath或cssSelector。如果自動化案例中使用大量的Xpath進行定位,你會發現你的腳本執行時間非常的長,慎用。
3.當要定位一組相同元素時,可以考慮用tagName或name。
4.當有鏈接需要定位時,可以考慮linkText或partialLinkText方式。
5.在進行定位的時候,盡量使用相對路徑定位,如果使用絕對路徑,那么一但頁面結構變化,則無法使用原有的定位方式,但是相對路徑就特別靈活,復用性高,也是項目中特別常用的方式
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/2202.html
文章目錄 selenium 簡介selenium安裝安裝瀏覽器驅動確定瀏覽器版本下載驅動 定位頁面元素打開指定頁面id 定位name 定位class 定位tag 定位xpath 定位css 定位link 定位partial_link 定位 瀏覽器控制修改瀏覽器窗口大小瀏覽器前進&后退瀏覽器刷新瀏覽器窗口切換常見操作 鼠標控制單擊左鍵單擊右鍵雙擊拖動鼠標懸停 鍵盤控制 seleni...
摘要:概述是一款開源的自動化框架,模擬用戶操作瀏覽器的行為,主要用于界面自動化瀏覽器兼容性測試。將瀏覽器原生的封裝成,作為編程語言與瀏覽器通信的橋梁,從而達到操作瀏覽器的目的。 ...
摘要:難在哪里根據上面的標簽需要定位最后一行標簽,以下列出了四種方式,定位的方式多樣并不唯一,使用時根據情況進行解析即可。加入每日一練我們使用并指明標簽內全部文本即可定位。 ...
摘要:不同目標的自動化測試有不同的測試工具,但是任何工具都無不例外的需要編程的過程,實現源代碼,也可以稱之為測試腳本。 寫在最前面:目前自動化測試并不屬于新鮮的事物,或者說自動化測試的各種方法論已經層出不窮,但是,能夠在項目中持之以恒的實踐自動化測試的團隊,卻依舊不是非常多。有的團隊知道怎么做,做的還不夠好;有的團隊還正在探索和摸索怎么做,甚至還有一些多方面的技術上和非技術上的舊系統需要重構……...
摘要:一個網站使用的特征就是源代碼里包含了入口比如如果你在一個網站上看到了,那么采集這個網站數據的時候要格外小心。直接點擊下拉框中的選項不一定可行。未審核初審通過復審通過審核不通過專門提供了類來處理下拉框。 JavaScript JavaScript 是網絡上最常用也是支持者最多的客戶端腳本語言。它可以收集 用戶的跟蹤數據,不需要重載頁面直接提交表單,在頁面嵌入多媒體文件,甚至運行網頁游戲。...
閱讀 730·2023-04-25 19:43
閱讀 3974·2021-11-30 14:52
閱讀 3801·2021-11-30 14:52
閱讀 3865·2021-11-29 11:00
閱讀 3796·2021-11-29 11:00
閱讀 3894·2021-11-29 11:00
閱讀 3571·2021-11-29 11:00
閱讀 6154·2021-11-29 11:00