Selenium Web Driver自動(dòng)化測(cè)試(java版)系列下半部分(10) - xpath定位器(2)

這篇文章繼續(xù)介紹selenium web driver中的xpath定位器。上次介紹了絕對(duì)路徑和相對(duì)路徑的異同,以及怎樣使用屬性和一些關(guān)鍵字來定位html文檔的節(jié)點(diǎn)檬果,功能已經(jīng)比較強(qiáng)大了浮驳。但如果還無法完成定位,那還可以用xpath的軸(axes)定位方法宣旱。軸定位有以下幾種方法:

  1. child
  2. descendant
  3. parent
  4. ancestor
  5. following
  6. preceding
  7. following-sibling
  8. preceding-sibling
  9. self

第一種,child叛薯,查找的是當(dāng)前節(jié)點(diǎn)下面第一層的某個(gè)指定節(jié)點(diǎn)浑吟。格式是

比如下面的例子:

這個(gè)xpath找的是form下面第一個(gè)p標(biāo)簽下的label標(biāo)簽笙纤。再看一個(gè)多選的:

第二個(gè)class="row"的div下面第一層總共有三個(gè)的div。注意组力,某個(gè)節(jié)點(diǎn)下面第一層又叫做該節(jié)點(diǎn)的子節(jié)點(diǎn)省容。child嘛,孩子燎字,其實(shí)你可以把它理解成找該節(jié)點(diǎn)的兒子或是女兒腥椒。

第二種,descendent候衍,查找的是當(dāng)前節(jié)點(diǎn)下面所有層的某個(gè)指定節(jié)點(diǎn)笼蛛。格式是

descendent與child不同,它是以當(dāng)前節(jié)點(diǎn)為參照找下面所有的匹配節(jié)點(diǎn)蛉鹿,不局限在第一層滨砍。比如還是剛才的例子。我把child換成descendant:

你看妖异,第二個(gè)class="row"的div下面所有的div都被高亮顯示了惋戏。descendant是子孫的意思,指明了不光包含兒子和女兒他膳,而是所有的子孫節(jié)點(diǎn)日川。

第三種,parent矩乐,查找的是當(dāng)前節(jié)點(diǎn)上面一層的節(jié)點(diǎn)龄句,也就是它的父節(jié)點(diǎn)。xpath一般是向下查詢的散罕,但軸定位允許其向上查詢分歇。查看其父節(jié)點(diǎn)的格式是:

用兩個(gè)點(diǎn)代表父節(jié)點(diǎn),這點(diǎn)和系統(tǒng)目錄查找很像欧漱。比如下面的例子:

通配符星號(hào)代表所有節(jié)點(diǎn)职抡。我的xpath會(huì)先找到name="password"的所有節(jié)點(diǎn),顯然误甚,只有一個(gè)input標(biāo)簽滿足這個(gè)條件缚甩。然后以這個(gè)input標(biāo)簽為參照查看它的父節(jié)點(diǎn),這樣又鎖定了p標(biāo)簽窑邦。最后再查找p標(biāo)簽下面第一層的label擅威。

當(dāng)然,和不停地往下查找子節(jié)點(diǎn)一樣冈钦,xpath也允許連續(xù)向上查找父節(jié)點(diǎn):

第四種郊丛,ancestor,查找的是當(dāng)前節(jié)點(diǎn)的所有祖先中的某個(gè)指定節(jié)點(diǎn)。格式是

parent指的是當(dāng)前節(jié)點(diǎn)上面一層的節(jié)點(diǎn)厉熟,而ancestor指的就是當(dāng)前節(jié)點(diǎn)上面所有層的節(jié)點(diǎn)导盅,所以叫祖先。比如:

name="password"的input標(biāo)簽有很多祖先揍瑟,但我只選出標(biāo)簽是div的白翻。

第五種,following-sibling绢片,查找的是與當(dāng)前節(jié)點(diǎn)同一層的某個(gè)指定節(jié)點(diǎn)滤馍,但出現(xiàn)位置在當(dāng)前節(jié)點(diǎn)之后。格式是:

sibling是兄弟姐妹的意思杉畜,following是跟隨、后面的意思衷恭,這里代表要查找的節(jié)點(diǎn)與當(dāng)前節(jié)點(diǎn)出現(xiàn)在同一層此叠,但出現(xiàn)在當(dāng)前節(jié)點(diǎn)之后。比如:

我先鎖定的是id=form1的form標(biāo)簽随珠,然后找到它下面唯一的div標(biāo)簽灭袁,最后定位出現(xiàn)在div后面的所有同層的p標(biāo)簽節(jié)點(diǎn)。

第六種窗看,preceding-sibling茸歧,查找的是與當(dāng)前節(jié)點(diǎn)同一層的某個(gè)指定節(jié)點(diǎn),但出現(xiàn)位置在當(dāng)前節(jié)點(diǎn)之前显沈。格式是:

與following-sibling正好相反软瞎,preceding-sibling指的是出現(xiàn)在當(dāng)前節(jié)點(diǎn)之前的同層節(jié)點(diǎn)。比如:

我先鎖定的是id=form1的form標(biāo)簽拉讯,然后找到它下面唯一的div標(biāo)簽涤浇,最后定位出現(xiàn)在div前面的所有同層的p標(biāo)簽節(jié)點(diǎn)。

第七種魔慷,following只锭,查找的是所有出現(xiàn)在當(dāng)前節(jié)點(diǎn)后面的某個(gè)指定節(jié)點(diǎn),但不包括子孫節(jié)點(diǎn)院尔。格式是:

