1. 程式人生 > 其它 >Python+selenium 【第二章】UI自動化元素識別

Python+selenium 【第二章】UI自動化元素識別

UI自動化元素識別

  • selenium常用api羅列

  1.瀏覽器中載入URL:driver.get('http://wwwbaidu.com')

  2.瀏覽器最大化:driver.maximize_window()

  3.瀏覽器最小化:driver.minimize_window()

  4.自定義瀏覽器視窗大小:driver.set_window_size(200,200)

  5.重新整理:driver.refresh()

  6.返回上一頁:driver.back()

  7.向前進一頁:driver.forward()

  8.截圖:driver.get_screenshot_as_file("c:\\test.bmp”)

  9.獲取當前頁的URL:driver.current_url

  10.獲取當前頁面的title:driver.title

  11.獲取頁面原始碼:driver.page_source

  12.關閉當前tab頁面:driver.close()

  13.退出當前driver:driver.quit()

  • 小試牛刀

demo_ui_02.py

# -*- coding: utf-8 -*-
# @Time : 2021/12/10 10:50
# @Author : Limusen
# @File : demo_ui_02

import os
import time
from selenium import
webdriver # 方法一 將驅動python的安裝路徑下 driver = webdriver.Chrome() driver.get("https://www.baidu.com") # 最小化 driver.minimize_window() time.sleep(1) # 最大化 driver.maximize_window() time.sleep(1) # 前進 driver.forward() # 後退 driver.back() # 重新整理 driver.refresh() # 截圖 driver.get_screenshot_as_file("file.png") time.sleep(
1) # 關閉瀏覽器 driver.quit()




元素識別

  元素的定位和操作是自動化測試的核心部分,其中操作又是建立在定位的基礎上的,舉例:一個物件就是一個人,我們可以通過身份證號、姓名或者他的住址找到這個人。那麼一個web物件也是一樣的,我們可以通過唯一區別於其它元素的屬性來定位這個元素。

  元素識別:

  1、利用Chrome瀏覽器開發者工具:

  1)開啟Chrome瀏覽器,按F12或依次點選選單—更多工具—開發者工具;

  2)切換到Elements頁籤,在Elements下點選左上方小箭頭可以指定頁面元素,檢視對應程式碼

  2、利用火狐瀏覽器開發者工具:

  1)開啟火狐瀏覽器,按F12或點選選單—web開發者—檢視器;

  2)進入到檢視器頁籤,在檢視器下點選左上方小箭頭可以指定頁面元素,檢視對應程式碼

  • 識別方法
1.通過id定位元素:    driver.find_element_by_id("id_vaule")

2.通過name定位元素: driver.find_element_by_name("name_vaule")
3.通過class_name定位元素:driver.find_element_by_class_name("class_name")
4.通過tag_name定位元素:driver.find_element_by_tag_name("tag_name_vaule")
5.通過link定位:driver.find_element_by_link_text("text_vaule")或:driver.find_element_by_partial_link_text("text_vaule")
6.通過xpath定位元素:driver.find_element_by_xpath("xpath_syntax")
7.通過css定位元素driver.find_element_by_css_selector(“css_syntax”)
  • 牛刀小試
# -*- coding: utf-8 -*-
# @Time : 2021/12/10 11:06
# @Author : Limusen
# @File : baidu_demo_01

"""

頁面元素均為百度

可自行查詢元素

"""

import os
import time
from selenium import webdriver

png_file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'sample', 'png_file', '{}')
# 方法一 將驅動python的安裝路徑下
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10)

# ===============通過id定位===============#
# # 從上面截圖可以發現,這個元素有一個id屬性,我們可以通過id去定位這個屬性值
# # 然後進行操作
# driver.find_element_by_id("kw").send_keys("今天你吃飯了沒")
# time.sleep(2)
# driver.find_element_by_id("su").click()
# time.sleep(2)
# driver.get_screenshot_as_file(png_file_path.format("baidu_id.png"))
# driver.quit()
# ===============通過id定位===============#

