前言:
我們在做WEB自動化時,最根本的就是操作頁面上的元素,首先我們要能找到這些元素,然后才能操作這些元素。工具或代碼無法像我們測試人員一樣用肉眼來分辨頁面上的元素。那么我們怎么來定位他們呢?
在學習元素定位之前,我們最好能懂一點html的知識。
一、查看頁面元素
用谷歌瀏覽器打開百度首頁,點擊右上角>更多工具>開發者工具,就可以看到整個頁面的html代碼了
點擊框中左上角的箭頭圖標,移動鼠標到百度搜索框,就可以自動定位到百度搜索框的HTML代碼了,查看到搜索框的屬性,我們可以看到搜索框有id,name,class等屬性。
二、元素定位
1、id定位: find_element_by_id()
從上面定位到的搜索框屬性中,有個id="kw"的屬性,我們可以通過這個id定位到這個搜索框
代碼:
# coding = utf-8 from time import sleep from selenium import webdriver # 驅動文件路徑 driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' # 啟動瀏覽器 driver = webdriver.Chrome(executable_path=driverfile_path) # 打開百度首頁 driver.get(r'https://www.baidu.com/') # 通過id定位搜索框,並輸入selenium driver.find_element_by_id('kw').send_keys('selenium') # 等待5秒 sleep(5) # 退出 driver.quit()
2、name定位: find_element_by_name()
從上面定位到的搜索框屬性中,有個name="wd"的屬性,我們可以通過這個name定位到這個搜索框
代碼:
# coding = utf-8 from time import sleep from selenium import webdriver # 驅動文件路徑 driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' # 啟動瀏覽器 driver = webdriver.Chrome(executable_path=driverfile_path) # 打開百度首頁 driver.get(r'https://www.baidu.com/') # 通過name定位搜索框,並輸入selenium driver.find_element_by_name('wd').send_keys('selenium') # 等待5秒 sleep(5) # 退出 driver.quit()
3、class定位:find_element_by_class_name()
從上面定位到的搜索框屬性中,有個class="s_ipt"的屬性,我們可以通過這個class定位到這個搜索框
代碼:
# coding = utf-8 from time import sleep from selenium import webdriver # 驅動文件路徑 driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' # 啟動瀏覽器 driver = webdriver.Chrome(executable_path=driverfile_path) # 打開百度首頁 driver.get(r'https://www.baidu.com/') # 通過class定位搜索框,並輸入selenium driver.find_element_by_class_name('s_ipt').send_keys('selenium') # 等待5秒 sleep(5) # 退出 driver.quit()
4、tag定位:find_element_by_tag_name()
如果懂HTML知識,我們就知道HTML是通過tag來定義功能的,比如input是輸入,table是表格,等等...。每個元素其實就是一個tag,一個tag往往用來定義一類功能,我們查看百度首頁的html代碼,可以看到有很多div,input,a等tag,所以很難通過tag去區分不同的元素。基本上在我們工作中用不到這種定義方法,僅了解就行。下面代碼僅做參考,運行時必定報錯
代碼:
# coding = utf-8 from time import sleep from selenium import webdriver # 驅動文件路徑 driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' # 啟動瀏覽器 driver = webdriver.Chrome(executable_path=driverfile_path) # 打開百度首頁 driver.get(r'https://www.baidu.com/') # 通過tag定位搜索框,並輸入selenium, 此處必報錯 driver.find_element_by_tag_name('input').send_keys('selenium') # 等待5秒 sleep(5) # 退出 driver.quit()
5、link定位:find_element_by_link_text()
此種方法是專門用來定位文本鏈接的,比如百度首頁右上角有“新聞”,“hao123”,“地圖”等鏈接
我們來定位“新聞”這個鏈接元素
代碼:
# coding = utf-8 from time import sleep from selenium import webdriver # 驅動文件路徑 driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' # 啟動瀏覽器 driver = webdriver.Chrome(executable_path=driverfile_path) # 打開百度首頁 driver.get(r'https://www.baidu.com/') # 通過link定位"新聞"這個鏈接並點擊 driver.find_element_by_link_text('新聞').click() # 等待5秒 sleep(5) # 退出 driver.quit()
6、partial_link定位:find_element_by_partial_link_text()
有時候一個超鏈接的文本很長很長,我們如果全部輸入,既麻煩,又顯得代碼很不美觀,這時候我們就可以只截取一部分字符串,用這種方法模糊匹配了。
我們用這種方法來定位百度首頁的“新聞”超鏈接
# coding = utf-8 from time import sleep from selenium import webdriver # 驅動文件路徑 driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' # 啟動瀏覽器 driver = webdriver.Chrome(executable_path=driverfile_path) # 打開百度首頁 driver.get(r'https://www.baidu.com/') # 通過partial_link定位"新聞"這個鏈接並點擊 driver.find_element_by_partial_link_text('聞').click() # 等待5秒 sleep(5) # 退出 driver.quit()
7、xpath定位:find_element_by_xpath()
前面介紹的幾種定位方法都是在理想狀態下,有一定使用范圍的,那就是:在當前頁面中,每個元素都有一個唯一的id或name或class或超鏈接文本的屬性,那么我們就可以通過這個唯一的屬性值來定位他們。
但是在實際工作中並非有這么美好,有時候我們要定位的元素並沒有id,name,class屬性,或者多個元素的這些屬性值都相同,又或者刷新頁面,這些屬性值都會變化。那么這個時候我們就只能通過xpath或者CSS來定位了。
代碼:
# coding = utf-8 from time import sleep from selenium import webdriver # 驅動文件路徑 driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' # 啟動瀏覽器 driver = webdriver.Chrome(executable_path=driverfile_path) # 打開百度首頁 driver.get(r'https://www.baidu.com/') # 通過xpath定位搜索框,並輸入selenium driver.find_element_by_xpath("//*[@id='kw']").send_keys('selenium') # 等待5秒 sleep(5) # 退出 driver.quit()
8、CSS定位:find_element_by_css_selector()
這種方法相對xpath要簡潔些,定位速度也要快些,但是學習起來會比較難理解,這里只做下簡單的介紹。
CSS定位百度搜索框
# coding = utf-8 from time import sleep from selenium import webdriver # 驅動文件路徑 driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' # 啟動瀏覽器 driver = webdriver.Chrome(executable_path=driverfile_path) # 打開百度首頁 driver.get(r'https://www.baidu.com/') # 通過CSS定位搜索框,並輸入selenium driver.find_element_by_css_selector('#kw').send_keys('selenium') # 等待5秒 sleep(5) # 退出 driver.quit()