使用Selenium WebDriver如何登录弹出窗口?

13

如果我使用火狐浏览器,弹出窗口只会在那里发生,有没有办法解决这个问题?每次我使用火狐浏览器时都必须输入用户名和密码。

目前,每次运行测试时我都要手动输入,这非常痛苦,但我正在寻找一种更自动化的方法...

我已经搜索到两个链接herehere,但都无济于事

enter image description here


我尝试了这样的方法 - 使用将用户名和密码发送到URL请求中的方法:http://username:password@the-site.com - 但仍然不起作用... 仍然要求输入用户名/密码。 - Nick Kahn
这是哪个浏览器?如果URL格式不被所有浏览器支持,那么它在webdriver中无法工作,你手动操作也不会成功。 - Ashwin Prabhu
我也遇到了同样的问题(在FF中也是如此)。如果您手动输入URL,则可以正常工作,但如果使用webdriver则无法正常工作。不过我还没有找到解决办法:( - Stilltorik
这可能会对你有所帮助:https://dev59.com/Smkv5IYBdhLWcg3wvDJF - Harshavardhan Konakanchi
@Ashwin:我正在使用IE,这只发生在FireFox上。 - Nick Kahn
@AbuHamzah,我认为最好、最简单的方法是不进行任何特殊处理,让浏览器提示输入用户名和密码。你可以使用awt.Robot填写详细信息并轻松地按Enter键。 - Ashwin Prabhu
5个回答

7
http://username:password@xyz.com 

这对我有用(xyz.com是该网站的名称)。

这仅适用于基本身份验证,不适用于NTLM。 - Tatarin

5

经过几个小时的阅读,我终于找到了解决方案,它非常有效,我希望这也能帮助其他人。-享受吧!

首先-按照以下步骤进行:

1) Open the FireFox browser
2) Type the following `about:config`
3) Look for `network.http.phishy-userpass-length` if you don't find then create a new Integer key 
Create a new Integer key (right-click->New->Integer): `network.http.phishy-userpass-length` with value `255`

第二步:您需要使用以下内容创建Firefox驱动程序:

FirefoxProfile profile = new FirefoxProfile();
profile.SetPreference("network.http.phishy-userpass-length", 255);
profile.SetPreference("network.automatic-ntlm-auth.trusted-uris", "YOUR HOST ADDRESS HERE");
_driver = new FirefoxDriver(profile);

如果您有任何问题,请告诉我。


对我不起作用。我正在使用代理。如果我这样做,就无法使用代理。 - roger_that
这个解决方案对我很有用,除了执行http://username:password@xyz.com之外。请注意,如果用户名和密码包含特殊字符,则应进行URL编码。 - Kamal Joshi

5
如果这是一个Windows用户账户和密码,则需要通过设置启用集成的Windows登录,具体步骤请参考此链接
network.negotiate-auth.delegation-uris: MyIISServer.domain.com
network.automatic-ntlm-auth.trusted-uris: MyIISServer.domain.com
network.automatic-ntlm-auth.allow-proxies: True
network.negotiate-auth.allow-proxies: True

在WebDriver启动的Firefox配置文件中设置。一旦您创建并保存了配置文件(当没有其他实例运行时运行“Firefox -P”来选择配置文件),您可以在代码中执行以下操作:

File profileDir = new File("C:/wherever/SeleniumFirefoxProfile");
FirefoxProfile profile = new FirefoxProfile(profileDir);
profile.setEnableNativeEvents(true);
driver = new FirefoxDriver(profile);

我已经在Firefox中启用了集成的Windows登录,但是当我使用Firefox运行我的测试时,它提示我输入用户名/密码,有什么想法吗? - Nick Kahn
无论我输入凭据的次数,它总是要求我重新输入...你能向我展示如何实现你刚才所说的步骤吗? - Nick Kahn
听起来你的网站没有使用Windows登录(你的域帐户和密码),因为启用该功能后,您不应该再需要指定凭据(network.automatic-ntlm-auth.trusted-uris)。可能你需要做的是将缓存的名称/密码放入你的WebDriver启动的Firefox实例配置文件中。你能确认WD是否正在使用你的自定义配置文件启动FireFox吗?如果是这样,那么手动使用该配置文件启动FF,进入登录提示,输入凭据并勾选“记住”框,然后关闭FF。如果WD使用该配置文件,则应该可以正常工作。 - VolleyJosh
我还没有创建自定义配置文件,我该如何通过键入“firefox.exe -p”来创建?然后之后我需要做什么? - Nick Kahn
1
这里有一个类似的讨论 链接 关于如何在同一浏览器上重新运行Selenium 2.0 WebDriver测试的。 - VolleyJosh
显示剩余3条评论

0
你可以使用一个名为“autoauth”的FF插件。下载该插件并按照以下方式创建Firefox实例:
FirefoxProfile firefoxProfile = new ProfilesIni().getProfile("default");
File pluginAutoAuth = new File("D:\\autoauth-2.1-fx+fn.xpi");
firefoxProfile.addExtension(pluginAutoAuth);
driver = new FirefoxDriver(firefoxProfile);

我使用了 "autoauth-2.1-fx+fn.xpi"。


您可以从以下链接下载:https://addons.mozilla.org/en-US/firefox/addon/autoauth/ - Ripon Al Wasim

0

我曾经几次处理过这些问题,我的方法是使用 Selenium 之外的脚本。你正在使用 Windows 吗?

基本上做法如下:

1) 在加载页面、单击 URL 等触发该对话框出现之前:

-- Launch an asynchronous script to handle the login

2) 然后加载页面,点击链接等

-- Selenium will block until your asynch script completes

异步脚本:
-- Sleep for a few seconds
-- Activate the dialog
-- Send the username
-- Send a TAB
-- Send the password
-- Send a TAB
-- Send the Enter Key

如果您正在使用Windows,我可以发布处理此问题的示例脚本。我已经用Java和C#完成了这个任务,但我猜无论您如何编写测试,基本上都可以使用相同的方法(除非您严格使用FF插件,在这种情况下,这将不起作用)。
如果您需要更多详细信息,请告诉我。

1
如果您还有可用的C#脚本示例,我会非常感兴趣。 - B-K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接