2017-06-10 170 views
0
  • 節點版本:7.8.0
  • 量角器版本:5.1.2
  • 角版本:1.5.3
  • 器瀏覽器:Chrome瀏覽器59
  • 操作系統和版本OSX 10.12.5

我的站點需要基本身份驗證。這一直運行良好,因爲我通過主頁網址傳遞憑據。基本認證防止頁面加載

browser.get(`https://${username}:${password}@${hosts.baseURL}`); 

但是,今天自動更新到Chrome 59後,停止工作。該頁面將不會加載。我得到一個空白頁面。

我發現,如果我從url中刪除憑據,頁面將加載正常,但我必須手動輸入憑據。不確定基本身份驗證是否是問題。 任何人都知道這可能的原因/解決方案?

謝謝。

更新: 原來@mplungjan是正確的。在Chrome v58中添加了改變基本身份驗證工作方式的標誌,並在v59中強制執行。這基本上打破了我所有的測試。在幾次投訴後,它將在v61中更換,也許v60。取得Chrome基本工作身份驗證它使用變更前的功能添加以下到Chrome選項的方式:

chromeOptions: { 
    args: ['--disable-blink-features=BlockCredentialedSubresources'] 
} 
+0

我建議你抱怨我給的鏈接。他們可能會改變主意:)或者接受他們有你的和你的訪客的安全心理 – mplungjan

回答

2

它不見了:

Evaluate dropping legacy and credentialed subresource requests.

啓用子資源請求其阻塞網址包含憑據。

這個補丁翻轉「BlockCredentialedSubresources」標誌,以「穩定」,並 它關係到//內容的功能標誌,我們可以作爲一個殺死開關使用,如果 事實證明,該特徵的企業使用較高比我們希望的 (總體數字仍然看起來合理低[1])。

意圖:https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/lx-U_JR2BF0

+0

這個變化打擊我們很難。我們有許多場景,我們使用Selenium來測試不同的用戶通過Windows身份驗證在企業Intranet上訪問Web應用程序。我們使用這些測試來確認用戶是否擁有訪問網址,頁面面板等的權限。無論如何,感謝這些信息 - 我們花了一段時間才弄清楚實際問題是什麼以及它爲什麼停止工作。 –

0

您可以解決此通過使用代理,如browsermob-proxy處理基本身份驗證。

這裏有快捷操作可以這樣做:

  1. 下載並提取browsermob代理
  2. 配置量角器使用代理:在protractor.conf。JS,添加一個代理部分,以你的能力,如:

    capabilities: { 
        browserName: 'chrome', 
        'chromeOptions': { 
         'args': ['disable-infobars=true'], 
         'prefs': {'credentials_enable_service': false} 
        }, 
        'proxy': { 
         'proxyType': 'manual', 
         'httpProxy': 'localhost:8888', 
         'sslProxy': 'localhost:8888' 
        }, 
    }, 
    
  3. 開始與量角器運行您的規格之前配置browsermob代理(8080端口用於通過它的REST API控制browsermob,8888是實際代理端口):

    $ browsermob-proxy --use-littleproxy false 
    $ curl -s --request POST --url http://localhost:8080/proxy?port=8888 
    $ curl -s --request POST --url \ 
        http://localhost:8080/proxy/8888/auth/basic/your.site.com \ 
        --data '{"username":"yourUsername","password":"yourPassword"}' \ 
        -H 'Content-type: application/json' 
    

這應該很好地工作(它確實對我來說),只要你不靠的WebSockets。

請注意,您還可以使用節點模塊(如browsermob-proxy-api)控制腳本中的browsermob代理。

0

我用以下解決方法:

  1. 首先我憑據傳遞的URL

    browser.get(`https://${username}:${password}@${hosts.baseURL}`); 
    

    所以在這一點上,我認證。

  2. 然後我做了第二個電話傳遞URL沒有憑據

    browser.get(`https://${hosts.baseURL}`); 
    

所以在最後我有:

browser.get(`https://${username}:${password}@${hosts.baseURL}`); 
    browser.get(`https://${hosts.baseURL}`); 

同樣的事情,它可能與任何測試框架(我正在使用量角器和代碼)。

因此,例如在Codeception這將是,如果與身份驗證憑據的URL在.yml文件中定義:

$I->amOnPage('/'); 
    $I->amOnUrl(`https://`.$baseURL); 

或者只是

$I->amOnUrl(`https://`.$username.`:`.$password.`@`.$baseURL); 
    $I->amOnUrl(`https://`.$baseURL); 
0

我嘗試添加disable-blink-features=BlockCredentialedSubresourceschromeOptions在我的config.js和它的文件爲我工作!

config.js:

exports.config = { 
seleniumAddress: 'http://localhost:4444/wd/hub', 

capabilities: { 
    "browserName": 'chrome', 
"chromeOptions": { 
args:['--disable-blink-features=BlockCredentialedSubresources'] 
}, 
specs: ['filename.js'] 
} 
}; 

在規格:

browser.get('http://username:[email protected]'); 

我確信保持憑據URL。我試着先把它拿出來,然後失敗了,然後重新加入並且效果很好。