簡體   English   中英

使用 Selenium Webdriver 處理 Windows 身份驗證

[英]Handling Windows authentication with Selenium Webdriver

在 C# 中基於 Selenium Webdriver 的測試必須使用 Windows 身份驗證登錄。

我嘗試了幾種方法:

  _Driver.SwitchTo().Alert();
  _Driver.FindElement(By.Id("UserName")).SendKeys("LynnTest");
  _Driver.FindElement(By.Id("Password")).SendKeys("Welcome1!");
  _Driver.SwitchTo().Alert().Accept();
  _Driver.SwitchTo().DefaultContent();

  IAlert alert = _Driver.SwitchTo().Alert();
  alert.SendKeys("LynnTest\\t");
  alert.SendKeys("Welcome1!");
  _Driver.SwitchTo().Alert().Accept();
  _Driver.SwitchTo().DefaultContent();

沒有一個是成功的。 我的本地系統上沒有 Windows 身份驗證對話框,因此我無法查看源代碼以確定如何使用 Selenium By 方法定位用戶名和密碼。

我相信 Windows 身份驗證對話框是由瀏覽器提供的,但我沒有找到該對話框的任何來源。

使用 Selenium(不是 AutoIt 或其他類似工具)如何將用戶名和密碼傳遞到 Windows 身份驗證對話框中? 解決方案必須基於 Selenium 代碼,而不是加載項,我無法訪問雲中的瀏覽器。

注意:在 URL 中傳遞用戶名和密碼不起作用,據我了解,因為該對話框不是由頁面上的 html 生成的。

您無法使用 Selenium 通過此窗口進行身份驗證。 因為這不是瀏覽器窗口,而是操作系統的身份驗證彈出窗口。 除了瀏覽器之外,Selenium 無法與其他進程一起工作。

但是您可以在不獲得此窗口的情況下進行身份驗證。

有兩種方法可以錯過它:

  1. 將帶有身份驗證的 URL 更改為: http://user:password@www.yourserveradress.com 。 這將在部分情況下起作用,並將驗證您所需的服務。 在另一種情況下,您可以使用方式 2。 [太舊的方式,現在不起作用]

  2. 您需要在瀏覽器中創建一個新的配置文件,將身份驗證傳遞給所需的服務並記住密碼/身份驗證。 此外,在您的測試中使用創建的瀏覽器配置文件。

    2.1. 如果服務的 cookie 生命周期較短,您可以從步驟 2 開始,在您的個人資料中額外為您的瀏覽器使用“AutoAuth”插件。

upd:據我所知,selenium 3.0 有一些新方法,您需要進行更多搜索。 這是太舊的答案。 如果你能以更好的方式風,請給我打電話。


  1. 您可以使用“White”框架通過登錄彈出窗口編寫自己的登錄實現。 在需要的步驟中,您可以檢查所有顯示的操作系統窗口的“正確”標題。 如果存在此類標題,請獲取窗口的句柄。 並使用“白色”進行登錄。

  2. 您可以使用以下項目https://github.com/ukushu/DialogCapabilities作為示例,並在不使用“White”框架的情況下編寫自己的實現。

當通過 url 傳遞憑據不起作用時,您可以通過使用外部軟件“AutoIt V3”來做到這一點。這與 Windows 身份驗證配合得很好。

最后,我使用了一種解決方法,首先導航到身份驗證頁面,進行身份驗證,然后重定向到要作為經過身份驗證的用戶進行測試的頁面。 這種方法使用可以編寫腳本的頁面內部身份驗證頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM