python selenium-webdriver 元素定位(三)


上兩篇的博文中介紹了python selenium的環境搭建和編寫的第一個自動化測試腳本,從第二篇的例子中看出來再做UI級別的自動化測試的時候,有一個至關重要的因素,那就是元素的定位,只有從頁面上找到這個元素,我們從能對這個元素進行操作,那么我們下來看看如何來定位元素。

selenium 提供了8中元素定位的方法(大家要學習元素的定位,首先可以學習下前端的基礎知識,這樣有利於我們學習自動化測試,大家可以看一下:http://www.runoob.com/)

  • find_element_by_id   
  • find_element_by_name
  • find_element_by_xpath
  • find_element_by_link_text
  • find_element_by_partial_link_text
  • find_element_by_tag_name
  • find_element_by_class_name
  • find_element_by_css_selector

下面我們詳細的介紹一下,每個方法的含義以及每個方法的使用。

1.find_element_by_id 根據標簽id定位

示例HTML代碼:

<html>
 <body>
   <input id="kw" name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
 </body>
<html>

網頁需要通過開發者工具,打開瀏覽器按F12獲取頁面元素,我們已經看到上述的頁面html代碼,我們現在要查找id="kw"的元素

driver.find_element_by_id('kw')  #通過id定位

2.find_element_by_name 根據標簽的name定位

driver.find_element_by_name('username')  #通過name定位

3.find_element_by_xpath 根據xpath定位

driver.find_element_by_xpath('//*[@id="kw"]')

這里要介紹一下如何獲取頁面元素的xpath路徑的方法,如果你是大神可以自己寫,如果跟作者一樣很嘍,可以通過開發者工具獲取,選擇元素右擊->Copy->Copy Xpath,可以直接拷貝到xpath路徑.

4.find_element_by_link_text和find_element_by_partial_link_text 通過文字鏈接來定位元素,他們兩個很相像,功能也很類似,但是他們一個是匹配全部,一個是匹配部分。

給我們之前的示例代碼增加一段,我們來看看如何定位

<html>
 <body>
   <input id="kw" name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
   <div id="u1">
   <a href="http://news.baidu.com" name="tj_trnews" class="mnav">新聞</a>
   <a href="http://www.hao123.com" name="tj_trhao123" class="mnav">hao123</a>
   <a href="http://map.baidu.com" name="tj_trmap" class="mnav">地圖</a>
   <a href="http://v.baidu.com" name="tj_trvideo" class="mnav">視頻</a>
   <a href="http://tieba.baidu.com" name="tj_trtieba" class="mnav">貼吧</a>
   <a href="http://xueshu.baidu.com" name="tj_trxueshu" class="mnav">學術</a>
 </body>
<html>

下面我們用兩種方法來定位一下《新聞》這個元素

通過來find_element_by_link_text定位

#-*- coding:utf-8 -*-
import time
from selenium import webdriver
driver  =  webdriver.Chrome()
driver.maximize_window()
driver.get("file:///C:/Users/hunk/Desktop/id.html")
driver.find_element_by_link_text('新聞').click()
time.sleep(3)
driver.quit()   #退出瀏覽器

定位效果:

通過來find_element_by_partial_link_text定位

5.find_element_by_tag_name根據標簽的名字定位,這種方法很不使用,因為一個頁面的中的標簽的名字重復度太早,定位起來太不容易。

driver.find_element_by_tag_name("input")

6.find_element_by_class_name通過class name 定位

<html>
 <body>
  <p class="content">Site content goes here.</p>
</body>
<html>
driver.find_element_by_class_name('content')  #通過class name 定位

7.find_element_by_css_selector 根據元素屬性來定位,這個方法在實際過程中比較實用,而且很簡單,下面我們先看一下語法,這里有一個比較關鍵點就是,在這個定位的方法是可以寫正則表達式來定位元素,然后在寫一個實例來定位,實例我們采用百度網站來定位,然后搜索selenium關鍵字。

<html>
 <body>
  <p class="content">Site content goes here.</p>
</body>
<html>

定位語法

driver.find_element_by_css_selector("p[class=\"content\"]")  #根據元素屬性

示例:

#-*- coding:utf-8 -*-
import time
from selenium import webdriver
driver  =  webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.baidu.com")
driver.find_element_by_css_selector("input[id=\"kw\"]").send_keys('selenium')  #定位輸入框輸入selenium
driver.find_element_by_css_selector("input[type=\"submit\"]").click() #定位搜索按鈕點擊按鈕,屬性選擇type
time.sleep(5)
driver.quit()   #退出瀏覽器

來看一下動畫效果吧

其實元素的定位很簡單,只是實際過程中定位的html頁面有一些特殊的地方,只要我們拆解分析,自然也難不倒我們。

下面這幾個方法返回的結果是列表,跟單個元素定位一樣,只是返回的結果不同,這里就不詳細介紹了。

  • find_elements_by_id
  • find_elements_by_name
  • find_elements_by_xpath
  • find_elements_by_link_text
  • find_elements_by_partial_link_text
  • find_elements_by_tag_name
  • find_elements_by_class_name
  • find_elements_by_css_selector


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM