一、背景
作為當(dāng)下最流行的web UI自動化測試工具,selenium是很多測試同學(xué)入門接觸自動化測試時(shí)學(xué)習(xí)的第一個(gè)工具。想要自動化操作頁面上的內(nèi)容,元素定位是首先必須要學(xué)習(xí)的核心知識。
因此本文主要介紹selenium的幾種最常用的元素定位方法,掌握了這些方法,希望能幫助大家快速輕松定位到頁面上的各類元素。。
二、瀏覽器定位元素
首先我們以最常見的百度首頁為例,假設(shè)我們的操作是想要往搜索框內(nèi)輸入關(guān)鍵字,看看如何定位到搜索框。
先打開百度首頁,然后F12調(diào)出瀏覽器調(diào)試臺,然后如圖中所示定位到搜索框:
注意觀察HTML元素的各個(gè)字段,接下來主要就依靠這些字段來定位到元素:
1. tagName:input
2. type:text
3. class:s_ipt
4. name: wd
5. id: kw
6. maxlength: 100
7. autocomplete: off
頁面上的超鏈接元素定位:
三、Selenium元素定位代碼
3.1 通過id定位
ele = driver.find_element_by_id("kw")
3.2 通過class定位
ele = driver.find_element_by_class_name("s_ipt")
3.3 通過name定位
ele = driver.find_element_by_name("name")
3.4 通過tagname定位
ele = driver.find_element_by_tag_name("input")
一個(gè)頁面中所有的文本框的tagname都是input,太不唯一,所以一般不會用
3.5 通過link_text定位
ele = driver.find_element_by_link_text("新聞")
只能是超鏈接標(biāo)簽的文本才能查,精準(zhǔn)匹配
3.6 通過partial_link_text定位
ele = driver.find_element_by_partial_link_text("新")
只能是超鏈接標(biāo)簽的文本才能查,模糊匹配
3.7 通過css選擇器定位
1、單一屬性定位:
1. 通過id屬性定位(#號表示通過id屬性定位):
driver.find_element_by_css_selector('#kw')
2. 通過class屬性定位(.表示通過class屬性定位):
driver.find_element_by_css_selector('.s_ipt')
3. 通過其他屬性定位([]表示通過其他屬性定位):
driver.find_element_by_css_selector("[name='wd']")
driver.find_element_by_css_selector("[type='text']")
2、組合屬性定位:
1. id組合屬性定位
driver.find_element_by_css_selector("input#kw")
2. class組合屬性定位
driver.find_element_by_css_selector("input.s_ipt")
3. 其他屬性組合定位
driver.find_element_by_css_selector("input[name='wd']")
4. 兩個(gè)其他屬性組合定位
driver.find_element_by_css_selector("[name='wd'][autocomplete='off']")
3、通過層級定位:
#id是form的form下面的span下面的input
driver.find_element_by_css_selector('form#form>span>input')
4、模糊匹配屬性值定位:
1. 匹配屬性值以xx字符串開頭的方法:
driver.find_element_by_css_selector("input[class^='s']")
2. 匹配屬性值以xx字符串結(jié)尾的方法:
driver.find_element_by_css_selector("input[class$='ipt']")
3.8 通過xpath表達(dá)式查找
表達(dá)式 | 描述 |
---|---|
/ | 絕對路徑,從根節(jié)點(diǎn)選取。嚴(yán)格按照路徑、同級元素的位置來定位,缺點(diǎn):頁面一動,基本崩潰 |
// | 相對路徑,根據(jù)表達(dá)式匹配頁面中有還是沒有符合表達(dá)式的元素,缺點(diǎn):可能有多個(gè)符合的元素 |
. | 選取當(dāng)前節(jié)點(diǎn) |
… | 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn) |
@ | 選取屬性 |
[ ] | 表示進(jìn)一步的表達(dá)式 |
通配符 | 描述 |
---|---|
* | 匹配任何元素節(jié)點(diǎn) |
@* | 匹配任何屬性節(jié)點(diǎn) |
node() | 匹配任何類型的節(jié)點(diǎn)。 |
1、利用標(biāo)簽內(nèi)屬性進(jìn)行定位:
xpath = "http://標(biāo)簽名[@屬性='屬性值']"
查找span標(biāo)簽的下級標(biāo)簽為input的并且屬性id為kw的元素:
1. xpath = driver.find_element_by_xpath("http://input[@id= 'kw' ]")
屬性判斷條件:最常見為id,name,class等等,屬性的類別沒有特殊限制,只要能夠唯一標(biāo)識一個(gè)元素即可。當(dāng)某個(gè)屬性不足以唯一區(qū)別某一個(gè)元素時(shí),也可以采取多個(gè)條件組合的方式,如下:
1. xpath = "http://input[@type='text' and @name='wd']"
2、利用text()方法文本定位:
//a[text() = '新聞']
//a[text() = '新聞'][1] :表示使用找到的第一個(gè),索引從1開始,不是0
3、利用contains()方法定位,也叫模糊定位:
xpath = "http://標(biāo)簽名[contains(@屬性, '屬性值')]"
1. 例:文本包含“新”
xpath = //a[contains(text(),'新')]
2. class屬性包含kd的
xpath = //a[contains(@class,'kd')]
3. 通過下一級查找上一級:
xpath = //input[@id='kw']/.. :表示查找他的上一層
xpath = //input[@id='kw']/.. /.. :表示查找上兩層
4. 如果一個(gè)元素?zé)o法通過自身屬性直接定位到,則可以先定位它的父(或父的父)元素,然后再找下一級即可
xpath = //form[@id='form']/span[@class='bg s_ipt_wr new-pmd quickdelete-wrap']/input
四、總結(jié)
4.1 推薦的定位方式的優(yōu)先級
- 優(yōu)先級最高:ID
- 優(yōu)先級其次:name
- 優(yōu)先級再次:CSS selector
- 優(yōu)先級再次:Xpath
4.2 css選擇器和xpath的各自優(yōu)劣勢
- css是配合html來工作,它實(shí)現(xiàn)的原理是匹配對象的原理,而xpath是配合xml工作的,它實(shí)現(xiàn)的原理是遍歷的原理,所以兩者在設(shè)計(jì)上,css性能更優(yōu)秀(ps:css選擇器表達(dá)式在chrome、firefox解析速度快一些,xpath在ie瀏覽器解析速度快一些)
- 針對id或者name能夠直接定位到的元素,css選擇器表達(dá)式比xpath表達(dá)式更加簡潔
- css選擇器不支持文本搜索,但是xpath支持
- 當(dāng)查找的元素比較簡單時(shí),使用css,復(fù)雜時(shí)使用xpath
4.3 通過瀏覽器快捷獲取元素的css/xpath
瀏覽器也提供了快捷獲取xpath的方式,可以方便快捷的獲取到xpath,如下圖所示:
以上就是本次的全部內(nèi)容,如果對你有幫助,可以點(diǎn)個(gè)贊和收藏支持一下,你的支持就是作者更新最大的動力~
END配套學(xué)習(xí)資源分享
最后:?為了回饋鐵桿粉絲們,我給大家整理了完整的軟件測試視頻學(xué)習(xí)教程,朋友們?nèi)绻枰梢宰孕忻赓M(fèi)領(lǐng)取?【保證100%免費(fèi)】
軟件測試面試文檔
我們學(xué)習(xí)必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠最新的面試資料,并且有字節(jié)大佬給出了權(quán)威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
全套資料獲取方式:文章來源:http://www.zghlxwxcb.cn/news/detail-785881.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-785881.html
到了這里,關(guān)于Selenium元素定位方法大全的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!