python selenium系列(八)元素定位進階之分層定位

前言

在前面的Selenium系列文章中,已經介紹過元素定位的方法,也強調過元素定位對自動化操作的重要性。本節將介紹一種分層定位思想,該思想主要用於解決目標元素無法直接定位的場景。


現在想象這樣一個場景:朋友請你去KFC吃炸雞漢堡, KFC在城市的各個區都有的,所以你要先確定是哪個區哪個街道的KFC,根據位置屬性從大到小逐級查找,這是符合邏輯的查找思路。在這個場景裏,因目標屬性相同(KFC不僅名字相同,風格也是統一的),所以不能直接根據最直觀的名稱屬性查找(存在相同)。在Web UI的世界裏,也存在類似情況,目標元素很可能屬性是完全相同的,無法直接定位或者定位到的並不是目標元素。此時,可以利用現實世界的思維,先找目標元素的父級元素,再沿着確定的父級元素尋找下級的目標元素。


簡言之,分層定位的思想是:先定位父元素,然後再根據父元素遍歷其子元素,選擇需要的目標元素。

 

分層定位思想的應用場景

分層定位思想主要應用在如下場景:

1、 子級元素無法直接定位,需要先操作父級元素(如二級菜單是在一級菜單點擊後纔出現);

2、 同一級別的元素屬性相同,無法定位到唯一、確定的元素;

3、 定位某個元素下的所有子元素;

接下來,我們使用一個例子進行說明,重點是體會這種思想。

 

分層定位思想實戰

假如我們有如下待測頁面,其中菜單一菜單二有相同的二級子菜單,兩者的子菜單屬性完全一致,現在需要對菜單一下的二級菜單B進行操作,因兩個菜單都包含有相同屬性的二級菜單B,所以不能直接定位,另外,該二級菜單也需要在操作一級菜單後才能進行操作。所以,操作思路是先選中一級菜單,再選擇其目標二級菜單進行操作。

1.png

實例html頁面主要源碼如下:

2.png

 

Python代碼如下:

from  selenium import webdriver
from selenium.webdriver.common.by import By
import os

browser = webdriver.Chrome()
#演示用的html和腳本位於同一目錄,重點在分層定位思想的講解
file_path = 'file:///' + os.path.abspath('分層定位思想.html')
browser.get(file_path)

# #點擊菜單1打開下拉菜單
browser.find_element(By.LINK_TEXT,'菜單一').click()

#選擇菜單一下的二級菜單,且將鼠標移到目標菜單項
level_menu = browser.find_element(By.LINK_TEXT,'二級菜單B')
webdriver.ActionChains(browser).move_to_element(level_menu).perform()


四 其他資源

關於python學習、分享、交流,筆者開通了微信公衆號【小蟒社區】,感興趣的朋友可以關注下,歡迎加入,建立屬於我們自己的小圈子,一起學python。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章