Geb:如何在加载页面时与浏览器的BasicAuth对话框进行交互

时间:2014-11-24 20:26:12

标签: java selenium automation awt geb

我在tomcat上托管了一个受保护的应用程序。由apache的Digest身份验证代理。当我访问服务器上的任何东西时,我得到一个basicAuth样式登录对话框。

当我尝试使用下面的代码登录时,它永远不会出现在“driver.switchTo()。alert()”部分....它会在via ...语句中永远循环并抛出异常。我猜测GEB的“to”和“via”语句都在等待页面加载完成。现在geb正在等待页面加载,页面正在等待geb输入凭据。死锁。能否请您就如何解决此问题提出任何建议?请注意我已经尝试过http://:@ mydomain.com / index.jsp,但它一直提示我一个威胁性的登录对话框。

via AppLoginPage //using a page object here 
Alert alert= driver.switchTo().alert();
// Type the username
alert.sendKeys(user);        
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_TAB);

简单来说,如何让geb完成等待整页加载,以便我的机器人代码可以处理警报?希望很清楚。

3 个答案:

答案 0 :(得分:1)

我们对内部应用使用baseUrl = 'http://admin:password@yourwebsite.com'样式进行身份验证。

我们在一个阶段使用代理并尝试过机器人,但它有时会导致Webdriver使用的现有库出现问题,并且发现问题更少。

如果您使用IE:@将无效。但是,您可以使用组策略和注册编辑来启用此功能。请注意这是一个安全问题。

如果这不是您的首选方式,我可以为您挖出旧代码。

I used a similar answer as per this question

答案 1 :(得分:0)

我认为使用WebDriver以及Geb也不可能处理基本的身份验证对话框。您可以尝试在基本网址中提供凭据,例如baseUrl = 'http://admin:password@yourwebsite.com'。如果这不起作用,那么您将需要设置某种身份验证代理并配置您正在使用它的驱动程序。

答案 2 :(得分:0)

我无法使用用户:密码解决方案,因为我的名字包含@(或者有没有办法逃脱它?)。无论如何,我用LittleProxy进行了实验,因为它是用Java编写的,我希望我可以在测试之前轻松启动它,然后注入"我的请求中的授权标头发送到测试的URL。

所以:1。启动代理,2。配置驱动程序,使其正确使用代理,3。运行测试

这导致代码can be found in its completeness in my answer与类似问题How to handle server authentication using Geb/WebDriver

的粗略代码

代码基于Browse.drive调用,它设置了Firefox驱动程序。我希望IE也可以这样使用。

我真的不知道在哪里提出答案,但我不想复制它 - 毕竟它在StackOverflow上。