Selenium webdriver常用操作
1.安裝pip install selenium
通過selenium庫得到浏覽器的驅動對象(需要下載下傳驅動程式,不同的浏覽器需要不同的 驅動對象,Firefox->geckodriver,Chrome->chromedriver)
2.得到驅動對象後,可以通過驅動對象:
Driver.get()-> 打開一個網站(需要完整的URL)
Driver.close()-> 僅僅關閉目前頁面,如果他打開的僅一個視窗則退出浏覽器
Driver.quit()-> 關閉驅動程式打開的所有頁面,同時釋放驅動對象
Os.system()/os.popen()->殺死整個驅動程式程序
Driver.maximize_window()->最大化浏覽器視窗
Driver.set_window_size(x,y)-> 設定視窗的大小
Driver.back()->回退
Driver.forword()->前進
driver.refresh()->頁面重新整理
3.selenium常用操作:
(1)查找頁面元素,并操作#
A.查找元素::Driver.find_element_by_method()
Method():
Id() -->一般來說,id屬性在标簽裡面具有唯一性
Name()–>和id相同,一般都是标簽的唯一屬性
Class_name()–>相同類型的标簽的屬性
當class屬性在頁面存在多個時:可以用find_elements_by_class_name先找出所有的class屬性并放入清單,再根據索引将他取出來進行操作
li = wd.find_elements_by_class_name(“el-input__inner”)
li[0].send_keys(“admin”)
li[1].send_keys(“CDDQ&1314!”)
Link_text()--> <a>标簽專用,超連結
Partial_link_text()--> <a>标簽專用 ,超連結
Xpath()-->标簽相對于<html>的樹形結構
Css_selector()-->标簽相對于css的樹形結構
Tag_name()-->以标簽名的方式定位
B.操作:
輸入:send_keys(“ ”)
點選:click()
清空輸入框:clear()
判斷元素是否顯示:is_displayed()
判斷元素是否可使用:is_enabled()
(2)等待方式:
(1)隐式等待:driver.implicitly_wait( )
(2)顯示等待:from selenium.webdriver.support.ui import WebDriverWait
Webdriverwait(driver,10,0.1).until(lambda driver: driver .find_element_by_[method{‘xx’}]).send_keys()
(3)強制等待:time .sleep()
(3)焦點切換:
内嵌頁面的方式:iframe->
進入内嵌頁面:
driver.switch_to.frame(id/driver.find_element_by_[method()])
driver.find_element_by_[method].func()
關閉内嵌頁面:
driver.switch_to.default_content()
警告框: alt = driver.swidth_to.alert.accept()
alt.accept()->确定
alt.dismiss()->取消
alt.text()->擷取文本内容
(4)檔案上傳:
A.send_keys()
B.使用Autolt
請見檔案:GUI自動化測試_檔案處理之Autolt.xmind
(5)滑鼠事件:
(1)滑鼠懸浮到指定元素上方,并點選出現的對應元素資訊的操作:
from selenium.webdriver.common.action_chains import ActionChains
top_menu = wd.find_element_by_xpath(data["path"])
ActionChains(wd).move_to_element(top_menu).perform()
time.sleep(2)
wd.find_element_by_xpath(data["menu_path"]).click()
(2)滑鼠右鍵操作:
#定位到要右擊的元素
qqq=driver.find_element_by_xpath("path")
#對定位到的元素執行滑鼠右鍵操作
ActionChains(driver).context_click(qqq).perform()
(3)滑鼠拖放操作:
#定位元素的原位置
element = driver.find_element_by_name("source")
#定位元素要移動到的目标位置
target = driver.find_element_by_name("target")
#執行元素的移動操作
ActionChains(driver).drag_and_drop(element, target).perform()
(4)滑鼠輕按兩下操作:
#定位到要輕按兩下的元素
qqq =driver.find_element_by_xpath("xxx")
#對定位到的元素執行滑鼠輕按兩下
ActionChains(driver).double_click(qqq).perform()
(6)下拉框幾種方式:
A.随機選擇下拉框任意一個
1)随機選擇下拉框任意一個
from selenium.webdriver.support.select import Select
#以清單形式擷取下拉框元素對象
ops = Select(wd.find_element_by_xpath("")).options
#周遊對象
for ele in ops:
print(ele.text)
#根據下标随機選擇下拉框任意一個
index = random.randrange(0,len(ops)-1)
Select(wd.find_element_by_xpath("")).select_by_index(index)
2)根據下拉框的文本内容選擇:
Select(wd.find_element_by_xpath("")).select_by_visible_text(value)
3)根據下标索引選擇:
Select(wd.find_element_by_xpath("")).select_by_index()
4)根據下拉框的值選擇:
Select(wd.find_element_by_xpath("")).select_by_value()
B.如果下拉框為清單可以先擷取整個下拉框并放入一個清單中,再根據索引選擇下拉框的值
li = wd.find_element_by_xpath("/html/body/div[4]/div[1]/div[1]/ul")
li[1].click()
C.可以先點開下拉框,再點選需求選取的值
wd.find_element_by_css_selector('.el-input__inner').click()
wd.find_element_by_css_selector('[x-placement='bottom-start']li:nth-of-type(2)').click()
(7)鍵盤事件:
from selenium.webdriver.common.keys import Keys
if data["manipulate"] == "ENTER":
wd.find_element_by_xpath(data['path']).send_keys(Keys.ENTER)
if data["manipulate"] == "ESC":
wd.find_element_by_xpath(data["path"]).send_keys(Keys.ESCAPE)
(8)xpath絕對路徑和相對路徑: 盡量不使用絕對路徑
1)絕對路徑:從根目錄一層一層的往下找元素
/html//div[@id=‘app’]/div[@class=‘login_wrapper’]//div[@class=‘el-row’]//form[@class=‘el-form’]//input[@type=‘text’]
2)相對路徑:先找對應的标簽,再通過該标簽下的屬性尋找元素,多個屬性用and連接配接
//标簽[@屬性=” ” and @屬性=” “]
(9)擷取元素的文本資訊:
(1)text:适用于表單元素,例如:文本域、下拉框、文本框、按鈕、彈出框等
(2)get_attribute(屬性名):除了.text其他均可使用
Input标簽預設有value屬性,可以通過get_attribute(value)擷取