關於面試總結10-selenium中隱藏元素如何定位?(hidden、display: none)


前言

面試題:selenium中隱藏元素如何定位?這個是很多面試官喜歡問的一個題,如果單純的定位的話,隱藏元素和普通不隱藏元素定位沒啥區別,用正常定位方法就行了
但是吧~~~很多面試官自己都搞不清楚啥叫定位,啥叫操作元素(如click,clear,send_keys)

隱藏元素

如下圖有個輸入框和一個登錄的按鈕,本來是顯示的

元素的屬性隱藏和顯示,主要是 type="hidden"style="display: none;"屬性來控制的,接下來在元素屬性里面讓它隱藏

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p>這里有個按鈕,是隱藏的 <!-- type="hidden" --> <br> 輸入賬號<input id="yoyo" name="hello" type="hidden"> <!-- type="display: none;" --> <br> <button id="yy" name="heo" style="display: none;">登錄</button> <br> <a hidden id="baidu" href="https://www.baidu.com">訪問百度</a> </p> </body> </html>

這樣元素就不會顯示了,也就是面試官所說的隱藏屬性了

定位隱藏元素

前面說了,定位隱藏元素和普通的元素沒啥區別,接下來就來驗證下,是不是能定位到呢?

from selenium import webdriver driver = webdriver.Firefox() driver.get("http://localhost:63342/test1122/a/b.html") # 定位type="hidden"隱藏元素 ele1 = driver.find_element_by_id("yoyo") print("打印元素信息:%s" % ele1) # 獲取元素屬性 print(ele1.get_attribute("name")) # 判斷元素是否隱藏 print(ele1.is_displayed())

運行結果:

打印元素信息:<selenium.webdriver.remote.webelement.WebElement (session="1debdd46-21b1-451e-b8a7-5aeff1d74f9d", element="{28628a87-7f22-4574-9e14-931f9c6f20e1}")> hello False

運行結果可以看出,隱藏元素用普通定位方法,事實上是定位到了呢!

操作隱藏元素

隱藏元素可以正常定位到,只是不能操作(定位元素和操作元素是兩碼事,很多初學者傻傻分不清楚),操作元素是click,clear,send_keys這些方法

# 隱藏輸入框元素輸入文本 ele1 = driver.find_element_by_id("yoyo") ele1.send_keys("yoyo")

隱藏元素用send_keys()方法會拋異常'ElementNotVisibleException': Message: Element is not currently visible and so may not be interacted with
這個報錯是說元素不可見,不可以被操作,同樣的對“登錄”按鈕點擊操作也是會報'ElementNotVisibleException'

# 點擊隱藏登錄框 ele2 = driver.find_element_by_id("yy") ele2.click()

JS操作隱藏元素

如果面試官想問的是定位后操作隱藏元素的話,本質上說這個問題就是毫無意義的,web自動化的目的是模擬人的正常行為去操作。
如果一個元素頁面上都看不到了,你人工也是無法操作的是不是?人工都不能操作,那你自動化的意義又在哪呢?所以這個只是為了單純的考察面試者處理問題的能力,沒啥實用性!(面試造飛機,進去擰螺絲)
既然面試官這么問了,那就想辦法回答上給個好印象吧!
首先selenium是無法操作隱藏元素的(但是能正常定位到),本身這個框架就是設計如此,如果非要去操作隱藏元素,那就用js的方法去操作,selenium提供了一個入口可以執行js腳本。
js和selenium不同,只有頁面上有的元素(在dom里面的),都能正常的操作,接下來用js試試吧!

<a hidden id="baidu" href="https://www.baidu.com">訪問百度</a> 這個鏈接是隱藏的,但是能用js點到

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://localhost:63342/test1122/a/b.html") # js點擊hidden元素 js = 'document.getElementById("baidu").click()' driver.execute_script(js) 

運行完之后,會發現頁面正常的點擊,跳轉到百度頁面了

備注:百度搜到的可能方法是先用js去掉hidden屬性,再用selenium操作,這個有點多此一舉,你既然都已經會用js了,何必不一次性到位直接click呢?

 


免責聲明!

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



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