java selenium元素定位大全
頁面元素定位是自動(dòng)化中最重要的事情, selenium Webdriver 提供了很多種元素定位的方法。 測(cè)試人員應(yīng)該熟練掌握各種定位方法。 使用最簡(jiǎn)單,最穩(wěn)定的定位方法。
閱讀目錄
- 自動(dòng)化測(cè)試步驟
- 定位方法大全
- 如何定位
- 通過ID查找元素: By.id()
- 通過Name查找元素:By.name()
- 通過TagName查找元素: By.tagName()
- 通過ClassName 查找元素 By.className
- 通過LinkText查找元素 By.linkText();
- 通過PartialLinkText 查找元素 By.partialLinkText()
- 通過CSS選擇器查找元素、
- 通過Xpath 查找元素
自動(dòng)化測(cè)試步驟
在自動(dòng)化測(cè)試過程中, 測(cè)試程序通常的操作頁面元素步驟
1. 找到Web的頁面元素,并賦予到一個(gè)存儲(chǔ)對(duì)象中 (WebElement)
2. 對(duì)存儲(chǔ)頁面元素的對(duì)象進(jìn)行操作, 例如:點(diǎn)擊鏈接,在輸入框中輸入字符等
3. 驗(yàn)證頁面上的元素是否符合預(yù)期
通過這三個(gè)步驟, 我們可以完成一個(gè)頁面元素的操作, 找到頁面元素是很重要的一個(gè)步驟。 找不到頁面元素,后面就沒法做了
Web頁面技術(shù)的現(xiàn)實(shí)復(fù)雜性, 造成大量的頁面元素很難定位。 經(jīng)常有人不知道怎么定位。
定位方法大全
使用WebDriver對(duì)象的findElement函數(shù)定義一個(gè)Web頁面元素
使用findElements函數(shù)可以定位頁面的多個(gè)元素
定位的頁面元素需要使用WebElement對(duì)象來存儲(chǔ),以便后續(xù)使用
常用的定位頁面元素方法如下, 按推薦排序
定位方法 |
Java語言實(shí)現(xiàn)實(shí)例 |
id 定位 |
driver.findElement(By.id(“id的值”)); |
name定位 |
driver.findElement(By.name(“name的值”)); |
鏈接的全部文字定位 |
driver.findElement(By.linkText(“鏈接的全部文字”)); |
鏈接的部分文字定位 |
driver.findElement(By.partialLinkText(“鏈接的部分文字”)); |
css 方式定位 |
driver.findElement(By.cssSelector(“css表達(dá)式”)); |
xpath 方式定位 |
driver.findElement(By.xpath(“xpath表達(dá)式”)); |
Class 名稱定位 |
driver.findElement(By.className(“class屬性”)); |
TagName 標(biāo)簽名稱定位 |
driver.findElement(By.tagName(“標(biāo)簽名稱”)); |
Jquery方式 |
Js.executeScript(“return jQuery.find(“jquery表達(dá)式”)”) |
如何定位
在使用selenium webdriver進(jìn)行元素定位時(shí),通常使用findElement或findElements方法結(jié)合By類返回元素句柄來定位元素
findElement() 方法返回一個(gè)元素, 如果沒有找到,會(huì)拋出一個(gè)異常 NoElementFindException()
findElements()方法返回多個(gè)元素, 如果沒有找到,會(huì)返回空數(shù)組, 不會(huì)拋出異常
如何選擇 定位方法
策略是, 選擇簡(jiǎn)單,穩(wěn)定的定位方法。
1. 當(dāng)頁面元素有id屬性的時(shí)候, 盡量使用id來定位。 沒有的話,再選擇其他定位方法
2. cssSelector 執(zhí)行速度快, 推薦使用
3. 定位超鏈接的時(shí)候,可以考慮linkText或partialLinkText: 但是要注意的是 , 文本經(jīng)常發(fā)生改變, 所以不推薦用
4. xpath 功能最強(qiáng)悍。 當(dāng)時(shí)執(zhí)行速度慢,因?yàn)樾枰檎艺麄€(gè)DOM, 所以盡量少用。 實(shí)在沒有辦法的時(shí)候,才使用xpath
通過ID查找元素: By.id()
通過頁面元素的ID來查找元素是最為推薦的方式, W3C標(biāo)準(zhǔn)推薦開發(fā)人員為每一個(gè)頁面元素都提供獨(dú)一無二的ID屬性
一旦元素被賦予了唯一的ID屬性., 我們做自動(dòng)化測(cè)試的時(shí)候,很容易定位到元素. 元素的ID被作為首選的識(shí)別屬性, 因?yàn)槭亲羁斓淖R(shí)別策略.
以百度主頁為例, 搜索框的HTML示例代碼如下, 它的ID為kw
<input type="text" autocomplete="off" maxlength="100" id="kw" name="wd" class="s_ipt">
"百度一下"搜索按鈕元素的HTML示例代碼如下, 它ID為su
<input type="submit" class="btn self-btn bg s_btn" id="su" value="百度一下">
在Selenium/WebDriver 中通過ID查找元素的Java示例代碼如下
WebDriver driver = new FirefoxDriver(); driver.get("http://www.baidu.com"); WebElement searchBox = driver.findElement(By.id("kw")); searchBox.sendKeys("小坦克 博客園"); WebElement searchButton = driver.findElement(By.id("su")); searchButton.submit(); driver.close();
通過Name查找元素:By.name()
以豆瓣網(wǎng)的主頁搜索框?yàn)槔? 其搜索框的HTML代碼如下, 它name是: q
<input type="text" autocomplete="off" name="q" placeholder="書籍、電影、音樂、小組、小站、成員" size="12" maxlength="60">
WebDriver中通過name查找豆瓣主頁上的搜索框的Java代碼如下:
WebDriver driver = new FirefoxDriver(); driver.get("http://www.douban.com"); WebElement searchBox = driver.findElement(By.name("q")); searchBox.sendKeys("小坦克"); searchBox.submit();
通過TagName查找元素: By.tagName()
通過tagName來搜索元素的時(shí)候,會(huì)返回多個(gè)元素. 因此需要使用findElements()
WebDriver driver = new FirefoxDriver(); driver.get("http://www.cnblogs.com"); List<WebElement> buttons = driver.findElements(By.tagName("div")); System.out.println("Button:" + buttons.size());
注意: 如果使用tagName, 要注意很多HTML元素的tagName是相同的,
比如單選框,復(fù)選框, 文本框,密碼框.這些元素標(biāo)簽都是input. 此時(shí)單靠tagName無法精確獲取我們想要的元素, 還需要結(jié)合type屬性,才能過濾出我們要的元素
WebDriver driver = new FirefoxDriver(); driver.get("http://www.cnblogs.com"); List<WebElement> buttons = driver.findElements(By.tagName("input")); for (WebElement webElement : buttons) { if (webElement.getAttribute("type").equals("text")) { System.out.println("input text is :" + webElement.getText()); } }
通過ClassName 查找元素 By.className
以淘寶網(wǎng)的主頁搜索為例, 其搜索框的HTML代碼如下: class="search-combobox-input"
<input autocomplete="off" autofocus="true" accesskey="s" aria-label="請(qǐng)輸入搜索文字" name="q" id="q" class="search-combobox-input" aria-haspopup="true" aria-combobox="list" role="combobox" x-webkit-grammar="builtin:translate" tabindex="0">
Java 示例代碼如下
WebDriver driver = new FirefoxDriver(); driver.get("http://www.taobao.com"); Thread.sleep(15000); WebElement searchBox = driver.findElement(By.className("search-combobox-input")); searchBox.sendKeys("羽絨服"); searchBox.submit();
注意:使用className 來進(jìn)行元素定位時(shí), 有時(shí)會(huì)碰到一個(gè)
通過LinkText查找元素 By.linkText();
直接通過超鏈接上的文字信息來定位元素:例如
<a name="tj_login" class="lb" onclick="return false;">登錄</a>
HTML代碼如下
WebDriver driver = new FirefoxDriver(); driver.get("http://www.baidu.com"); WebElement loginLink = driver.findElement(By.linkText("登錄")); loginLink.click();
通過PartialLinkText 查找元素 By.partialLinkText()
此方法是上一個(gè)方法的加強(qiáng)版, 單你只想用一些關(guān)鍵字匹配的時(shí)候,可以使用這個(gè)方法,通過部分超鏈接文字來定位元素
HTML 代碼如下
WebDriver driver = new FirefoxDriver(); driver.get("http://www.baidu.com"); WebElement loginLink = driver.findElement(By.partialLinkText("登")); loginLink.click();
注意:用這種方法定位時(shí), 可能會(huì)引起的問題是, 當(dāng)你的頁面中不知一個(gè)超鏈接包含“等”時(shí), findElement方法只會(huì)返回第一個(gè)查找到的元素,而不會(huì)返回所有符合條件的元素
如果你想要獲得所有符合條件的元素,還是只能用findElements方法。
以上就是java selenium元素定位 的資料整理,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料,謝謝大家的支持!
相關(guān)文章
Eclipse可視化插件WindowBuilder的安裝方法
這篇文章主要介紹了Eclipse可視化插件WindowBuilder的安裝方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Spring Boot Maven 打包可執(zhí)行Jar文件的實(shí)現(xiàn)方法
這篇文章主要介紹了Spring Boot Maven 打包可執(zhí)行Jar文件的實(shí)現(xiàn)方法,需要的朋友可以參考下2018-02-02Spring session實(shí)現(xiàn)共享單點(diǎn)登錄案例過程解析
這篇文章主要介紹了Spring session實(shí)現(xiàn)共享單點(diǎn)登錄案例過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07SpringBoot程序預(yù)裝載數(shù)據(jù)的實(shí)現(xiàn)方法及實(shí)踐
在項(xiàng)目實(shí)際的開發(fā)過程中,有時(shí)候會(huì)遇到需要在應(yīng)用程序啟動(dòng)完畢對(duì)外提供服務(wù)之前預(yù)先將部分?jǐn)?shù)據(jù)裝載到緩存的需求。本文就總結(jié)了常見的數(shù)據(jù)預(yù)裝載方式及其實(shí)踐,感興趣的朋友一起看看吧2022-04-04Springboot+Vue+shiro實(shí)現(xiàn)前后端分離、權(quán)限控制的示例代碼
這篇文章主要介紹了Springboot+Vue+shiro實(shí)現(xiàn)前后端分離、權(quán)限控制的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Mybatis插件+注解實(shí)現(xiàn)數(shù)據(jù)脫敏方式
這篇文章主要介紹了Mybatis插件+注解實(shí)現(xiàn)數(shù)據(jù)脫敏方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09POI讀取excel簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了POI讀取excel簡(jiǎn)介,詳細(xì)的介紹了什么是Apache POI和組件,有興趣的可以了解了解一下2017-08-08Idea開發(fā)工具之SpringBoot整合JSP的過程
最近在學(xué)習(xí)SpringBoot,看到SpringBoot整合jsp,順帶記錄一下。本文通過圖文實(shí)例相結(jié)合給大家講解SpringBoot整合JSP的過程,感興趣的朋友一起看看吧2021-09-09