摘要:概述是一款開(kāi)源的自動(dòng)化框架,模擬用戶操作瀏覽器的行為,主要用于界面自動(dòng)化瀏覽器兼容性測(cè)試。將瀏覽器原生的封裝成,作為編程語(yǔ)言與瀏覽器通信的橋梁,從而達(dá)到操作瀏覽器的目的。
Selenium是一款開(kāi)源的Web自動(dòng)化框架,模擬用戶操作瀏覽器的行為,主要用于界面自動(dòng)化、瀏覽器兼容性測(cè)試。
優(yōu)點(diǎn):
1、跨平臺(tái),如:Windows、Linux 和 Mac等;
2、支持各種瀏覽器,如:Chrome、Firefox、Edge、IE、Opear等;
3、完全開(kāi)源。
webdriver:
將瀏覽器原生的API封裝成WebDriver API ,作為編程語(yǔ)言與瀏覽器通信的橋梁,從而達(dá)到操作瀏覽器的目的。
注:不同的瀏覽器,需要不同的webdriver,且webdriver的版本號(hào)與瀏覽器版本號(hào)需對(duì)應(yīng)。
導(dǎo)包:
from selenium import webdriver
本文以Chrome瀏覽器為例
driver = webdriver.Chrome(executable_path="driver路徑")
將webdriver放置路徑添加環(huán)境變量:
環(huán)境變量添加步驟:桌面—>我的電腦—>屬性—>高級(jí)系統(tǒng)設(shè)置—>環(huán)境變量—>系統(tǒng)變量找到path并選中—>點(diǎn)擊編輯—>新建—>保存,如下步驟:
推薦:一般直接將對(duì)應(yīng)瀏覽器版本的driver文件放置在在python的安裝目錄下,省去再次添加環(huán)境變量(本人常用方法)。
設(shè)置環(huán)境變量后,可不用再次指定driver路徑:
driver = webdriver.Chrome()
driver.get("http://xxxx")
driver.maximize_window() # 瀏覽器最大化driver.minimize_window() # 瀏覽器最小化driver.set_window_size(1980,1080) # 指定瀏覽器大小
options = webdriver.ChromeOptions()options.add_argument("--headless") # 設(shè)置無(wú)界面driver=webdriver.Chrome(chrome_options=options)
close():關(guān)閉當(dāng)前當(dāng)前瀏覽器窗口
quit():關(guān)閉所有頁(yè)面,即關(guān)閉瀏覽器
6、其它操作
前進(jìn):driver.forward()
后退:driver.back()
刷新:driver.refresh()
driver.find_element_by_id()driver.find_element_by_name()driver.find_element_by_css_selector()driver.find_element_by_tag_name()driver.find_element_by_class_name()driver.find_element_by_xpath()driver.find_element_by_link_text()driver.find_element_by_partial_link_text():模糊查詢
注:查找多個(gè)元素:將上述定位方法中的element改為elements即可,如:driver.find_elements_by_name(),唯一屬性id除外
**絕對(duì)路徑:**以“/”表示,從HTML標(biāo)簽逐層向下尋找,如:/html/body/table/tbody/tr[2]/td[2]/div/div[2]/table[2]/thead/tr/th[1]
**相對(duì)路徑:**以“//”表示,表示任意位置,依據(jù)給出的路徑匹配節(jié)點(diǎn)
如://*[@id=“fileID”]
常用函數(shù)定位法:
使用contains方法,如:xpath=//input[contains(@id,‘a(chǎn)bcd’)]
使用text()方法,如:xpath=//button[text()=‘保存’]
使用starts-with方法(同理還有:ends-with),多用于元素屬性部分發(fā)生變化的情況,如:
# 如:id=abcd12312sdfsf342xpath=//input[starts-with(@id,"abcd")]
一個(gè)元素需要通過(guò)多個(gè)屬性值定位,可以用“and”,如:
//span[@id="fileID" and @class="classname"]
常用的包含以下幾種:
類選擇:find_element_by_css_selector(".slg")
id選擇:find_element_by_css_selector("#su")
標(biāo)簽選擇:find_element_by_css_selector(“input”)
屬性選擇:find_element_by_css_selector("[name=‘kw’]")
層級(jí)關(guān)系:
find_element_by_css_selector(“span>input”)
find_element_by_css_selector(“form>input:nth-child(2)”) #查找form標(biāo)簽下第2個(gè)input元素
組合選擇:find_element_by_css_selector(“form.fm>span>input.slg”)
其它方式:
find_element_by_css_selector("[class*=swait_lg]"),查找class屬性包含“swait_lg”
find_element_by_css_selector("[class^=bba]"),以“bba”開(kāi)頭
find_element_by_css_selector("[class$=abb]"),以“abb”結(jié)尾
…
點(diǎn)擊:click()
清除原有內(nèi)容:clear()
輸入值:send_keys()
獲取內(nèi)容:text
獲取元素屬性:get_attribute()
判斷元素是否顯示:is_displayed()
1、轉(zhuǎn)移到彈窗:
ele = driver.switch_to.alertele.accept() # 接受ele.text # 獲取彈窗內(nèi)容ele.dismiss() # 退出或取消
2、頁(yè)內(nèi)焦點(diǎn)切換: driver.switch_to.frame(frame)
退出當(dāng)前焦點(diǎn)窗口到原窗口:driver.switch_to.default_content()
3、多窗口切換:
driver.switch_to.window(name)handles=driver.window_handles()driver.switch_to.window(handles[-1])
selenium有3種等待方式:
1、強(qiáng)制等待
time.sleep(2)
2、顯示等待(局部,針對(duì)某個(gè)元素)
WebdriverWait(driver,5,0.5).until(lambda driver:driver.find_element_by_xpath())
3、隱式等待(全局,可解決大部分的元素等待問(wèn)題)
driver.implicitly_wait(20)
1.截取整個(gè)網(wǎng)頁(yè):
driver.get_screenshot_as_base64() # 保存的是base64的編碼格式driver.save_screenshot("XX/XX.png") # 如果在alert之類的彈出對(duì)話框出現(xiàn)后截圖,程序會(huì)拋出異常driver.get_screenshot_as_png() # 保存的是二進(jìn)制數(shù)據(jù),需要寫成圖片文件保存driver.get_screenshot_as_file("XX/XX.png") # 獲取當(dāng)前window的截圖,截圖成功返回True,出現(xiàn)IOError的時(shí)候返回False
2.截小圖:
ele.screenshot()ele = driver.find_element_by_id("msg")ele.screenshot("./3.png")
常用工具:Actionchains、pymouse、pykeyboard、pyautogui
1.Actionchains常用鼠標(biāo)操作:
單機(jī):click()
雙擊:double_click()
移動(dòng)到某個(gè)元素上:move_to_element
在某個(gè)元素上懸停:click_and_hold
將一個(gè)元素拖到另一個(gè)元素上:drag_and_drop
用法:
from selenium.webdriver.common.action_chains import ActionChainsActionChains(driver).context_click(driver.find_element_by_id("su")).perform()
注:鼠標(biāo)的所有事件,必須使用perform()執(zhí)行所有ActionChains中存儲(chǔ)的行為
2.鍵盤操作:
from selenium.webdriver.common.keys import Keyssend_keys(Keys.ENTER) # 鍵盤的回車事件send_keys(Keys.BACKSPACE) # 刪除,回退# 組合使用send_keys(Keys.CONTROL,"a") # 全選send_keys(Keys.CONTROL,"c") # 復(fù)制
用法:driver.execute_script(js代碼)
修改只讀屬性,如:driver.execute_script("document.getElementById(/"su/").readOnly=0;")
移動(dòng)到頁(yè)面底部
driver.excute_script("window.scrollTo(0,document.body.scrollHeight)")
注:本文是本人工作中學(xué)習(xí)及使用到的selenium常用方法,如有錯(cuò)誤之處歡迎指出
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/119611.html
摘要:當(dāng)你使用時(shí),你必須注意,如果匹配超過(guò)一個(gè)元素,只返回第一個(gè)元素。操作打開(kāi)一個(gè)頁(yè)面現(xiàn)在設(shè)置,這個(gè)在域名根目錄下生效現(xiàn)在獲取所有當(dāng)前下可獲得的查找元素以上是相關(guān)的基礎(chǔ)內(nèi)容,下一期更新使用頁(yè)面對(duì)象模式的示例一起越來(lái)越好 今天想跟大家分享的是:關(guān)于selenium的自動(dòng)化測(cè)試一些基礎(chǔ)的東西 安裝環(huán)境 1.Python環(huán)境安裝完成后通過(guò)Windows命令提示符CMD輸入python,查看是否安裝...
摘要:不同目標(biāo)的自動(dòng)化測(cè)試有不同的測(cè)試工具,但是任何工具都無(wú)不例外的需要編程的過(guò)程,實(shí)現(xiàn)源代碼,也可以稱之為測(cè)試腳本。 寫在最前面:目前自動(dòng)化測(cè)試并不屬于新鮮的事物,或者說(shuō)自動(dòng)化測(cè)試的各種方法論已經(jīng)層出不窮,但是,能夠在項(xiàng)目中持之以恒的實(shí)踐自動(dòng)化測(cè)試的團(tuán)隊(duì),卻依舊不是非常多。有的團(tuán)隊(duì)知道怎么做,做的還不夠好;有的團(tuán)隊(duì)還正在探索和摸索怎么做,甚至還有一些多方面的技術(shù)上和非技術(shù)上的舊系統(tǒng)需要重構(gòu)……...
摘要:安裝的安裝就不再科普,自行百度。運(yùn)行這段代碼,你會(huì)發(fā)現(xiàn)自動(dòng)打開(kāi),并訪問(wèn)了百度,在輸入框輸入了,緊接著跳轉(zhuǎn)到了搜索的結(jié)果頁(yè)。 最近寫項(xiàng)目的時(shí)候,用到了Selenium,一個(gè) Web 端的自動(dòng)化測(cè)試工具,直接運(yùn)行在瀏覽器中,用來(lái)模擬用戶操作。 Selenium 不僅僅可以用作自動(dòng)化測(cè)試,還有很多種玩法,比如 Python 的爬蟲,實(shí)現(xiàn)某商品的秒殺,甚至是頁(yè)游外掛腳本,只要是基于瀏覽器操作,...
摘要:然而讓蟲師們垂涎的并不是以上的種種,而是其通過(guò)驅(qū)動(dòng)瀏覽器獲得的解析的能力。所以說(shuō)這貨在動(dòng)態(tài)爬取方面簡(jiǎn)直是掛逼級(jí)別的存在,相較于手動(dòng)分析更簡(jiǎn)單易用,節(jié)省分析打碼時(shí)間。一旦設(shè)置了隱式等待時(shí)間,它的作用范圍就是對(duì)象實(shí)例的整個(gè)生命周期。 selenium——自動(dòng)化測(cè)試工具,專門為Web應(yīng)用程序編寫的一個(gè)驗(yàn)收測(cè)試工具,測(cè)試其兼容性,功能什么的。然而讓蟲師們垂涎的并不是以上的種種,而是其通過(guò)驅(qū)動(dòng)瀏...
閱讀 987·2021-09-09 09:32
閱讀 2975·2021-09-02 10:20
閱讀 2802·2021-07-23 11:24
閱讀 880·2019-08-30 15:54
閱讀 3706·2019-08-30 15:54
閱讀 1400·2019-08-30 11:02
閱讀 2896·2019-08-26 17:40
閱讀 1176·2019-08-26 13:55