1. 程式人生 > >使用 headless chrome進行測試

使用 headless chrome進行測試

注:文章聚合了現在 headless chrome 介紹和使用方式

包含了三個部分

  1. chrome 在 mac 上的安裝和簡單使用(來自官方)

  2. 利用 selenium 的 webdrive 驅動 headless chrome(自己新增)

  3. 利用Xvfb方式實現偽 headless chrome

概念

Headless模式解決了什麼問題: 自動化工具例如 selenium 利用有頭瀏覽器進行測試,面臨效率和穩定性的影響,所以出現了 Headless Browser, 3年前,無頭瀏覽器 PhantomJS 已經如火如荼出現了,緊跟著 NightmareJS 也成為一名巨星。無頭瀏覽器帶來巨大便利性:頁面爬蟲、自動化測試、WebAutomation...用過PhantomJS的都知道,它的環境是執行在一個封閉的沙盒裡面,在環境內外完全不可通訊,包括API、變數、全域性方法呼叫等。

So, Chrome59 推出了 headless mode,Chrome59版支援的特性,全部可以利用:ES2017ServiceWork(PWA測試隨便耍)無沙盒環境無痛通訊&API呼叫無與倫比的速度...

chrome59 在 mac 上的安裝和簡單使用

現在有兩個方式獲取支援 headless 的 chrome1.chrome 59 beta 版本:下載連結https://dl.google.com/chrome/...2.安裝安裝黃金版 chrome,Chrome Canary :獲取方式:

brew install Caskroom/versions/google-chrome-canary

3.簡單的使用,我就以 chrome 59,演示一下:

用一個命令啟動 Chrome 作為一個 Headless 服務:
./Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --headless --remote-debugging-port=9222 --disable-gpu http://demo.testfire.net
   
或者切到google chrome 這個程式目錄下
cd /Applications/Google Chrome.app/Contents/MacOS
然後執行
./Google\ Chrome  --headless --remote-debugging-port=9222
--disable-gpu http://demo.testfire.net

使用 Headless Chrome 抓取資料:

將要使用 Node.js 去連線我們執行中的 Chrome 例項。你需要確保你已經安裝了 Node,才可以繼續這個步驟。
讓我們生成一個普通的 Node 專案,只有一個依賴那就是 Chrome Remote Interface 包,它可以幫助我們與 Chrome 溝通。然後我們建立一個空白的 index.js 檔案。

mkdir my-headless-chrome && cd my-headless-chrome
npm init --yes
npm install --save chrome-remote-interface 
touch index.js

現在我們將要放一些程式碼到index.js。這個模板例子是由 Chrome 團隊提供的。它指示這個瀏覽器導航到github.com,然後通過 client 裡的 Network 屬性捕獲這個頁面上所有的網路請求。

vi index.js
將程式碼複製到裡面:
const CDP = require("chrome-remote-interface");

CDP(client => {
  // extract domains
  const { Network, Page } = client;
  // setup handlers
  Network.requestWillBeSent(params => {
    console.log(params.request.url);
  });
  Page.loadEventFired(() => {
    client.close();
  });
  // enable events then start!
  Promise.all([Network.enable(), Page.enable()])
    .then(() => {
      return Page.navigate({ url: "https://github.com" });
    })
    .catch(err => {
      console.error(err);
      client.close();
    });
}).on("error", err => {
  // cannot connect to the remote endpoint
  console.error(err);
});

最後啟動我們的 Node 應用。
node index.js
我們可以看到 Chrome 發出的所有的網路請求,然而並沒有一個實際的瀏覽器視窗。

$ node index.js
http://demo.testfire.net/
http://demo.testfire.net/style.css
http://demo.testfire.net/images/logo.gif
http://demo.testfire.net/images/header_pic.jpg
http://demo.testfire.net/images/pf_lock.gif
http://demo.testfire.net/images/gradient.jpg
http://demo.testfire.net/images/home1.jpg
http://demo.testfire.net/images/home2.jpg
http://demo.testfire.net/images/home3.jpg

