<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    selenium-webdriver(python) (十四) -- webdriver原理

     

    之前看乙醇視頻中提到,selenium ruby 實現有一個小后門,在代碼中加上$DEBUG=1 ,再運行腳本的過程中,就可以看到客戶端請求的信息與服務器端返回的數據;覺得這個功能很強大,可以幫助理解webdriver的運行原理。

    后來查了半天,python并沒有提供這樣一個方便的后門,不過我們可以通過代理的方式獲得這些交互信息;

     

    一、需要安裝java 虛擬機與selenium-server-standalone ,參考 《selenium + python自動化測試環境搭建》第78操作:

     

    二、通過下面命令啟動服務:

    C:\selenium>java -jar selenium-server-standalone-2.33.0.jar

    在命令結尾加 >d:\log.txt 可以將命令信息存入文件,但信息很少。

     

     

    然后運行下面的自動化腳本:

    復制代碼
    #coding = utf-8  import time from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities  driver = webdriver.Remote(desired_capabilities=DesiredCapabilities.CHROME) driver.get("http://www.youdao.com") driver.find_element_by_name("q").send_keys("hello") driver.find_element_by_name("q").send_keys("key.ENTER")  driver.close()
    復制代碼

     

     

    webdriver原理:

    1. WebDriver 啟動目標瀏覽器,并綁定到指定端口。該啟動的瀏覽器實例,做為web driverremote server

    2. Client 端通過CommandExcuter 發送HTTPRequest remote server 的偵聽端口(通信協議: the webriver wire protocol

    3. Remote server 需要依賴原生的瀏覽器組件(如:IEDriver.dll,chromedriver.exe),來轉化轉化瀏覽器的native調用。

     

     

    查看命令提示符下的運行日志:

    咋一看很亂,慢慢分析一下就發現很有意思!結合上面的腳本分析

    復制代碼
    --------------------------------------------------------------------------------------- 啟動代理進入監聽狀態 C:\selenium>java -jar selenium-server-standalone-2.33.0.jar 八月 22, 2013 10:19:48 上午 org.openqa.grid.selenium.GridLauncher main INFO: Launching a standalone server 10:19:48.734 INFO - Java: Oracle Corporation 23.21-b01 10:19:48.734 INFO - OS: Windows XP 5.1 x86 10:19:48.734 INFO - v2.33.0, with Core v2.33.0. Built from revision 4e90c97 10:19:48.843 INFO - RemoteWebDriver instances should connect to: http://127.0.0. 1:4444/wd/hub 10:19:48.843 INFO - Version Jetty/5.1.x 10:19:48.843 INFO - Started HttpContext[/selenium-server/driver,/selenium-server /driver] 10:19:48.843 INFO - Started HttpContext[/selenium-server,/selenium-server] 10:19:48.843 INFO - Started HttpContext[/,/] 10:19:48.890 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@176343 e 10:19:48.890 INFO - Started HttpContext[/wd,/wd] 10:19:48.906 INFO - Started SocketListener on 0.0.0.0:4444 10:19:48.906 INFO - Started org.openqa.jetty.jetty.Server@388c74 -------------------------------------------------------------------------------------- 
    創建新session
    10:20:38.593 INFO - Executing: [new session: {platform=ANY, javascriptEnabled=tr ue, browserName=chrome, version=}] at URL: /session) 10:20:38.593 INFO - Creating a new session for Capabilities [{platform=ANY, java scriptEnabled=true, browserName=chrome, version=}]
    webdrivr通過GET方式發送請求 [
    0.921][INFO]: received Webriver request: GET /status
    向webdrver返回響應,返回碼200表示成功 [
    0.921][INFO]: sending Webriver response: 200 { "sessionId": "", "status": 0, "value": { "build": { "version": "alpha" }, "os": { "arch": "x86", "name": "Windows NT", "version": "5.1 SP3" } } }
    webdriver 再次以POST方式發送請求,并啟動瀏覽器相關信息 [
    0.984][INFO]: received Webriver request: POST /session { "desiredCapabilities": { "browserName": "chrome", "javascriptEnabled": true, "platform": "ANY", "version": "" } } [0.984][INFO]: Launching chrome: "C:\ocuments and Settings\Administrator\Local S ettings\Application ata\Google\Chrome\Application\chrome.exe" --remote-debugging -port=4223 --no-first-run --enable-logging --logging-level=1 --user-data-dir="C: \OCUME~1\AMINI~1\LOCALS~1\Temp\scoped_dir1808_7550" --load-extension="C:\OCUME~1 \AMINI~1\LOCALS~1\Temp\scoped_dir1808_26821\internal" --ignore-certificate-error s data:text/html;charset=utf-8, [1.773][INFO]: sending Webriver response: 303
    webdriver再次以GET方法請求,這附加上了session的信息 [
    1.778][INFO]: received Webriver request: GET /session/32b33aa585ccbbf7ba7853588 2852af3
    服務器先對sesssionID進行解析,確認是selenium調用的以及要訪問的網址, [
    1.779][INFO]: sending Webriver response: 200 { "sessionId": "32b33aa585ccbbf7ba78535882852af3", "status": 0, "value": { "acceptSslCerts": true, "applicationCacheEnabled": false, "browserConnectionEnabled": false, "browserName": "chrome", "chrome": { "chromedriverVersion": "2.0" }, "cssSelectorsEnabled": true, "databaseEnabled": true, "handlesAlerts": true, "javascriptEnabled": true, "locationContextEnabled": true, "nativeEvents": true, "platform": "Windows NT", "rotatable": false, "takesScreenshot": true, "version": "27.0.1453.116", "webStorageEnabled": true } } 10:20:40.640 INFO - Done: /session 10:20:40.640 INFO - Executing: org.openqa.selenium.remote.server.handler.GetSess ionCapabilities@14cf7a1 at URL: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc) 10:20:40.640 INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc 10:20:40.656 INFO - Executing: [get: http://www.youdao.com] at URL: /session/ac5 b2c71-5b1a-469e-814c-fdd09a2061fc/url)
    webdriver正試向服務器請求youdao網站 [
    1.820][INFO]: received Webriver request: POST /session/32b33aa585ccbbf7ba785358 82852af3/url { "url": "http://www.youdao.com" } [1.822][INFO]: waiting for pending navigations... [1.829][INFO]: done waiting for pending navigations [2.073][INFO]: waiting for pending navigations... [2.900][INFO]: done waiting for pending navigations
    獲得服務器數據的應答 [
    2.900][INFO]: sending Webriver response: 200 { "sessionId": "32b33aa585ccbbf7ba78535882852af3", "status": 0, "value": null } 10:20:41.734 INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/url -------------------------------------------------------------------------------------- 下面接著發送定位輸入框的信息 10:20:41.734 INFO - Executing: [find element: By.name: q] at URL: /session/ac5b2 c71-5b1a-469e-814c-fdd09a2061fc/element) [2.905][INFO]: received Webriver request: POST /session/32b33aa585ccbbf7ba785358 82852af3/element { "using": "name", "value": "q" } [2.905][INFO]: waiting for pending navigations... [2.905][INFO]: done waiting for pending navigations [2.922][INFO]: waiting for pending navigations... [2.922][INFO]: done waiting for pending navigations
    得到服務器應答 [
    2.922][INFO]: sending Webriver response: 200 { "sessionId": "32b33aa585ccbbf7ba78535882852af3", "status": 0, "value": { "ELEMENT": "0.19427558477036655:1" } } 10:20:41.765 INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/element 10:20:41.765 INFO - Executing: [send keys: 0 org.openqa.selenium.support.events. EventFiringWebDriver$EventFiringWebElement@a8215ba9, [h, e, l, l, o]] at URL: /s ession/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/element/0/value)
    向定位到的輸入框寫入hello [
    2.936][INFO]: received Webriver request: POST /session/32b33aa585ccbbf7ba785358 82852af3/element/0.19427558477036655:1/value { "id": "0.19427558477036655:1", "value": [ "h", "e", "l", "l", "o" ] } [2.936][INFO]: waiting for pending navigations... [2.936][INFO]: done waiting for pending navigations [3.002][INFO]: waiting for pending navigations... [3.002][INFO]: done waiting for pending navigations [3.002][INFO]: sending Webriver response: 200 { "sessionId": "32b33aa585ccbbf7ba78535882852af3", "status": 0, "value": null } 10:20:41.843 INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/element/ 0/value
    再次發送定位輸入框的請求
    10:20:41.843 INFO - Executing: [find element: By.name: q] at URL: /session/ac5b2 c71-5b1a-469e-814c-fdd09a2061fc/element) [3.006][INFO]: received Webriver request: POST /session/32b33aa585ccbbf7ba785358 82852af3/element { "using": "name", "value": "q" } [3.006][INFO]: waiting for pending navigations... [3.006][INFO]: done waiting for pending navigations [3.016][INFO]: waiting for pending navigations... [3.016][INFO]: done waiting for pending navigations [3.016][INFO]: sending Webriver response: 200 { "sessionId": "32b33aa585ccbbf7ba78535882852af3", "status": 0, "value": { "ELEMENT": "0.19427558477036655:1" } } 10:20:41.859 INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/element 10:20:41.859 INFO - Executing: [send keys: 0 org.openqa.selenium.support.events. EventFiringWebDriver$EventFiringWebElement@a8215ba9, [k, e, y, ., E, N, T, E, R] ] at URL: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/element/0/value) 對定位的到的輸入框發送回車(ENTER)事件請求 [3.021][INFO]: received Webriver request: POST /session/32b33aa585ccbbf7ba785358 82852af3/element/0.19427558477036655:1/value { "id": "0.19427558477036655:1", "value": [ "k", "e", "y", ".", "E", "N", "T", "E", "R" ] } [3.021][INFO]: waiting for pending navigations... [3.021][INFO]: done waiting for pending navigations [3.064][INFO]: waiting for pending navigations... [3.064][INFO]: done waiting for pending navigations [3.064][INFO]: sending Webriver response: 200 { "sessionId": "32b33aa585ccbbf7ba78535882852af3", "status": 0, "value": null } 10:20:41.906 INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/element/ 0/value 10:20:41.906 INFO - Executing: [close window] at URL: /session/ac5b2c71-5b1a-469 e-814c-fdd09a2061fc/window) [3.068][INFO]: received Webriver request: ELETE /session/32b33aa585ccbbf7ba78535 882852af3/window [WARNING:chrome_desktop_impl.cc(88)] chrome detaches, user should take care of d irectory:C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\scoped_dir1808_7550 and C:\DOCUME~1\ ADMINI~1\LOCALS~1\Temp\scoped_dir1808_26821 [5.318][INFO]: sending Webriver response: 200 { "sessionId": "32b33aa585ccbbf7ba78535882852af3", "status": 0, "value": null } 10:20:44.156 INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/window
    復制代碼

     

    request 請求 response 應答

    一次請求會對應一次應答

    POST/GET  是請求(request)兩種類型;關于兩種請求方式的類別參考其它資料

    200 203 是 HTTP請求返回的狀態碼,200表示成功;

    sessionid :每一個訪問服務器的客戶端,都要先得到服務器端分配的一個sessionid ,就像通行證一樣,只有得到sessionid的客戶端才能向服務器請求想要的數據。

      其它還包括操作系統版本,瀏覽器類型、URL、字符類型等非常詳細的記錄。熟悉HTTP ,了解TCP 的三次握手四次揮手,相信你對瀏覽器的交互與webdriver原理會有更深入的認識。

    posted on 2014-03-31 18:51 順其自然EVO 閱讀(350) 評論(0)  編輯  收藏 所屬分類: 自動化測試python

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 黑人大战亚洲人精品一区| 亚洲国产精品久久久久婷婷老年| 男女交性无遮挡免费视频| 中文字幕人成人乱码亚洲电影| 久久久精品2019免费观看| 亚洲av成人一区二区三区观看在线| 亚洲性日韩精品一区二区三区| 污视频在线免费观看| 色天使色婷婷在线影院亚洲| 午夜亚洲AV日韩AV无码大全| 日韩在线免费播放| 在线播放免费人成毛片乱码| 亚洲乱码无人区卡1卡2卡3| 亚洲精品二区国产综合野狼| 午夜毛片不卡高清免费| 久久国产乱子精品免费女| 亚洲最大的成人网| 亚洲精品国产成人99久久| 国产99视频免费精品是看6| 曰批视频免费40分钟试看天天| 无人视频在线观看免费播放影院 | 亚洲AV美女一区二区三区| 成年人网站在线免费观看| 国内精品一级毛片免费看| 久久精品国产亚洲AV未满十八| 久久亚洲春色中文字幕久久久| 亚洲第一页日韩专区| 无限动漫网在线观看免费| a级毛片在线免费| 亚洲GV天堂无码男同在线观看| 久久久久亚洲AV无码网站| 中文字幕精品无码亚洲字| 国产成人免费网站在线观看| 永久免费在线观看视频| 免费在线观看一级片| 一级片在线免费看| 国产成人综合亚洲绿色| 亚洲人成网国产最新在线| 精品日韩亚洲AV无码一区二区三区| 久久久青草青青国产亚洲免观| 免费人成在线观看网站视频 |