我正在自动化包含浏览器级别身份验证的应用程序。

,当我打开应用程序时,浏览器将执行基本身份验证,即提示输入用户名和密码。如何使用Selenium处理这种情况?

#1 楼

使用http://username:password@site.com/pagehttp://site.com/page.

评论


Misha Akovantsev做到了。我喜欢这样的简单解决方案。如果您具有不同的环境(使用/不使用密码),则必须使用“ if”来处理。由于URL已被外部化,因此是完美的解决方案。

–屠妖屠夫
2012年12月29日在20:06

嗨@FelipeButcher-欢迎来到SQA!由于您还没有privs直接添加评论,因此我可以自由地将您的答案转移到您所谈论的帖子的评论中,以便人们可以在正确的位置看到它。

– testerab
2012年12月30日12:59

很棒的解决方案。唯一的缺点是凭据将作为URL的一部分记录在服务器端。但是我相信这是次要的安全问题,因为您可能已经在测试数据中纠缠了这些凭据,而且它们是伪造的。

– dzieciou
2014年5月17日17:03



我在IE和Chrome中手动尝试了这种方法。出于安全原因,IE不接受此URL语法:support.microsoft.com/kb/834489

– dzieciou
2014年5月17日在17:07

我无法通过ChromeDriver传递HTTP身份验证。这并不总是适用于Selenium。它取决于驱动程序。

– Zabumba
16年4月18日在15:30

#2 楼

这里是一种处理方法,即创建浏览器配置文件并检查提醒密码。通过在执行之前调用配置文件,下次它将不再询问您身份验证。让我知道它是否无效。

评论


可能适用于Firefox,适用于IE或Chrome吗?使用ChromeDriver对我来说失败。

– Zabumba
16年4月18日在15:32

#3 楼

基本身份验证在Selenium中不能很好地处理,老实说,我不确定它也应该是(虽然会很好)。我一直使用的解决方案是在autoIT或类似的东西中创建一个能够访问身份验证框的脚本。
本质上,创建用于查找身份验证框的脚本,输入凭据,单击“确定”或按输入然后结束或终止此子脚本。

这很脏,不是理想的选择,但这是我到目前为止发现的可以与多个浏览器一起使用的最佳解决方案。

#4 楼

如果您提供有关您使用哪种语言/平台的更多信息,那会更好,但是,无论如何……

硒在处理此类窗口方面并不是很好,所以

如果您正在使用Java,则请查看Robot类。

如果您正在使用Ruby,C#,Java,请查看WatiR,WatiN,WatiJ。所有这些库都可以按其标题
附加到现有浏览器,并处理弹出对话框。我并不是说要用WatiN替换Selenium,但是您可以使用此特定目的的库。

对于.NET,您还可以使用Windows UI自动化

当然,您可以使用AutoIt或AutoHotkey。最简单的方法是将对话框处理代码编译成.exe文件,并在需要时使用特定参数运行它。

评论


感谢您的答复,IAM将Java(TestNG)与硒和平台一起使用是Windows计算机firefox浏览器

–saikrishna
2012年3月15日上午8:36

#5 楼

如果您在带有或不带有RIDE IDE的情况下使用robotframework,则此建议实际上对我有用。
与“保存的密码编辑器”结合使用


通过启动ff配置文件生成新的firefox配置文件管理器(dos提示:ff.exe -p)
使用此配置文件启动ff
安装附加自动身份验证,(允许您在存储后自动登录具有基本身份验证的网站ff的密码管理器中的凭据;没有此附加组件,即使您将每个新会话都存储在密码管理器中,也会提示您输入凭据。)
转到您的网站,填写凭据,然后将其保存在密码管理器中。
使用此配置文件运行您的robotframework测试:使用-firefoxProfileTemplate'C:\ Program Files(x86)\ Mozilla Firefox ... \ path_to_this_new_profile'<选项独立启动硒服务器。 br />

评论


是的,这也是我使用的解决方案(不仅限于robotframework。)。使用AutoAuth或类似的设置浏览器,保存配置文件,指定在启动浏览器/测试时使用该配置文件。由于安全性,传递用户名/传递URL的其他选项(最佳答案)可能会失败,并且任何其他方式都无法与Selenium网格一起使用。

–乔治
16-10-12在16:13



#6 楼

如果您使用的是Mac计算机,那么除了Dmitry和Lyndon的答案外,您还可以使用Apple脚本。处理这种情况非常有效。如果您使用的是Java,则只需使用Java运行时类运行脚本。

#7 楼

我刚刚完成了一个原型项目,该项目应该能够处理这种情况。它是用C#编写的,因此当前仅适用于Selenium的.NET版本。

它使用流行的开源代理BrowserMob进行身份验证。

SeleniumBasicAuthWrapper希望对您有所帮助!这项工作仍在进行中,但希望我们能在不久的将来解决所有的问题或缺陷。

#8 楼

由于这是Google上的热门产品之一,如果您不能使用http:// username:password @ url,则可以提供ruby解决方案。

您可以使用系统输入,但可以在Windows和Windows上使用mac是不同的。这是在Mac上的解决方案:

您必须先检测测试是否在Windows或Mac上运行,然后再执行相应的操作。

  t1=Thread.new{
    @browser.get 'url';

  }
  t2=Thread.new{
    sleep (10)
    #replace these lines with the windows corresponding if on windows.
    %x(osascript -e 'tell application "System Events" to keystroke "username"')
    %x(osascript -e 'tell application "System Events" to keystroke tab')
    %x(osascript -e 'tell application "System Events" to keystroke "password"')
    %x(osascript -e 'tell application "System Events" to keystroke return')

  }
  t1.join()
  t2.join()


这是Windows解决方案:

t1=Thread.new{
    @browser.get 'url'  

}
t2=Thread.new{
    sleep (5)
    wsh = WIN32OLE.new('Wscript.Shell')
    wsh.AppActivate('browser') #fx. firefox
    wsh.SendKeys('username{TAB}password{ENTER}')
}
t1.join()
t2.join()


#9 楼

打开浏览器(Selenium2Library.Open浏览器)后,我使用了AutoItLibrary关键字,如下所示:

Win Activate    Windows Security
Send    <username>{TAB}
Send    <password>{Enter}


这对于gc,ff和ie ...对于ff


需要在“打开浏览器”命令中设置所需的功能。 ($ {preferences} =创建字典webdriver_accept_untrusted_certs true webdriver_assume_untrusted_issuer为false)
配置文件需要设置如下:

配置文件设置如下:

a)关闭任何正在运行的Firefox实例。

b)使用配置文件管理器启动Firefox(用于运行测试的版本):firefox -ProfileManager

c)创建一个新的配置文件。系统将提示您选择配置文件的目录。将其放在编写测试的项目中。
选择配置文件并使用它运行Firefox。

浏览到HTTPS URL(带有自签名证书),您将将要进行测试。

在提示时接受自签名证书。这将在配置文件中为其创建异常。

关闭浏览器。

转到Firefox配置文件目录。

删除目录中的所有内容除了cert_override.txt和cert8.db文件。

运行Selenium服务器时,请向其传递-firefoxProfileTemplate /path/to/profile/dir参数。这告诉Selenium使用您的部分配置文件(带有证书例外)作为铸造其新配置文件的基础。因此,您将获得证书例外,但如果使用整个配置文件,则不会出现其他混乱情况。