利用 selenium 的 webdrive 驅動 headless chrome

鑑於以上的方式是利用 nodejs直接去操作 headless chrome

我提供一種方式,利用 selenium 的 webdrive 的 chromedriver驅動 chrome59進行 headless chrome 操作
利用 webdrive 的webdriver.ChromeOptions()方法,新增 headless 相關引數,從而驅動 headless的 chrome 
下面的程式碼是進行一個 web 登入的過程:


#coding:utf-8
from selenium import webdriver

url = "http://demo.testfire.net"
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options,executable_path='/Users/xxxx/driver/chromedriver')

driver.get('http://demo.testfire.net')
driver.find_element_by_xpath('//*[@id="_ctl0__ctl0_LoginLink"]').click()
driver.find_element_by_xpath('//*[@id="uid"]').clear()
driver.find_element_by_xpath('//*[@id="uid"]').send_keys('admin')
driver.find_element_by_xpath('//*[@id="passw"]').send_keys('admin')
driver.find_element_by_xpath('//*[@id="login"]/table/tbody/tr[3]/td[2]/input').click()

print driver.current_url

利用Xvfb方式實現偽 headless chrome

當瀏覽器不支援headless模式,可以利用python 的Xvfb實現偽 headless mode,Xvfb只是產生了一個虛擬視窗,瀏覽器只是沒有在當前視窗顯示.

簡單的列舉利用指令碼

#coding:utf-8
from selenium import webdriver
from xvfbwrapper import Xvfb

xvfb = Xvfb(width=1280,height=720)
xvfb.start()
driver = webdriver.Chrome()
driver.get('http://demo.testfire.net')
cookies = driver.get_cookies()
print cookies
driver.close()
xvfb.stop()

相關推薦

使用 headless chrome進行測試

注:文章聚合了現在 headless chrome 介紹和使用方式包含了三個部分chrome 在 mac 上的安裝和簡單使用(來自官方)利用 selenium 的 webdrive 驅動 headless chrome(自己新增)利用Xvfb方式實現偽 headless ch

在vue-cli生成的項目中使用karma+chrome進行單元測試

使用 設計實現 測試用例 runner 服務 進行 ui界面 包含 node 用vue-cli生成項目時,如果選擇了單元測試,那麽會采用karma+mocha作為單元測試框架,默認使用的瀏覽器是PhantomJs。 Karma是一個基於Node.js的JavaScri

1.1 WEB API 在幫助文檔頁面進行測試

進行 for 技術分享 mode scrip pts itl reference ges 這篇文章http://www.cnblogs.com/landeanfen/p/5210356.html寫得比較詳細, 我就挑簡單的來說。 首先用這功能要在WEB API創建的幫助文檔

【轉】利用 selenium 的 webdrive 驅動 headless chrome

edr 使用 fin fire logs ble user () 穩定性 1.參考 使用 headless chrome進行測試 2.概念 Headless模式解決了什麽問題: 自動化工具例如 selenium 利用有頭瀏覽器進行測試,面臨效率和穩定性的影響,所以出現了 H

基於headless chrome的遊戲資源下載實現 (初版)

刪掉 信息 問題: 自動 今天 實現 操作 進度 過程 上周介紹了實現前端資源下載的思路,今天給一個簡單的初版代碼。 首先 基於express啟動一個服務端容器,用於處理前端路由和後段邏輯處理,目錄結構如下: 其中gameDir是遊戲存放的地址,node_module

python利用unittest進行測試用例執行的幾種方式

尋找 顯示 成員 使用方式 main down 測試的 支持 ase 利用python進行測試時,測試用例的加載方式有2種: 一種是通過unittest.main()來啟動所需測試的測試模塊; 一種是添加到testsuite集合中再加載所有的被測試對象,而test

sell01 環境搭建、編寫持久層並進行測試

boot 就會 -s 虛擬 調試 deb project 直接 jdk1 1 環境配置   JDK  1.8   MAVEN  3.5   MYSQL  5.7   VirtualBox  5.1 2 搭建MYSQL環境   下載 VM 和 虛擬鏡像文件   虛擬鏡

