久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    曲鳥全棧UI自動化教學(四):Selenium工作原理及Webdriver對瀏覽器的配置和操作

     曲鳥 2022-01-10

    一、前言

    上篇文章我們學習了Selenium頁面操作原理及如何高效的進行元素定位

    那Selenium的工作原理又是什么?是如何驅動瀏覽器的呢?這篇文章為你講解Selenium工作原理及Webdriver對瀏覽器的配置和操作。

    Python測試交流群:8140 78962


    文章目錄


    二、Selenium工作原理

    Selenium進行自動化測試主要依賴三項:

    1. 測試腳本(你寫的代碼)
    2. 瀏覽器驅動(Webdriver,比如:chromedriver)
    3. 瀏覽器

    其中核心部分就是Webdriver,它提供了一系列的API來供我們使用,以至于驅動瀏覽器做一些操作。
    它的工作原理有時也會作為面試題,不少小伙伴Selenium用的很熟練,但因為答不出它的工作原理而被Pass!
    所以我簡單總結了一下,為了面試不被pass的標準答案

    Webdriver工作原理:

    webdriver用于通信用戶編寫的代碼和瀏覽器。
    當使用類似webdriver.Chrome()啟動瀏覽器后,webdriver會將啟動的瀏覽器綁定到特定的端口,并作為服務端 (類似前后端分離項目的后端)

    客戶端 (用戶編寫的代碼),通過ComandExecutor發(fā)送HTTP請求給服務端
    服務端通過WebService將其翻譯為瀏覽器讀的懂的腳本傳給瀏覽器進行執(zhí)行,執(zhí)行完成后,瀏覽器把執(zhí)行結果返回給WebService,WebService再把返回的結果做一些封裝,然后返回給客戶端。
    在這里插入圖片描述


    三、Webdriver常用配置

    1. 啟動瀏覽器

    通過查看Selnium->webdriver文件夾,發(fā)現(xiàn)Selnium支持6種瀏覽器:
    chromeedgefirefoxieoperasafari
    在這里插入圖片描述


    這里用谷歌、火狐的啟動來舉例

    1. 啟動谷歌瀏覽器(需要chromedriver)
    from selenium import webdriver
    browser = webdriver.Chrome()
    

    1. 啟動火狐瀏覽器(需要geckodriver)
    from selenium import webdriver
    browser = webdriver.Firefox()
    

    2. Webdriver配置項

    webdriver有很多配置項,例如設置請求頭、隱藏瀏覽器運行、配置Webdriver路徑等;下面為你介紹常用的配置項:

    2.1 首先調用對應的配置類(以chrome舉例)

    chrome_options = webdriver.ChromeOptions()
    

    2.2 最大化瀏覽器窗口

     chrome_options.add_argument('--start-maximized')
    

    2.3 隱藏瀏覽器運行(無界面Linux時,不加這條會報錯)

    chrome_options.add_argument('--headless')
    

    2.4 給予root執(zhí)行權限(Linux上運行時需要)

    chrome_options.add_argument('--no-sandbox')
    

    2.5 不加載圖片,提升速度

    chrome_options.add_argument('blink-settings=imagesEnabled=false')
    

    2.6 使用已打開的瀏覽器

    以chrome瀏覽器舉例,我們可以通過【cmd】在chrome所在目錄執(zhí)行命令:

    chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenum\AutomationProfile"
    

    -remote-debugging-port:用于配置瀏覽器啟動占用的端口,可以指定任何未被占用的端口
    -user-data-dir:指定創(chuàng)建新Chrome配置文件的目錄;它是為了確保在單獨的配置文件中啟動chrome,不會污染你的默認配置文件。


    然后在代碼中加入下面的配置即可使用剛剛打開的瀏覽器了

    chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
    

    這樣做的好處是:

    1. 是一個由chrome啟動的瀏覽器,不容易被所測網站檢測出是自動化程序、有利于爬蟲的過檢測。
    2. 基于該運行瀏覽器所產生的緩存、cookie等數(shù)據(jù)都會被記錄。下次啟動的時候不用重新登錄賬號,也不用因為沒有緩存導致頁面加載時間過長。

    2.7 手動指定瀏覽器位置

    當存在多個谷歌瀏覽器或谷歌瀏覽器環(huán)境異常時,可以指定其瀏覽器文件路徑進行驅動

    chrome_options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
    

    2.8 隱藏【受到自動化測試軟件的控制】提示

    在這里插入圖片描述


    通過該配置項可以隱藏上圖的提示

    chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])
    

    2.9 指定瀏覽器大小

    下面的代碼會啟動一個寬100,長1000的瀏覽器

    chrome_options.add_argument(f'--window-size={100},{1000}')
    

    2.10 指定瀏覽器位置

    下面的代碼會啟動一個左邊距為100,上邊距為200的瀏覽器

    chrome_options.add_argument(f'--window-position={100},{200}')
    

    2.11 指定瀏覽器啟動語言

    有時候開啟瀏覽器需要特別的語言版本,如果未進行配置則啟動的是系統(tǒng)語言對應的瀏覽器,我們的被測網站如果是英文的,但系統(tǒng)是中文的,開啟的瀏覽器就是中文的,提交的某些數(shù)據(jù)按照zh_CN.UTF-8的格式提交了,導致數(shù)據(jù)報錯,那么我們就需要設置瀏覽器啟動語言。

    chrome_options.add_argument('lang=en-us')
    

    2.12 更換瀏覽器請求頭

    有時候需要模擬手機訪問某些頁面的時候,可以通過配置user-agent項來實現(xiàn)
    下面的代碼會將瀏覽器模擬為安卓手機訪問

    user_ag = 'MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 7.3.7; zh-cn; MB200 Build/GRJ22;CyanogenMod-7) '               'AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 '
    chrome_options.add_argument('user-agent=%s' % user_agent)
    

    執(zhí)行效果


    在這里插入圖片描述

    2.13 設置瀏覽器代理

    chrome_options.add_argument('--proxy-server=你的代理ip地址')
    

    2.14 使用配置

    下面的代碼會【最大化窗口】且【不加載圖片】的啟動一個瀏覽器:

    from selenium import webdriver
    
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--start-maximized')
    chrome_options.add_argument('blink-settings=imagesEnabled=false')
    browser = webdriver.Chrome(options=chrome_options)
    

    3. Webdriver常用操作

    3.1 獲取瀏覽器名稱

    browser.name
    

    3.2 最大化瀏覽器窗口

    browser.maximize_window()
    

    3.3 最小化瀏覽器窗口(Selenium4支持)

    browser.minimize_window()
    

    3.4 全屏窗口

    類似瀏覽器中按下【F11】

    browser.fullscreen_window()
    

    3.5 訪問指定網址

    browser.get("https://www.baidu.com") #訪問百度
    

    3.6 獲取當前頁url

    browser.current_url
    

    3.7 獲取當前頁的title

    browser.title
    

    3.8 獲取當前頁窗口句柄

    browser.current_window_handle
    

    3.9 截屏當前窗口

    browser.save_screenshot('test.png')  #截取當前窗口并命名為`test.png`保存
    

    3.10 刷新

    browser.refresh()
    

    3.11 前進(瀏覽器的【前進】按鈕)

    browser.forward()
    

    3.12 后退(瀏覽器的【后退】按鈕)

    browser.back()
    

    3.13 設置瀏覽器大小

    設置瀏覽器寬為480,高為800

    browser.set_window_size(480, 800)
    

    3.14 設置瀏覽器位置

    設置瀏覽器寬為480,高為800

    browser.set_window_position(480, 800)
    

    3.15 獲取瀏覽器大小

    設置瀏覽器寬為480,高為800

    browser.get_window_size(480, 800)
    

    3.16 獲取瀏覽器位置

    設置瀏覽器寬為480,高為800

    browser.get_window_position(480, 800)
    

    3.17 執(zhí)行js腳本

    如果需要進行頁面滑動(模擬鼠標滾輪操作)可以通過執(zhí)行js腳本實現(xiàn)
    例如滑動到'//*[@id="asideHotArticle"]/h3'元素:

    target = browser.find_element(By.XPATH, '//*[@id="asideHotArticle"]/h3')
    browser.execute_script("arguments[0].scrollIntoView();", target)
    

    3.18 切換窗口

    有多個窗口時,可以通過下面的方法進行切換才能夠順利的進行定位

    browser.switch_to.window(browser.window_handles[1])
    

    3.19 切換iframe

    頁面中的iframe彈窗,需要使用下面的代碼切換才能夠順利的進行定位

    iframe = browser.find_element(By.CSS_SELECTOR, "#modal > iframe")
    # 切換到iframe
    browser.switch_to.frame(iframe)
    

    如果iframe有明確的id則可以直接這樣寫

    driver.switch_to.frame('appIframe-product')
    

    3.20 離開iframe

    離開iframe,回到默認頁面

    browser.switch_to.default_content()
    

    3.21 關閉當前窗口

    有多個頁面的時候,只會關閉當前所在頁面

    browser.close()
    

    3.22 退出瀏覽器

    會直接關閉瀏覽器,所有頁面都將關閉

    browser.quit()
    

    四、總結

    實際上webdriver的操作還有很多,比如遠程控制項的配置,cookie相關配置等,但都不常用,掌握這些些已經足夠了!

    下一篇文章會對selenium的鍵盤鼠標事件進行詳解,歡迎訂閱本專欄!





    👇🏻歡迎關注公眾號【曲鳥講測試開發(fā)】,付費教程免費看,帶你從0開始學測開!👇🏻

      轉藏 分享 獻花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 丰满无码人妻热妇无码区| 国偷自产一区二区三区在线视频| 亚洲欧洲日韩精品在线| 乱码中字在线观看一二区| 中文AV无码人妻一区二区三区| 精品国产精品午夜福利| 久久SE精品一区精品二区| 97久久综合亚洲色hezyo| 欧美综合人人做人人爱| 久久精品免视看国产成人| 精品一区二区三区在线成人| 欧美激情一区二区三区成人| 果冻传媒MV国产推荐视频| 亚洲精品一区二区制服| 大帝AV在线一区二区三区| 中文字幕少妇人妻精品| 久久WWW免费人成一看片| 欧美不卡无线在线一二三区观| 无码精品人妻一区二区三区影院| 2019久久久高清日本道| 欧美国产日韩A在线观看| 亚洲国产日韩在线人成蜜芽| 日韩人妻无码一区二区三区| 在线精品视频一区二区三四| 91中文字幕一区在线| 少妇AV一区二区三区无码| 午夜福利片1000无码免费| 亚洲美免无码中文字幕在线| 日韩国产亚洲一区二区三区| 国产免费无遮挡吃奶视频| 亚洲a∨国产av综合av| 狠狠色丁香婷婷综合尤物| 成人免费无码大片A毛片抽搐色欲| 日日躁夜夜躁狠狠躁超碰97| 国产午夜成人无码免费看| 无套内谢少妇毛片在线| 精品国产AV无码一道| 成人区人妻精品一区二区不卡 | 我国产码在线观看av哈哈哈网站| 18禁网站免费无遮挡无码中文| 麻豆国产AV剧情偷闻女邻居内裤|