【问题标题】:How to handle browser authentication in Chrome using Selenium Webdriver (C#)?如何使用 Selenium Webdriver (C#) 在 Chrome 中处理浏览器身份验证?
【发布时间】:2017-07-18 16:21:22
【问题描述】:

我正在使用 C# 在 selenium Web 驱动程序中为 Chrome 浏览器编写自动化脚本。我陷入了这样一种情况,即多个选项卡在同一个浏览器中打开,我需要导航到浏览器的第一个选项卡,并且需要在身份验证对话框中重新输入登录凭据。

请查看以下授权窗口截图:

我无法导航到第一个选项卡,也无法传递用户名和密码。我在 Stackoverflow 中找到了一些答案,并在我的脚本中进行了尝试,但没有成功。这是我的示例代码:

WebDriverWait wait = new WebDriverWait(driver, 10);
IAlert alert = wait.Until(ExpectedConditions.AlertIsPresent());
alert.SetAuthenticationCredentials(username, pwd);

执行上述代码后,出现如下错误:

WebDriverWait 有一些无效参数。 参数“2”:无法从“int”转换为“System.TimeSpan”

Chrome 浏览器有具体的代码吗?我正在使用 Visual Studio 2008。

【问题讨论】:

  • 正如我提到的,我在 Stackoverflow 中搜索了一些线程,但它在我的脚本中不起作用。所以没有必要将其标记为重复。
  • 请参阅:How do I do X? SO 的期望是,提出问题的用户不仅会进行研究以回答他们自己的问题,还会分享该研究、代码尝试和结果。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见:How to Ask
  • 你提到了它,但你没有提供任何细节。在您进行一些研究并实际提供详细信息来证明其他地方提供的解决方案如何在此处不起作用以及结果之前,尚未证明它不是重复。

标签: c# selenium selenium-webdriver webdriver


【解决方案1】:

尝试获取这样的 URL...

driver.get("http://username:password@www.domain.com");

在这里使用像这篇文章这样的 Alert 类(How to handle authentication popup with Selenium WebDriver using Java)显然只适用于 IE。

        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
        IAlert alert = wait.Until(ExpectedConditions.AlertIsPresent());
        alert.SetAuthenticationCredentials("username", "password")

【讨论】:

  • 嗨 Cavan 感谢您的回复,我尝试了您的代码行,但它给了我一个错误。 WebDriverWait 等待 = new WebDriverWait(驱动程序, 10); IAlert 警报 = wait.Until(ExpectedConditions.AlertIsPresent()); alert.SetAuthenticationCredentials(UserLogin.username, UserLogin.pwd); - 错误“参数 '2':无法从 'int' 转换为 'System.TimeSpan'”。 Chrome浏览器有具体的代码吗?
  • 我已将代码更新为 c#。之前是 java,语法略有不同。
  • 感谢 Cavan,我尝试了 driver.Navigate().GoToUrl("username:password@www.domain.com") 一些技巧,我能够处理身份验证警报窗口。
【解决方案2】:

看看这个教程,http://toolsqa.com/selenium-webdriver/autoit-selenium-webdriver/

我已经使用 Java 完成了这项工作,我假设您可以以相同的方式将 AutoIt dll 用于 C#。

【讨论】:

  • 感谢@smith9234 的回复。我尝试了 driver.Navigate().GoToUrl("username:password@www.domain.com"‌​) 一些技巧并且能够处理身份验证对话框。
【解决方案3】:

另一种方法:编写 chrome 扩展程序,它会监听 chrome.webRequest.onAuthRequired 并提供凭据。

文档:https://developer.chrome.com/extensions/webRequest#event-onAuthRequired

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-10
    • 2017-12-09
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 2015-07-26
    • 2020-06-03
    • 1970-01-01
    相关资源
    最近更新 更多