selenium(六)Headless Chrome/Firefox--PhantomJS停止支持後,使用無界面模式。

phantomjs alt 頁面 gradient isp lease isa display 功能 簡介: 以前都用PhantomJS來進行無界面模式的自動化測試,或者爬取某些動態頁面。 但是最近selenium更新以後,‘Selenium support for

ApplicationContext進行測試的簡單使用

account contex pri pan -i bsp nes ger utl 第一種:只有一個xml文件public static void main(String[] args) { ApplicationContext ac = null;

selenium之使用chrome瀏覽器測試(附chromedriver與chrome的對應關系表)(轉)

clas color csdn col bsp The chrome 文件解壓 info https://www.cnblogs.com/JHblogs/p/7699951.html 使用WebDriver在Chrome瀏覽器上進行測試時,需要從http://chrom

滲透測試筆記:使用sqlmap對access數據庫進行測試

入侵 顯示空白 src gre mysq access數據庫 經典的 和數 條件 Sqlmap是開源的自動化SQL註入工具,由Python寫成,具有如下特點: 完全支持MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microso

通過python調用adb命令對app進行測試 啟動/停止app

turn -c 構造方法 PE ram split shell pytho time 轉於博客 https://blog.csdn.net/sunfengye/article/details/77498935 yipianfeng_ye的專 #啟動apk messa

開發者測試-采用精準測試工具對Spring Boot應用進行測試

新建 之間 分享 maven倉庫 第一個 項目 數據傳輸 寫實 blog 簡介:本文主要介紹把現今主流的springboot框架項目和精準測試工具進行結合和應用,通過精準測試的數據穿透、數據采集、測試用例與代碼的雙向追溯、數據分析等一系列精準測試的特有功能,達到對項目質量的

開發者測試(2)-采用精準測試工具對J2EE Guns開發框架進行測試

命令行 時序數據 我們 .sql roc project 控制流程 實現 分享圖片 配置測試Guns  Guns簡介    Guns是一個近幾年來基於SpringBoot的開源便利且較新的JavaEE項目開發框架,它整合了springmvc + shiro + mybati

CNN autoencoder 進行異常檢測——TODO,使用keras進行測試

mov ons pure exc gen fine rman ras note https://sefiks.com/2018/03/23/convolutional-autoencoder-clustering-images-with-neural-networks/ h

定義一個Father和Child類,並進行測試

1. 題目描述 定義一個Father和Child類,並進行測試. 要求如下:  1)Father類為外部類,類中定義一個私有的String型別的屬性name,name的值為“zhangjun”。  2)Child類為Father類的內部類,其中定義一個introFather()方法,方法

動態載入的js檔案在Chrome進行除錯時找不到

有時候由於各種原因需要動態載入js檔案,如: $('body').append("<script type='text/javascript' src='./editor.js'><\/script>"); 這時候入如果想對剛加進去的js檔案進行除錯的話,會發現找不到

使用Chrome進行簡單的前端除錯

Chrome DevTools實時編輯HTML和CSS html實時編輯 選擇了一個元素,就可以通過各種方式與它進行互動。通過右鍵單擊“元素”選項卡中的HTML並選擇“編輯為HTML(edit as html)”,您可以實時編輯網頁的標記,Chrome將在編輯完成後立即呈現該標記。

使用FLASH BUILDER 4和FLEXUNIT進行測試驅動開發

https://www.adobe.com/devnet/flex/articles/flashbuilder4_tdd.html 要求 必備知識 所需產品 示例檔案 建議您構建Flex應用程式的經驗。 Flash Builder (下載試用版) flashbuilder_td

R_Studio(cart演算法決策樹)對book3.csv資料用測試進行測試並評估模型

    對book3.csv資料集,實現如下功能:   (1)建立訓練集、測試集   (2)用rpart包建立關於類別的cart演算法的決策樹   (3)用測試集進行測試,並評估模型     book3.csv資料集   se