[day15]UI自動化值selenium的基礎

本次主要學習關於selenium元素定位,瀏覽器的控制等方面的知識,須要必定的HTML基礎,瞭解了HTML基礎後,更能好的瞭解元素定位的方式css

selenium提供了18中元素定位的方式,在這裏揀經常使用的8種方式進行學習,還有一些元素操做,瀏覽器的操做,鼠標操做,切換頁面,切換表單等操做html

# selenium之元素定位
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
# 1.id定位(以打開百度定位到輸入框爲例)
driver.find_elements_by_id("kw")# id具備惟一性
# 2.name定位
driver.find_element_by_name("wd")# name屬性能夠不惟一,定位時須要確認注意
# 3.class 定位
driver.find_element_by_class_name("s_ipt")# class屬性也能夠不惟一,定位時須要注意
# 4.tag標籤訂位
driver.find_element_by_tag_name("input")# 單個標籤法案爲太廣,通常不用這種方法
# 5.link 文本標籤
driver.find_element_by_link_text("新聞") # 經過元素標籤訂的文本信息進行定位
# 6.取部分文本標籤進行定位
driver.find_element_by_partial_link_text("")# 經過取元素標籤的部分文本信息進行定位
# 7.xpath 定位
# (1).絕對路徑進行定位,經過標籤的層級關係找到元素的絕對路徑
driver.find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input")
# (2).利用元素的屬性進行定位 '//'表示當前目錄下,'*'表明當前目錄下全部標籤,
# [@id='kw']表示這個元素的id屬性值爲kw,元素屬性能夠惟一標記一個元素,均可以用這種方法定位
driver.find_element_by_xpath("//*[@id='kw']")
driver.find_element_by_xpath("//*[@class='s_ipt']")
# (3).層級與屬性結合
driver.ffind_element_by_xpath("//span[@class='bgs_bth']/input")
# (4).經過邏輯運算符 經過邏輯運算符鏈接多個屬性查找元素
driver.find_element_by_xpath("//input[@id='kw' and @class='su']/span/input")
# 8.css定位 css經過選擇器爲頁面上的元素綁定屬性,選擇器知識能夠經過HTML基礎瞭解
# (1).class 選擇器
driver.find_element_by_css_selector(".s_ipt") # '.'表示經過class屬性定位元素
# (2)id屬性定位
driver.find_element_by_css_selector("#kw") # '#'表示經過id屬性定位
# (3).經過標籤名進行定位,通常不單獨使用,推薦嵌套使用
# 1).經過父子關係定位
driver.find_element_by_css_selector("span>input")
# 2).經過任意屬性定位,只要能夠惟一的標記元素
driver.find_element_by_css_selector("[name=kw]")
driver.find_element_by_css_selector("[type=submit]")
# 3).組合定位,利用屬性與層級關係進行定位
driver.find_element_by_css_selector("form.fm>span>input.s_ipt")
driver.find_element_by_css_selector("form#form>span>input#kw")

# 控制瀏覽器操做
# 1.控制瀏覽器彈窗的大小
driver.set_window_size(480,800)#以規定的大小打開瀏覽器
driver.maximize_window()#不傳參數,以全屏的方式打開瀏覽器
# 2.控制瀏覽器的前進,後退,刷新等操做
driver.back()#網頁後退
driver.forward()#網頁前進
driver.refresh()#網頁刷新

# 簡單的元素操做
# 1.send_keys() 模擬鍵盤給輸入框內輸入值
driver.find_element_by_css_selector("#kw").send_keys("hello")
time.sleep(2)
# 2.clear() 對輸入框內的文本進行清除
driver.find_element_by_css_selector("#kw").clear()
# 3.click() 模擬鼠標進行單擊
driver.find_element_by_css_selector("#su").click()
driver.find_element_by_css_selector("#su").submit()
# 上述點擊的例子能夠用submit,submit方法用於提交表單,相似與「回車」操做,經常與click混用,但沒有click應用範圍廣

# 經常使用鼠標操做
# 鼠標交互的方式包括:右擊,雙擊,懸停,鼠標拖動等功能,在webdriver中,這些方法都封裝在ActionChains類中;
from selenium.webdriver.common.action_chains import ActionChains
# 1.context_click()  右擊
right_click = driver.find_element_by_css_selector("xx")
ActionChains(driver).context_click(right_click).perform()
# 首先定位到要單機的元素:right_click,
# 調用ActionChains類,將瀏覽器驅動driver做爲參數傳入
# context_click模擬鼠標右擊,調用時須要指定元素(right_click)
# perform(),執行全部ActionChains中存儲行爲,能夠理解爲對整個操做的提交動做
# 2.move_to_element()  鼠標懸停
above = driver.find_element_by_css_selector("xx")# 定位到元素
ActionChains(driver).move_to_element(above).perform()# 對元素進行懸停操做
# 3.double_click  雙擊
double_click = driver.find_element_by_css_selector("xx")
ActionChains(driver).double_click(double_click).perform()
# 4.drag_and_drop(source,target)  鼠標拖放
source = driver.find_element_by_css_selector("xx")# 定位到元素的原位置
target = driver.find_element_by_css_selector("xx")# 定位到元素的目標位置
s2 = driver.find_element_by_css_selector("xx")
t2 = driver.find_element_by_css_selector("xx")
ActionChains(driver).drag_and_drop(source,target).perform()
ActionChains(driver).drag_and_drop(source,target).drag_and_drop(s2,t2).perform()#多個圖片拖拽

# 多窗口切換
# 1.獲取指針所在窗口
print(driver.current_window_handle)
# 2.獲取到全部tag頁面,以列表的形式返回
handles = driver.window_handles
# 3.取列表的元素,切換至元素所表明的頁面
driver.switch_to_window(handles[-1])

# 多表單切換
# 1.當頁面有多個表單頁面組合而成的時候,就須要進行表單的切換才能定位到相應的元素
driver.get("xx")# 打開一個多表單網頁
driver.switch_to_frame("xx")# 過元素定位到該表單(默認取id,name),而後切換至該表單
driver.switch_to.parent_frame()# 跳出當前一級菜單
driver.switch_to.default_content()# 跳到最外面的頁面
相關文章
相關標籤/搜索