如何使用 selenium c# 管理基本身份验证登录?

时间:2021-01-12 18:19:15

标签: c# visual-studio selenium selenium-chromedriver basic-authentication

我正在为我进行实习的公司进行测试,但我不知道如何让脚本将我的凭据放入 this part,如果我进入页面(我自己,不是 chromedriver)自动从我电脑上的登录中获取凭据,显然测试驱动程序不能这样做,这就是我收到警报的原因,我的问题是如何自动将凭据放在那里?现在我正在让线程休眠并手动放置凭据,但我知道这不是最佳方法,我已经尝试使用警报方法:

var alert = driver.SwitchTo().Alert();
alert.SetAuthenticationCredentials("user","password");
alert.Accept();

但我收到此错误:

Message: OpenQA.Selenium.NoAlertPresentException : no such alert
(Session info: chrome=87.0.4280.141)

如果我等待,我会超时,但什么也没有发生,正如您所看到的,我正在使用 chrome,我读了几年的帖子,chrome 无法管理警报,但我不知道是不是这样今天的一件事,希望大家能帮帮我。

2 个答案:

答案 0 :(得分:1)

这不是警报,而是基本身份验证弹出窗口。


解决方案

您可以通过嵌入在网址中的用户名密码来访问网址,如下所示:

driver.Navigate().GoToUrl("http://<username>:<password>@website.com/");

作为在 Basic Auth 内登录的示例,您可以使用:

driver.Navigate().GoToUrl("http://admin:admin@the-internet.herokuapp.com/basic_auth");

参考文献

您可以在以下位置找到一些相关的详细讨论:

答案 1 :(得分:0)

经过几天的研究和尝试,这对我有用,我做了一个谷歌浏览器扩展,http://user:password@mywebsite.com 的基本身份验证方法不再起作用所以我做了这个扩展凭我的凭据,这有点冒险,但这是我找到的唯一解决方案

首先你需要制作一个 manifest.json:

{
  "name": "Webrequest API",
  "version": "1.0",
  "description": "Extension to handle Authentication window",
  "permissions": [
    "webRequest",
    "webRequestBlocking",
    "<all_urls>"
  ],
  "background": {
    "scripts": [
      "webrequest.js"
    ]
  },
  "manifest_version": 2
}

然后你需要创建webrequest.js:

chrome.webRequest.onAuthRequired.addListener(function(details){
        console.log("chrome.webRequest.onAuthRequired event has fired");
        return {
                authCredentials: {username: "myusername", password: "mypassword"}
            };
    },
    {urls:["<all_urls>"]},
    ['blocking']);

之后,您需要在开发者模式下的 chrome://Extension 站点中创建 crx,之后您应该可以在您尝试登录的网站中正常登录。

参考资料: How to handle authentication popup in Chrome with Selenium WebDriver using Java

希望对看到这篇文章的人有所帮助