<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
測試物件的定位和操作是我們利用 selenium 編寫自動化指令碼和 webdriver 的核心內容,其中 “操作” 這一部分又是建立在 “selenium” 元素定位的基礎之上的。所以對元素物件的定位就顯得越發的重要,接下來我們就學習一下常用的元素定位方法有哪些。
定位元素的目的一般有以下幾種,一種是要操作這個物件;還有就是可能要獲取物件的一些屬性,比如說需要得到物件的 name 屬性 、class 屬性 等等。這些都會用到元素的定位, webdriver 提供了比較常用的 8 種元素定位方式。
鑑於上述的定位方法一般情況下很少能夠在一個頁面上找齊,這裡準備了一個原生的 html 頁面,方便我們練習使用。
首先開啟我們的本地 html 檔案,通過檢視頁面的原始碼,可以看到 Email 輸入框是具備 id 屬性的,這裡就可以通過 定位 元素id 的方式定位該元素,見下圖:
元素 id定位範例程式碼如下:
# coding:utf-8 from time import sleep from selenium import webdriver driver = webdriver.Chrome() # 啟動 Chrome瀏覽器的 driver driver.maximize_window() # Chrome 瀏覽器最大化 driver.get('file:///Users/workspace/WEB_TEST_HTML/form.html') # 開啟原生的 "form.html" 檔案 sleep(2) driver.find_element_by_id("inputEmail").click() # 通過 id 定位 id="inputEmail"的元素,執行點選操作。 sleep(1) driver.quit()
執行結果如下:
從上圖中,我們可以看到通過 id 定位到了 Email 輸入框的元素,並執行了點選操作。
通過元素的 name 屬性定位 password 元素,然後執行點選操作,見下圖:
元素 name 屬性定位範例程式碼如下:
# coding:utf-8 from time import sleep from selenium import webdriver driver = webdriver.Chrome() # 啟動 Chrome瀏覽器的 driver driver.maximize_window() # Chrome 瀏覽器最大化 driver.get('file:///Users/workspace/WEB_TEST_HTML/form.html') # 開啟原生的 "form.html" 檔案 sleep(2) driver.find_element_by_id("inputEmail").click() # 通過 id 定位 id="inputEmail"的元素,執行點選操作。 sleep(2) driver.find_element_by_name("password").click() # 通過 name 定位 name="password",執行點選操作。 sleep(1) driver.quit()
執行結果如下:
從上圖中,我們可以看到通過 name 定位到了 Password 輸入框的元素,並執行了點選操作。
通過元素的 class name 屬性定位 Email 元素所在的 div,然後通過 js 的偵錯,讓該 div 出現閃爍的效果。如果正常閃爍,則說明我們定位成功了。見下圖:
元素 class name 屬性定位範例程式碼如下:
# coding:utf-8 from time import sleep from selenium import webdriver driver = webdriver.Chrome() # 啟動 Chrome瀏覽器的 driver driver.maximize_window() # Chrome 瀏覽器最大化 driver.get('file:///Users/workspace/WEB_TEST_HTML/form.html') # 開啟原生的 "form.html" 檔案 sleep(2) element = driver.find_element_by_class_name("controls") # 將定位到的 "class name" 為 "controls" 的元素賦值給 element driver.execute_script('$(arguments[0]).fadeOut().fadeIn()', element) # 通過 JS 執行的方式將 element 元素執行 消失、出現 sleep(1) driver.quit()
執行結果如下:
從上圖中,我們可以看到通過 class name 定位到了 Email 元素所在的 div 塊,出現了閃爍的效果,說明我們已經定位到了該 class name = “controls” 的 div 塊。
通過 a 標籤 的字元或者部分字元的匹配,定位到 register 元素。
這裡就不進行截圖演示了,直接上程式碼吧。
# coding:utf-8 from time import sleep from selenium import webdriver driver = webdriver.Chrome() # 啟動 Chrome瀏覽器的 driver driver.maximize_window() # Chrome 瀏覽器最大化 driver.get('file:///Users/workspace/WEB_TEST_HTML/form.html') # 開啟原生的 "form.html" 檔案 sleep(2) link = driver.find_element_by_link_text("register") driver.execute_script('$(arguments[0]).fadeOut().fadeIn()', link) sleep(1) partile_link = driver.find_element_by_partial_link_text("reg") driver.execute_script('$(arguments[0]).fadeOut().fadeIn()', partile_link) sleep(1) driver.quit()
一般情況下,不推薦視同這種方式,因為首先需要對 css 的語法有一定的理解,同時這種定位的方式呢,維護性較差。任何一個小的頁面變動都會影響到我們已經利用 css selector 定位好的元素。
獲取 css selector 方式,見下圖:
通過 css selector 定位元素程式碼如下:
# coding:utf-8 from time import sleep from selenium import webdriver driver = webdriver.Chrome() # 啟動 Chrome瀏覽器的 driver driver.maximize_window() # Chrome 瀏覽器最大化 driver.get('file:///Users/workspace/WEB_TEST_HTML/form.html') # 開啟原生的 "form.html" 檔案 sleep(2) div = driver.find_element_by_css_selector("body > form > div:nth-child(1) > div") # 這種css層級方式的維護性很差 driver.execute_script('$(arguments[0]).fadeOut().fadeIn()', div) sleep(2) driver.quit()
截圖就算了,一般不推薦使用。
通過 Xpath 定位元素,是最常用的方法之一,尤其是在前端頁面不規範、沒有 id、name等屬性的情況下。獲取 xpath 方式,見下圖:
利用 xpath 定位元程式碼範例如下:
# coding:utf-8 from time import sleep from selenium import webdriver driver = webdriver.Chrome() # 啟動 Chrome瀏覽器的 driver driver.maximize_window() # Chrome 瀏覽器最大化 driver.get('file:///Users/workspace/WEB_TEST_HTML/form.html') # 開啟原生的 "form.html" 檔案 sleep(2) email_xpath = driver.find_element_by_xpath('//*[@id="inputEmail"]') # xpath 定位 driver.execute_script('$(arguments[0]).fadeOut().fadeIn()', email_xpath) sleep(2) driver.quit()
執行結果如下:
從上圖中,我們可以看到通過 xpath 定位到了 Email 元素所,出現了閃爍的效果,說明我們已經定位到了該元素。
使用 "xpath" 定位,可以使用 "id"、"name" 等更多的方式或者特殊的屬性來定位到元素;建議通過基礎屬性定位的同時,使用 xpath 也依然顯得更友好一些,也更便捷。未來做一些框架的封裝的時候也會變得更簡單。
通過檢視頁面元素,我們發現頁面只有一個 form ,那麼這個時候就可以利用 tag_name 直接定位到這個 form 了。見下圖:
通過 tag name 定位元素程式碼範例如下:
# coding:utf-8 from time import sleep from selenium import webdriver driver = webdriver.Chrome() # 啟動 Chrome瀏覽器的 driver driver.maximize_window() # Chrome 瀏覽器最大化 driver.get('file:///Users/workspace/WEB_TEST_HTML/form.html') # 開啟原生的 "form.html" 檔案 sleep(2) print(driver.find_element_by_tag_name("form").get_attribute("class")) # 列印輸出 tag name 為 "form" 的 class 的 值 driver.quit()
執行結果如下:
以上就是詳解Selenium中元素定位方式的詳細內容,更多關於Selenium元素定位的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45