web自動化測試之8大元素定位方法


# -*- coding:utf-8 -*-
# @Time : 2019/11/18 20:00
# @Author : panpanda
# @File : 查找元素.py

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")

"""
頁面元素的8大定位方式:
第1類、靠元素的單一屬性查找:6種定位方法(id,)
第2類、組合屬性來定位元素:2種定位方法(xpath,css選擇器)

⚠️:所有查找元素方法均會返回WebElement對象,可以通過操作WebElement對象來操作html元素
"""

# 一:id -- 身份證,具有唯一性
# 注意id為動態變化的情況(可以多訪問幾次觀察一下id是否可變) Ps:下方兩種寫法是等價的
element = driver.find_element_by_id("kw")
element2 = driver.find_element("id", "kw")
# element2.get_attribute("")
# driver.back()
# driver.refresh()

# 元素可用(is_enabled):主要針對 按鈕 和 輸入框
# 按鈕:天生就是可點擊的,如果不可點擊(disabled屬性),則表示按鈕不可用
# 輸入框:天生就是讓用戶輸入文本信息的,如果不可輸入(readonly屬性),則表示輸入框不可用

# 元素可選:主要針對 復選框checkbox 和 單選radio

# 輸入操作:send_keys
# 點擊操作:click

# 元素是否可見:is_display,元素在頁面中是否可見分為三種"元素存在、元素可見、元素可用"狀態
# 元素存在find < 元素可見display < 元素可用enable (元素只有存在了,才能可見,元素只有可見了,才能可用)

# 二:tag_name -- 標簽名
driver.find_element_by_tag_name("input") # 返回第一個匹配到的元素
driver.find_elements_by_tag_name("input") # 返回所有匹配到的元素列表,列表中都是WebElement對象

# driver.find_element("tag_name", "input")
# driver.find_elements("tag_name", "input")

# 三、四:name、class -- 元素的name屬性、class屬性
driver.find_element_by_name("")
driver.find_elements_by_name("")

driver.find_element_by_class_name("") # class可以有多個屬性,但此處只能填寫一種class屬性
driver.find_elements_by_class_name("")

# 五、六:link_text/partial_link_text -- 針對文本鏈接元素
driver.find_element_by_link_text("link_text") # 精准匹配
driver.find_element_by_partial_link_text("partial_link_text") # 模糊匹配

# driver.find_elements_by_link_text("link_text")
# driver.find_elements_by_partial_link_text("partial_link_text")

# 七:xpath -- 萬能定位
# 絕對定位:/開頭,嚴格按照DOM樹級路徑、同級的位置。--- 很不穩定
# 相對定位:不關注位置、路徑,以當前html頁面為參照物。 //開頭
"""
/與//的區別:/后必須是父子關系;//后包括但不限於父子關系,只要是后代元素都可以
"""

# 相對定位基本用法://標簽名[@屬性名稱=屬性值] 如://input[@name="name"] --- 元素單一屬性時
# 邏輯運算://標簽名[@屬性名稱=屬性值 and/or @屬性名稱=屬性值] 如://input[@name="name" and @type="text"] --- 元素有多屬性時
# 層級定位://標簽名[@屬性名稱=屬性值]//標簽名[@屬性名稱=屬性值]...
# 部分匹配定位://標簽名[contains(@屬性名稱/text(),"要包含的屬性值/文本值")]
# 元素文本定位(全匹配)://標簽名[text()="文本值"]
# 軸定位:(實質上是通過目標元素的家族關系元素來查找到唯一目標元素,能用以上方法定位到的元素就沒必要用軸定位來定位元素)
"""
軸運算:
1、ancestor:祖先節點,直系
2、parent:父節點
3、preceding:當前元素節點標簽之前的所有節點(html頁面先后順序)
4、preceding-sibling:當前元素節點標簽之前的所有兄弟節點(直系)
5、following:當前元素節點標簽之后的所有節點(html頁面先后順序)
6、following-sibling:當前元素節點標簽之后的所有兄弟節點(直系)

使用語法:已知的元素/軸名稱::標簽名稱[@屬性名稱=屬性值]
如://dd[@data-val="潘潘達"]/following-sibling::dd[contains(@class,"batscore")]
"""


免責聲明!

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



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