UI自動化測本質無非就是: 定位元素 -> 操做元素 -> 模擬頁面動做 -> 斷言結果 -> 生成測試報告。
因此咱們作UI自動化的第一步就是定位元素,若是連元素都定位不到就更沒必要說接下來的操做。
本篇隨筆即是關於Selenium八大元素定位方式,讓你成功定位元素。php
find_element_by_id
css
# -*- coding:utf-8 -*- # 做者:IT小學生蔡坨坨 # 時間:2020/12/13 13:42 from selenium import webdriver import time driver = webdriver.Chrome() # 實例化 # demo01: # 打開雲商網站 driver.get("http://101.133.169.100/yuns/index.php") # 窗口最大化 driver.maximize_window() time.sleep(2) # 點擊個人購物車進行跳轉 driver.find_element_by_id('cart_num').click() time.sleep(2) # demo02: # 打開百度,搜索框中輸入 編測編學,點擊百度一下 driver.get("http://www.baidu.com") time.sleep(2) driver.find_element_by_id("kw").send_keys("編測編學") time.sleep(2) driver.find_element_by_id("su").click() time.sleep(3) driver.quit()
find_element_by_name
html
# -*- coding:utf-8 -*- # 做者:IT小學生蔡坨坨 # 時間:2020/12/13 13:53 from selenium import webdriver import time driver = webdriver.Chrome() driver.get('http://101.133.169.100/yuns/index.php') time.sleep(2) # demo01: # 搜索框中輸入耐克 # 只有可輸入的控件才能使用send_keys()方法,好比input控件。 driver.find_element_by_name('key').send_keys('耐克') time.sleep(2) # demo02: # 清空搜索框中的信息 driver.find_element_by_name("key").clear() time.sleep(3) driver.quit()
find_element_by_class_name
python
# -*- coding:utf-8 -*- # 做者:IT小學生蔡坨坨 # 時間:2020/12/15 16:26 from selenium import webdriver import time driver = webdriver.Chrome() # 打開雲商網站 driver.get("http://101.133.169.100/yuns/index.php") driver.maximize_window() time.sleep(2) # demo01: # 搜索框中輸入 女裝 driver.find_element_by_class_name("but1").send_keys("女裝") time.sleep(2) # demo02: # 點擊搜索 driver.find_element_by_class_name("but2").click() time.sleep(3) # 注意:若是class name是一個複合類(帶有空格),則沒法定位到元素 # 可使用複合類的部分單詞去定位,可是不建議,由於可能會定位到多個元素 # driver.get("http://www.baidu.com") # time.sleep(2) # driver.find_element_by_class_name("bg s_btn btn_h btnhover") # NoSuchElementException driver.quit()
find_element_by_link_text
web
# -*- coding:utf-8 -*- # 做者:IT小學生蔡坨坨 # 時間:2020/12/15 17:44 from selenium import webdriver import time driver = webdriver.Chrome() driver.get("http://101.133.169.100/yuns/index.php") driver.maximize_window() time.sleep(2) # demo01: # 點擊 T恤男2016 # 精確匹配超連接載體 driver.find_element_by_link_text("T恤男2016").click() time.sleep(2) # demo02; # 點擊聯繫客服 driver.find_element_by_link_text("聯繫客服").click() time.sleep(2)
find_element_by_partial_link_text
學習
from selenium import webdriver import time driver = webdriver.Chrome() driver.get("http://101.133.169.100/yuns/index.php") driver.maximize_window() time.sleep(2) # demo01: # 點擊 9.9搶大牌 # partial_link_text 模糊匹配超連接載體 driver.find_element_by_partial_link_text("搶大牌").click() time.sleep(2) # demo02: # 點擊 家裝節 driver.find_element_by_partial_link_text("家裝").click() time.sleep(2) driver.quit()
XPath定位詳解及高級方法探究
測試
# -*- coding:utf-8 -*- # 做者:IT小學生蔡坨坨 # 時間:2020/12/13 14:06 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time driver = webdriver.Chrome() # 打開雲商網站 driver.get("http://101.133.169.100/yuns/index.php") # 窗口最大化 driver.maximize_window() time.sleep(2) # demo01: # 絕對路徑 # 搜索框輸入 阿迪達斯 # XPath的下標是從1開始的 driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[1]/form/input[1]").send_keys("阿迪達斯") time.sleep(2) # demo02: # 絕對路徑 # 點擊搜索 driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[1]/form/input[2]").click() time.sleep(2) # demo03: # 絕對路徑 # 點擊 芭芭鴨 driver.find_element_by_xpath("/html/body/div[4]/div/div[2]/dl/dd/a[31]").click() time.sleep(2) # demo04: # 相對路徑 # 搜索框輸入 女裝 # XPath相對路徑以 // 開頭,經過屬性匹配 @class= driver.find_element_by_xpath("//input[@class='but1']").send_keys("女裝") time.sleep(2) # demo05; # 清空搜索框中的內容 # 經過多個屬性匹配,使用and鏈接 driver.find_element_by_xpath("//input[@class='but1' and @name='key']").clear() time.sleep(2) # demo06: # 搜索框輸入 童裝 # 經過屬性模糊匹配 [contains(@屬性名,'屬性值')] driver.find_element_by_xpath("//input[contains(@placeholder,'請輸入')]").send_keys("童裝") # demo07; # 點擊搜索 driver.find_element_by_xpath("//form/input[2]").click() time.sleep(2) # demo08: # 點擊 個人購物車 driver.find_element_by_xpath("//div[@class='small_cart_name']/i").click() time.sleep(2) # demo09: # 點擊如今就去購物 # 經過 * 匹配 driver.find_element_by_xpath("//*[@class='r']/a").click() time.sleep(2) # demo10: # 點擊登陸 跳轉到登陸頁面 driver.find_element_by_xpath("//div/a").click() time.sleep(2) # demo11: # 輸入用戶名:15059224492 driver.find_element_by_xpath("//div[@class='binput']/input[@name='username']").send_keys("15059224492") time.sleep(1) # demo12; # 輸入密碼:123456 driver.find_element_by_xpath("//input[@name='password']").send_keys("123456") time.sleep(1) # demo13: # 點擊登陸按鈕 driver.find_element_by_xpath("//input[@name='submit']").click() time.sleep(2) # demo14: # 點擊個人訂單 driver.find_element_by_xpath("//div[@class='help']/a[2]").click() time.sleep(2) # demo15: # 點擊收貨地址 driver.find_element_by_xpath("//div[@class='left']/dl/dd[3]/a").click() time.sleep(2) # demo16; # 點擊 新增收貨地址 driver.find_element_by_xpath("//a[@id='add_address']").click() time.sleep(2) # demo17; # 輸入姓名:蔡坨坨 driver.find_element_by_xpath("//input[@id='recive_name']").send_keys("蔡坨坨") time.sleep(1) # 輸入手機:15059224499 driver.find_element_by_xpath("//input[@name='mobile']").send_keys("15059224499") time.sleep(1) # 選擇省市區 driver.find_element_by_xpath("//span[@class='area_name']").click() time.sleep(2) # 選擇陝西省 driver.find_element_by_xpath("//div/a[27]").click() time.sleep(2) # 鼠標移到選擇省市區 ele = driver.find_element_by_xpath("//span[@class='area_name']") ActionChains(driver).move_to_element(ele).perform() time.sleep(2) # 選擇西安市 driver.find_element_by_xpath("//div[@class='conbox'][2]/a[1]").click() time.sleep(2) # 鼠標移到選擇省市區 ActionChains(driver).move_to_element(ele).perform() time.sleep(2) # 選擇市轄區 driver.find_element_by_xpath("//div[@class='conbox'][3]/a[1]").click() time.sleep(2) # 輸入詳細地址 driver.find_element_by_xpath("//input[@placeholder='收件人詳細地址']").send_keys("編測編學") time.sleep(1) # demo18: # 點擊確認,提示保存成功 driver.find_element_by_xpath("//div[2]/div/div[3]/a[2]").click() time.sleep(3) driver.quit()
CSS定位詳解及高級語法詳解
# -*- coding:utf-8 -*- # 做者:IT小學生蔡坨坨 # 時間:2020/12/13 14:07 from selenium import webdriver import time driver = webdriver.Chrome() # 打開雲商網站 driver.get("http://101.133.169.100/yuns/index.php") driver.maximize_window() time.sleep(2) # demo01: # 絕對路徑,使用 > 分隔,在搜索框中輸入童裝 # CSS Selector下標從1開始,跟XPath同樣 driver.find_element_by_css_selector("html>body>div>div>div>div>form>input:nth-child(1)").send_keys("童裝") time.sleep(2) # demo02: # 絕對路徑,使用 空格 分隔,點擊「家裝節」進行跳轉 driver.find_element_by_css_selector("html body div.logo_bar div div.sch div.schhot a:nth-child(2)").click() time.sleep(2) # demo03: # 絕對路徑,使用 > 加 空格 分隔,點擊「T恤男2016」進行跳轉 driver.find_element_by_css_selector("html body div.logo_bar div > div.sch > div.schhot > a:nth-child(5)").click() time.sleep(2) # demo04: # 相對路徑,經過class選擇器定位元素,清空搜索框中的文本信息 # class選擇器: . driver.find_element_by_css_selector("input.but1").clear() time.sleep(2) # demo05: # 經過class選擇器定位元素,在搜索框中輸入女裝 driver.find_element_by_css_selector(".but1").send_keys("女裝") time.sleep(2) # demo06: # 經過class選擇器定位元素,點擊搜索按鈕 driver.find_element_by_css_selector(".but2").click() time.sleep(2) # demo07: # 經過id選擇器定位元素,點擊購物車 # id選擇器: # driver.find_element_by_css_selector("i#cart_num").click() time.sleep(2) # demo08: # first-child,點擊首頁跳轉至首頁 driver.find_element_by_css_selector(".help>a:first-child").click() time.sleep(2) # demo09: # 經過id選擇器定位元素,點擊購物車 driver.find_element_by_css_selector("#cart_num").click() time.sleep(2) # demo10: # last-child,點擊聯繫客服進行跳轉 driver.find_element_by_css_selector(".help>a:last-child").click() time.sleep(2) # demo11: # 經過屬性定位,注意與XPath區別,在搜索框輸入拖鞋 driver.find_element_by_css_selector("input[placeholder='請輸入你要查找的關鍵字']").send_keys("拖鞋") time.sleep(2) # demo12: # 經過多個屬性定位,注意與XPath區別,清空搜索框中的文本信息 driver.find_element_by_css_selector("input[name='key'][class='but1']").clear() time.sleep(2) # demo13: # 倒序 nth-last-child(),點擊首頁進行跳轉 driver.find_element_by_css_selector(".help>a:nth-last-child(3)").click() time.sleep(2) # demo14: # 在搜索框中輸入球鞋 driver.find_element_by_css_selector("div[class='schbox']>form>input:nth-child(1)").send_keys("球鞋") # demo15: # css_selector 不區分乾兒子和親兒子, # 若一個標籤下有多個同級標籤,雖然這些同級標籤的tag name不同,可是他們是放在一塊兒排序的 # 打開百度,在搜索框中輸入 編測編學 ,點擊百度一下 driver.get("http://www.baidu.com") driver.maximize_window() time.sleep(3) driver.find_element_by_css_selector("form#form>span:nth-child(8)>input").send_keys("編測編學") driver.find_element_by_css_selector("form#form>span:nth-child(9)>input").click() time.sleep(3) # demo16; # 點擊第一個搜索結果進入編測編學官網 driver.find_element_by_css_selector("div[class='result c-container new-pmd'][id='1']>h3>a").click() time.sleep(3) # 列出全部句柄 handles = driver.window_handles print(handles) # 打印當前句柄 print(driver.current_window_handle) # 第一個窗口的索引是0 driver.switch_to.window(handles[1]) time.sleep(2) # demo17: # 點擊測試論壇 driver.find_element_by_css_selector("div[class='nexnav']>ul>:nth-child(4)>a").click() time.sleep(3) # demo18: # 點擊 編測編學軟件實戰訓練班學習大綱 driver.find_element_by_css_selector("#portal_block_48_content>h5>a").click() time.sleep(5) # 關閉當前窗口 driver.close() time.sleep(3) # 關閉全部窗口 driver.quit()
find_elements_by_tag_name
網站
tag = driver.find_elements_by_tag_name("input")