天天看點

1.selenium元素八種定位方式示例

selenium是一套比較火的開源自動化測試架構

selenium中元素定位有八種方式:

  1. id定位:
  2. class定位
  3. Name定位
  4. Tagname定位
  5. xpath定位
  6. css定位
  7. linkText定位
  8. partial_link定位

以上每種方式都有find_element()方法與之對應,下面代碼中有示例

下面以代碼執行個體展示,python版本為3.4.3,請求網頁為新浪财經網

(1)前期導入子產品

#coding=utf-8

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait  # 等待頁面加載某些元素
from selenium.webdriver.support import expected_conditions as EC  # #該子產品包含一些判斷條件,比如用來判斷元素是否存在
from selenium.webdriver.common.by import By
from time import sleep
           

(2)定義url并擷取url内容

url = "http://finance.sina.com.cn/money/globalindex/" #新浪财經環球股指
browser = webdriver.Firefox()
browser.get(url)
           

(3)8種定位方式

1.id定位

print("id定位:擷取上證指數行情")
element = browser.find_element_by_id("hq_sh000001")
#element = browser.find_element("id", "hq_sh000001")
print(element.text)
           

結果為:

1.selenium元素八種定位方式示例

2.class定位

print("class定位:擷取意見回報")
element = browser.find_element_by_class_name("text_info")
#element = browser.find_element("class name", "text_info")
print(element.text)
           

結果為:

1.selenium元素八種定位方式示例

3.name定位

print("name定位:擷取description中屬性為content的值")
element = browser.find_element_by_name("description")
#element = browser.find_element("name", "description")
print(element.get_attribute("content"))
           

結果為:

1.selenium元素八種定位方式示例

4.tagname定位

print("tagname定位:擷取标簽input中屬性為name的值")
element = browser.find_element_by_tag_name("input")
#element = browser.find_element("tag name", "input")
print(element.get_attribute("name"))
           

結果為:

1.selenium元素八種定位方式示例

5.xpath定位

print("xpath定位:擷取英國富時100指數最新價")
sleep(2)   #等待一段時間,以防未加載完成,進而報錯
locator = (By.XPATH, "//*[@id="hq_b_UKX"]/ul/li[1]")
# WebDriverWait(driver, 逾時時長, 調用頻率, 忽略異常).until(可執行方法, 逾時時傳回的資訊)
#這裡逾時時長和sleep()等待時常不同,在逾時時間以内,隻要判斷資料已加載,便繼續進行下一步操作
element = WebDriverWait(browser, 5).until(EC.presence_of_element_located(locator))   # 顯式等待,等待的時間是固定的,這裡等待5s
#element = browser.find_element_by_xpath("/html/body/div[5]/div[5]/div[1]/div[1]/dl/dd[2]/div/ul/li[1]")
#element = browser.find_element("xpath", "/html/body/div[5]/div[5]/div[1]/div[1]/dl/dd[2]/div/ul/li[1]")
print(element.text)
           

結果為:

1.selenium元素八種定位方式示例

6.css定位

print("css定位:擷取英國富時100指數最新價")
element = browser.find_element_by_css_selector("#hq_b_UKX > ul:nth-child(1) > li:nth-child(1)")
#element = browser.find_element("css selector", "#hq_b_UKX > ul:nth-child(1) > li:nth-child(1)")
print(element.text)
           

結果為:

1.selenium元素八種定位方式示例

7.linkText定位

print("linkText定位:點選打開新浪首頁")
element = browser.find_element_by_link_text("新浪首頁")
#element = browser.find_element("link text", "新浪首頁")
element.click()   #會點選進入新浪首頁
           

8.partial_link定位:同上,隻不過隻需要局部比對

print("partial_link定位:點選打開新浪首頁")
element = browser.find_element_by_partial_link_text("新浪首")
#element = browser.find_element("partial link text", "新浪首")
element.click()  #會點選進入新浪首頁
           

(4)關閉并退出浏覽器

browser.close()
browser.quit()
           

總結:

1. 當頁面元素有id屬性時,最好盡量用id來定位。但由于現實項目中很多程式員其實寫的代碼并不規範,會缺少很多标準屬性,這時就隻有選擇其他定位方法。

2. xpath很強悍,但定位性能不是很好,是以還是盡量少用。如果确實少數元素不好定位,可以選擇xpath或cssSelector。

3. 當要定位一組元素相同元素時,可以考慮用tagName或name。

4. 當有連結需要定位時,可以考慮linkText或partialLinkText方式。