如何使用Selenium集成的WebDriver對元素進行定位

Selenium是自動化測試工具,主要用于Web應用程序的自動化測試,當然缭黔,也支持所有基于web的管理任務自動化入问。

logo

Selenium 的特點:
? 開源丹锹,免費
? 多瀏覽器支持:FireFox、Chrome芬失、IE楣黍、Opera
? 多平臺支持:linux 、windows棱烂、MAC
? 多語言支持:java租漂、Python、Ruby颊糜、php哩治、C#、JavaScript
? 對 web 頁面有良好的支持
? 簡單(API 簡單)衬鱼、靈活(用開發(fā)語言驅(qū)動)
? 支持分布式測試用例執(zhí)行

這里使用的是selenium2.0业筏,和selenium1.0的區(qū)別是集成了WebDriver

和書中一樣使用python腳本語言進行操作

安裝selenium

pip install Selenium

WebDriver API

  • 元素定位:

    • 八種元素定位方法:

      ? id
      ? name
      ? class name
      ? tag name
      ? link text
      ? partial link text
      ? xpath
      ? css selector

    • 相對應的方法
      find_element_by_id()
      find_element_by_name()
      find_element_by_class_name()
      find_element_by_tag_name()
      find_element_by_link_text()
      find_element_by_partial_link_text()
      find_element_by_xpath()
      find_element_by_css_selector()

  • 方法功能簡單直觀,這里介紹一下xpath:

XPath 是一種在 XML 文檔中定位元素的語言鸟赫。因為 HTML 可以看做 XML 的一種實現(xiàn)蒜胖,所以 selenium用戶可是使用這種強大語言在 web 應用中定位元素。

  • 絕對路徑定位:
    • XPath 有多種定位策略惯疙,最簡單和直觀的就是寫元素的絕對路徑翠勉。如果仍然把一個元素看做一個人的話,那么現(xiàn)在有一個人霉颠,他沒有任何屬性特征对碌,那么這個人一定會存在于某個地理位置,如:xx 省 xx 市xx 區(qū) xx 路 xx 號蒿偎。那么對于一個元素在一個頁面當中也會有這樣的一個絕對地址朽们。
      參考 baidu.html 前端工具所展示的代碼怀读,我們可以用下面的方式來找到百度輸入框和搜索按鈕。
find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input"
find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input")

find_element_by_xpath()方法用于 XPath 語言定位元素骑脱。XPath 的絕對路徑主要用標簽名的層級關系來定位元素的絕對路徑菜枷。最外層為 html 語言,body 文本內(nèi)叁丧,一級一級往下查找啤誊,如果一個層級下有多個相同的標簽名,那么就按上下順序確定是第幾個拥娄,div[2]表示第二個 div 標簽蚊锹。

  • 利用元素屬性定位:除了使用絕對路徑的以外,XPath 也可以使用使素的屬性值來定位稚瘾。同樣以百度輸入框和搜索按鈕為例了:
find_element_by_xpath("http://input[@id='kw']")
find_element_by_xpath("http://input[@id='su']")

//表示當前頁面某個目錄下牡昆,input 表示定位元素的標簽名,[@id='kw'] 表示這個元素的 id 屬性值等于kw摊欠。下面通過 name 和 class 屬性值來定位丢烘。

find_element_by_xpath("http://input[@class='s_ipt']")
find_element_by_xpath("http://*[@class='bg s_btn']")

如果不想指定標簽名也可以用星號(*)代替。當然些椒,使用 XPath 不僅僅只局限在 id播瞳、name 和 class 這三個屬性值,元素的任意屬性值都可以使用摊沉,只要它能唯一的標識一個元素狐史。

find_element_by_xpath("http://input[@maxlength='100']")
find_element_by_xpath("http://input[@autocomplete='off']")
find_element_by_xpath("http://input[@type='submit']")

層級與屬性結合:如果一個元素本身并沒有可以唯一標識這個元素的屬性值,我們可以找其上一級元素说墨,如果它的上級有可以唯一標識屬性的值骏全,也可以拿來使用。參考 baidu.html 文本
假如百度輸入框本身沒有可利用的屬性值尼斧,我們可以查找它的上一級屬性姜贡。比如,“小明”剛出生的時候沒有名字棺棵,沒上戶口(沒身份證號)楼咳,那么親朋好友來找“小明”可以先到小明的爸爸,因為他爸爸是有很多屬性特征的烛恤,找到了小明的爸爸母怜,抱在懷里的一定就是小明了。通過 XPath 描述如下:

find_element_by_xpath("http://span[@class='bg s_ipt_wr']/input")
find_element_by_xpath("http://span[@class='bg s_btn_wr']/input")

span[@class='bg s_ipt_wr'] 通過 class 屬性定位到是父元素缚柏,后面/input 也就表示父元素下面標簽名為input 的子元素苹熏。如果父元素沒有可利用的屬性值,那么可以繼續(xù)向上查找“爺爺”元素。

find_element_by_xpath("http://form[@id='form']/span/input")find_element_by_xpath("http://form[@id='form']/span[2]/input")

我們可以通過這種方法一級一級的向上打找轨域,直到找到最外層的<html>標簽袱耽,那么就是一個絕對路徑的寫法了。

  • 使用邏輯運算符如果一個屬性不能唯一的區(qū)分一個元素干发,我們還可以使用邏輯運算符連接多個屬性來區(qū)別于其它屬性朱巨。
find_element_by_xpath("http://input[@id='kw' and @class='su']/span/input")

通過 這些方法,就能夠?qū)撁嫔系脑匾灰贿M行定位了

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枉长,一起剝皮案震驚了整個濱河市冀续,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌必峰,老刑警劉巖沥阳,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異自点,居然都是意外死亡,警方通過查閱死者的電腦和手機脉让,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門桂敛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人溅潜,你說我怎么就攤上這事术唬。” “怎么了滚澜?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵粗仓,是天一觀的道長。 經(jīng)常有香客問我设捐,道長借浊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任萝招,我火速辦了婚禮蚂斤,結果婚禮上,老公的妹妹穿的比我還像新娘槐沼。我一直安慰自己曙蒸,他們只是感情好,可當我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布岗钩。 她就那樣靜靜地躺著纽窟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪兼吓。 梳的紋絲不亂的頭發(fā)上臂港,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天,我揣著相機與錄音,去河邊找鬼趋艘。 笑死疲恢,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的瓷胧。 我是一名探鬼主播显拳,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼搓萧!你這毒婦竟也來了杂数?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤瘸洛,失蹤者是張志新(化名)和其女友劉穎揍移,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體反肋,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡那伐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了石蔗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罕邀。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖养距,靈堂內(nèi)的尸體忽然破棺而出诉探,到底是詐尸還是另有隱情,我是刑警寧澤棍厌,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布肾胯,位于F島的核電站,受9級特大地震影響耘纱,放射性物質(zhì)發(fā)生泄漏敬肚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一揣炕、第九天 我趴在偏房一處隱蔽的房頂上張望帘皿。 院中可真熱鬧,春花似錦畸陡、人聲如沸鹰溜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽曹动。三九已至,卻和暖如春牲览,著一層夾襖步出監(jiān)牢的瞬間墓陈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贡必,地道東北人兔港。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像仔拟,于是被迫代替她去往敵國和親衫樊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,747評論 2 361

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