這次沒有sibling了蜻展,看似簡(jiǎn)單了,但要注意邀摆,雖然是找當(dāng)前節(jié)點(diǎn)后面的纵顾,但following是不包含子孫節(jié)點(diǎn)的。比如:

先定位屬性class等于col-md-6的div標(biāo)簽栋盹,再找出現(xiàn)在它后面的div節(jié)點(diǎn)片挂。你看,只有一個(gè)標(biāo)簽高亮顯示,其它的因?yàn)槎际钱?dāng)前節(jié)點(diǎn)的子孫而被忽略音念。

第八種沪饺,preceding,查找的是所有出現(xiàn)在當(dāng)前節(jié)點(diǎn)前面的某個(gè)指定節(jié)點(diǎn)闷愤,但不包括祖先節(jié)點(diǎn)整葡。格式是:

這也好理解了,和following相反讥脐,只要出現(xiàn)在當(dāng)前節(jié)點(diǎn)前面遭居,而且不是它的祖先就行。比如:

先定位屬性class包含login字段的div標(biāo)簽旬渠,再找出現(xiàn)在它前面的所有div節(jié)點(diǎn)俱萍。過濾掉的都是當(dāng)前節(jié)點(diǎn)的祖先。

第九種告丢,self枪蘑,查找的是當(dāng)前節(jié)點(diǎn)自己。格式是:

找的是當(dāng)前節(jié)點(diǎn)自己岖免,聽起來有點(diǎn)扯岳颇,但self確實(shí)屬于軸定位的關(guān)鍵字之一。比如:

選擇id="pwd_alert"的label節(jié)點(diǎn)颅湘,然后再查它自己话侧。好吧各拷,我承認(rèn)確實(shí)很扯其骄。

以上9種xpath軸定位探橱,除了self和parent坷檩,其它選出來的很可能是多個(gè)指定節(jié)點(diǎn)跟啤,但大多數(shù)時(shí)間我們只需要一個(gè)就夠了颂郎。同樣吕粗,我們可以使用索引互婿。比如用following-sibling選某一個(gè)p標(biāo)簽:

我找的是form標(biāo)簽下面div后面的第三個(gè)p標(biāo)簽释移“扰或是用child選某一個(gè)div:

你也可以再練練following和descendant,都是一個(gè)原理玩讳。child涩蜘,descendant,following熏纯,following-sibling這四者有個(gè)共同的特點(diǎn):索引值是從上往下數(shù)的同诫,越往下數(shù)值越大。

但是你如果試試ancestor/preceding/preceding-sibling樟澜,就會(huì)發(fā)現(xiàn)不一樣误窖。比如用ancestor選某一個(gè)div:

明明選的是第6個(gè)div叮盘,可在最上面。同理霹俺,preceding也是一樣的:

所以柔吼,我們可以總結(jié)一下:索引值從上往下數(shù)(越往下數(shù)值越大)的是child,descendant丙唧,following愈魏,following-sibling;索引值從下往上數(shù)(越往上數(shù)值越大)的是ancestor想际,preceding培漏,preceding-sibling。

上述9種xpath軸定位方法胡本,再加上上一篇討論的基本用法牌柄,xpath基本上能涵蓋我們自動(dòng)化定位的所有情況了。那我現(xiàn)在就演示一下用xpath定位元素侧甫,它的格式是:

image

打開示例網(wǎng)頁珊佣,我們定位該頁面上的元素,然后打印出來闺骚。代碼如下:

xpath就介紹到這兒彩扔,大家多練習(xí)妆档。下篇文章我們討論css selector僻爽。本篇文章的源代碼是SeleniumXpath

本篇知識(shí)點(diǎn)及注意事項(xiàng):
1. 使用軸定位時(shí)贾惦,索引值從上往下數(shù)(越往下數(shù)值越大)的是child胸梆,descendant须板,following碰镜,following-sibling;索引值從下往上數(shù)(越往上數(shù)值越大)的是ancestor习瑰,preceding绪颖,preceding-sibling。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末甜奄,一起剝皮案震驚了整個(gè)濱河市柠横,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌课兄,老刑警劉巖牍氛,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異烟阐,居然都是意外死亡搬俊,警方通過查閱死者的電腦和手機(jī)紊扬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唉擂,“玉大人餐屎,你說我怎么就攤上這事⌒ǖ校” “怎么了啤挎?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)卵凑。 經(jīng)常有香客問我庆聘,道長(zhǎng),這世上最難降的妖魔是什么勺卢? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任伙判,我火速辦了婚禮,結(jié)果婚禮上黑忱,老公的妹妹穿的比我還像新娘宴抚。我一直安慰自己,他們只是感情好甫煞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布菇曲。 她就那樣靜靜地躺著,像睡著了一般抚吠。 火紅的嫁衣襯著肌膚如雪常潮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天楷力,我揣著相機(jī)與錄音喊式,去河邊找鬼。 笑死萧朝,一個(gè)胖子當(dāng)著我的面吹牛岔留,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播检柬,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼献联,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了何址?” 一聲冷哼從身側(cè)響起里逆,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎头朱,沒想到半個(gè)月后运悲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡项钮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年班眯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了希停。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡署隘,死狀恐怖宠能,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情磁餐,我是刑警寧澤违崇,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站诊霹,受9級(jí)特大地震影響羞延,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脾还,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一伴箩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鄙漏,春花似錦嗤谚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至桦踊,卻和暖如春椅野,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钞钙。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工鳄橘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留声离,地道東北人芒炼。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像术徊,于是被迫代替她去往敵國(guó)和親本刽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容