# ===============通過name-class定位===============#
# driver.find_element_by_name("wd").send_keys("今天你吃飯了沒")
# # 注意class一個屬性如果為空格 需要用.來進行拼接才能識別到
# driver.find_element_by_class_name("bg.s_btn").click()
# ===============通過name定位===============#


# ===============通過tag_name定位===============#

# 用的比較少

# ===============通過tag_name定位===============#


# ===============通過link_text定位===============#
# driver.find_element_by_link_text("hao123").click()
# driver.get_screenshot_as_file(png_file_path.format("baidu_demo_link_text.png"))
# ===============通過link_text定位===============#

# ===============通過xpath定位===============#
# driver.find_element_by_xpath('//span/input[@id="kw"]').send_keys("今天吃飯了嗎")
# driver.find_element_by_class_name("bg.s_btn").click()
# ===============通過xpath定位===============#

# ===============通過css定位===============#
driver.find_element_by_css_selector('#kw').send_keys("今天吃飯了嗎")
driver.find_element_by_class_name("bg.s_btn").click()
# ===============通過css定位===============#


Xpath

  後續主要用的是xpath我們現在講解一下xpath相關的知識

  • XPATH是什麼?
  1. XPATH是一門在XML文件中查詢資訊的語言,XPATH可用來在XML文件中對元素和屬性進行遍歷,主流的瀏覽器都支援XPATH,因為HTML頁面在DOM中表示為XHTML文件。
  2. SeleniumWebDriver支援使用XPATH表示式來定位元素。
  • Xpath常用六種定位方式:
  • 絕對路徑
通過絕對路徑定位絕對路徑的開頭是一個斜線(/),從網頁的根節點html開始,逐層去查詢需要定位的元素。
此方法缺點顯而易見,當頁面元素位置發生改變時,都需要修改,因此,並不推薦使用。
舉例:百度搜索框絕對路徑定位driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input')

備註:當同一層次有多個相同的元素時,使用下標區分,下標從1開始
  • 相對路徑
通過相對路徑定位相對路徑的開頭是兩個斜線(//),表示檔案中所有符合模式的元素都會被選出來,即使是處於樹中不同的層級也會被選出來。
舉例:百度搜索框相對路徑定位
driver.find_element_by_xpath('
//span[1]/input')
driver.find_element_by_xpath(’//form/span[1]/input
')

備註:以上都可以定位到百度搜索框,相對路徑的長度和開始位置並不受限制,可以採用從後往前逐層定位直到定位到即可的方式去定位。
  • 元素索引
通過元素索引定位遇到同層級相同標籤元素時,可以使用索引(下標)表示,索引的初始值為1
舉例:定位百度hao123連結driver.find_element_by_xpath('//div[3]/a[2]')
  • 元素屬性
使用元素屬性定位元素屬性定位要求屬效能夠定位到唯一一個元素,如果存在多個相同條件的標籤,預設定位第一個,
具體格式//標籤名[@屬性="屬性值"]
支援使用and和or關鍵字,多個屬性一起定位元素。
舉例: driver.find_element_by_xpath(
"//a[@name='tj_trnews']") driver.find_element_by_xpath("//a[@name='tj_trnews'and@class='mnav']") driver.find_element_by_xpath("//a[@name='tj_trnews’or@class='mnav']") 備註:Xpath支援萬用字元號*號,通過屬性定位還可以如下寫法: driver.find_element_by_xpath("//*[@*='tj_trnews']")
  • 部分屬性值匹配
使用部分屬性值匹配(也稱為模糊方法定位)屬性值如果太長或網頁中的元素屬性動態變化,可以使用此方法元素屬性值開頭包含內容:
starts-with()driver.find_element_by_xpath("//a[starts-with(@name,'tj_trhao')]")
元素屬性值結尾包含內容substring()
driver.find_element_by_xpath("//a[substring(@name,9)='123']")元素屬性值結尾包含內容:contains()
driver.find_element_by_xpath("//a[contains(@name,'hao')]")